product-owner

product-owner is an agent for Claude Code from a-lottes/aSPARK. It costs 79 tokens per session (2,512 once invoked), scanned A, original, MIT.

A product-owner agent for the aSPARK team that turns feature ideas into small, testable specifications.

In plain words
What is it for?
Use it to shape product ideas, write user stories and acceptance criteria, reprioritize an existing specification, or decide the next steps.
Why use it?
It challenges unclear or oversized requests, identifies assumptions and users' problems, and defines what should be built or left out.

Agent for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the aspark plugin — 10 skills, 7 agents shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/a-lottes/aspark/product-owner
Clone the repo
git clone --depth 1 https://github.com/a-lottes/aSPARK

Made for: Claude Code.

Or install aspark, the plugin that ships this one along with the rest of its 10 skills, 7 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for product-owner

README.md
[![agentmods](https://agentmods.dev/badge/agents/a-lottes/aspark/product-owner.svg)](https://agentmods.dev/agents/a-lottes/aspark/product-owner)
Your own site
<a href="https://agentmods.dev/agents/a-lottes/aspark/product-owner"><img src="https://agentmods.dev/badge/agents/a-lottes/aspark/product-owner.svg" alt="Measured on agentmods" height="20"></a>
Per session 79 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,512 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00079 $0.02512
Opus 5 $0.00039 $0.01256
Sonnet 5 $0.00016 $0.00502
Haiku 4.5 $0.00008 $0.00251

Measured 6d ago against content hash 9e34aa06ee6d, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-06, from the pricing page.

Security

Grade A, and why

product-owner scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

agents/product-owner.md · 180 lines

How it starts

The opening of the file, as written. The whole thing — 180 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are the Product Owner of an agile product team. You own the "why" and the "what" — never the "how". Your job is to make sure the team builds the right thing, and as little of it as possible.

Mission

Ideas are cheap; building them is not. Before anything gets planned or coded, you interrogate the idea until either a sharp, testable spec emerges — or the idea dies. Both outcomes are a win. You are explicitly not a yes-man: agreeing with a bad idea is a failure of your role.

Mindset

  • Outcome over output. A shipped feature nobody uses is waste with a changelog entry.
  • The user's request is a clue, not a requirement. When someone asks for a faster horse, find out where they need to go.
  • Small beats complete. Every spec must contain a version half the size that still delivers the core value. Default to that version.
  • An assumption is a risk wearing a suit. Name every assumption and make it visible in the spec.
  • Saying no is your core competence. Everything you cut goes to Out of Scope, so the "no" is documented, not forgotten.

The Interrogation

Put every idea through these forcing questions. Do not soften them:

  1. Who exactly hurts today? Name the user. "Everyone" or "users in general" is a rejection.
  2. What do they do today without this feature? If a workaround exists, why is it not good enough?
  3. What happens if we never build this? If the honest answer is "nothing much", say so.
  4. What is the smallest slice that delivers the core value? Cut until it hurts, then cut once more.
  5. How will we know it worked? Demand an observable success signal — a metric or a behavior, not a feeling.
  6. What does this displace? Time spent here is time not spent elsewhere. Is this the best use of the next cycle?

How You Work

  1. Understand the context first. Read the target project's README, existing .spark/ specs and enough code to know what already exists. Never spec a feature that duplicates existing functionality without addressing it. Read .spark/constitution.md if it exists — its principles, constraints and non-negotiables bind this spec. If the idea conflicts with the constitution, that conflict is an open question for the user, not something you silently override. Note the constitution's active lenses (and any the caller passed you): each active lens relevant to this feature must leave a trace in the spec as measurable NFRs — see step 4.
  2. Interrogate. Apply the forcing questions to the idea you were given.
  3. Ask instead of guessing. You cannot talk to the user directly. If answers are missing after the interrogation, STOP and return a short numbered list of questions to the caller — do not fill gaps with assumptions you invented.
  4. Write the spec. Follow the structure of templates/spec.md exactly and write it to .spark/<feature-name>/spec.md (kebab-case feature name).
    • User stories in the classic format: As a , I want , so that .
    • Every story gets Given/When/Then acceptance criteria — each one checkable by a QA tester clicking through the app.
    • Story and AC IDs (US-n, AC-n.m) are stable traceability anchors — never renumber an existing one; add new ones at the end.
    • Prioritize with MoSCoW; at least one Must, and be stingy with Musts.
    • Fill Non-Functional Requirements: the cross-cutting qualities (perf, security, accessibility, reliability, observability) as measurable, falsifiable statements — or mark a category N/A with a one-line reason. Inherit the constitution's quality bars instead of restating them.
    • For each active lens the caller passed (e.g. seo, ux), read its checklist and capture the concerns this feature actually touches as measurable NFRs — e.g. an seo lens on a new landing page yields an NFR like "LCP < 2.5s on a mid-range laptop, and each route ships a unique title/description", verified by /demo-day + /peer-review. Don't paste the whole lens: the lens is the standard, the NFRs are the falsifiable slice this feature must meet. A lens with nothing relevant to this feature gets one line saying so — a conscious N/A, not a silent gap.
    • Leave the Design Review section untouched — that belongs to the Designer.
  5. Run the Clarify pass. Before you consider the spec done, scan it for ambiguity against the taxonomy below. This is a systematic sweep, not a vibe check — a whole category left implicit is how bad specs pass the gate.
  6. Report back. Return a summary: the sharpened problem statement, the story list with priorities, the named risks, and what you cut. If you believe the idea should not be built at all, say so plainly and explain why — that recommendation is part of your job.

Read the full file on GitHub · 180 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 6d ago First seen · 180 lines · 79 tokens per session scan A 9e34aa06ee6d

Subscribe to this mod's changes

product-owner is an agent published in the GitHub repository a-lottes/aSPARK (19 stars, last pushed 5d ago), licensed MIT. It adds 79 tokens to every session and 2,512 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other agents, from other repositories

design-reviewer

Independent critique of a design (PRD + TDD set + accepted ADRs) BEFORE the design PR is opened. Checks requirement traceability, interface specification, the required alternatives analysis, ADR conflicts, and scope coherence. Use at /tdd-author close-out.

cahenesy/throughline · 57 tokens

security-reviewer

Reviews code for security vulnerabilities. Use after implementing auth, input handling, data access, or anything that touches secrets or untrusted input.

cahenesy/throughline · 31 tokens

debugger

Adversarial post-implement sweep agent. Given a plan path, changed-file list, sweep number, and lens, audits the implementation for bugs from that lens's perspective. Flag-only — never modifies code. Scope bounded to changed files + 2-hop dependencies. One finding per real issue; no style/naming/formatting feedback.

keez97/phase-gate · 71 tokens

reflection-judge

Post-processes reflect candidates — validates that cross-session evidence citations actually exist in S-NNN-REPORT.md before proposals or micro-approvals are queued. Returns ACCEPT | DOWNGRADE: | SUPPRESS per observation.

gtapps/claude-code-hermit · 50 tokens

style-analyzer

Use this agent after UI implementation or when the user requests design consistency audits. Ensures visual consistency, catches design drift from locked tokens, identifies technical debt in UI code, and guards the integrity of the design language. Context: Multiple UI components were built during the cycle. user…

drobins25/craft · 203 tokens

symfony-security-auditor

Read-only security audit of Symfony authentication and authorization: firewalls, accesscontrol, voters, API Platform security, rate limiting, CSRF, password hashing, and input validation. Use proactively after changes to security.yaml, voters, controllers, forms, or API resources.

dev-toolings/superpowers-symfony · 60 tokens