Help us improve
Share bugs, ideas, or general feedback.
From agentic-development-workflow
Validates and frames product opportunities from vague ideas into structured product definitions. Produces YAML artifacts that feed downstream planning agents.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agentic-development-workflow:envisionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Transform a fuzzy product idea into a precise, testable product definition. First validate the opportunity is worth pursuing, then frame the product with enough precision that downstream agents can work without ambiguity.
references/orchestration-patterns.mdreferences/yaml-guardrails.mdtemplates/agent-topology.mdtemplates/context-document.mdtemplates/opportunity-brief.mdtemplates/product-context-schema.yamltemplates/references/symphony-spec-reference.mdtemplates/story-spec.mdtemplates/system-map.mdtemplates/technical-spec.mdShare bugs, ideas, or general feedback.
Transform a fuzzy product idea into a precise, testable product definition. First validate the opportunity is worth pursuing, then frame the product with enough precision that downstream agents can work without ambiguity.
Where this fits:
/aep-envision → /aep-map → /aep-scaffold → [ /aep-design → /aep-launch → /aep-build → /aep-wrap ] → /aep-reflect
▲ you are here
Session: Main, interactive with user
Input: Product idea (vague or refined)
Output: product/index.yaml with opportunity, personas, capabilities, and product sections; product-context.yaml with calibration and changelog sections. In v1 fallback mode (no split), writes everything to product-context.yaml.
YAML Schema: See templates/product-context-schema.yaml for the full structure and field definitions.
Check which mode to operate in:
ls product/index.yaml 2>/dev/null
ls product-context.yaml 2>/dev/null
File Resolution:
product/index.yaml exists → split mode. Product definition lives in product/index.yaml, operational state in product-context.yaml.product-context.yaml exists → v1 mode OR migration candidate. Ask the user: "Do you want to migrate to split mode (product/index.yaml + product-context.yaml) or keep the single file?"product/ directory.In update mode, read the existing file(s) and ask whether they want to revise or start fresh. Preserve all sections you are not updating.
Goal: Determine whether this idea is worth building at all, before investing in product design.
Why this is separate from product framing: Opportunity Framing answers "should we build this?" Product Framing answers "what exactly should we build?" Conflating them causes premature commitment — you start designing a product before validating the opportunity, and sunk-cost bias prevents you from killing a bad idea.
Let the user describe their idea freely. Do not impose structure yet. Your job is to extract the raw material:
After sufficient divergence, synthesize into an Opportunity Brief (see templates/opportunity-brief.md). The brief is deliberately short — one page. It captures the core bet: "I believe [target user] has [problem], and I can build [solution] because [advantage]."
Present the Opportunity Brief back to the user. This is an explicit decision point: proceed or kill.
If the opportunity does not survive an honest five-minute challenge, it should not consume the resources that subsequent phases require. Killing early is the highest-ROI decision in the entire workflow.
Split mode: Write the finalized Opportunity Brief to the opportunity section of product/index.yaml.
V1 mode: Write to the opportunity section of product-context.yaml.
Goal: Transform the validated opportunity into a precise product definition that downstream agents can consume without ambiguity.
Core premise: The user carries dozens of implicit assumptions — about users, scope, technical constraints, success criteria. Every assumption left implicit will be resolved by a downstream agent through guesswork. This phase makes every assumption explicit.
Continue the conversation from Phase 0, now focused on product specifics. Lines of inquiry:
Problem statement: Sharpen the problem. Not "developers need better tools" but "solo developers building SaaS on edge platforms lose 4+ hours per project setting up agent sandboxing because existing solutions assume AWS/GCP infrastructure."
Persona / JTBD: Who is the primary user, concretely? What job are they hiring this product to do? What does success look like from their perspective?
MVP boundary: What is the single most important end-to-end journey the user can complete? What is explicitly excluded, even if adjacent and tempting?
User activities (story map backbone): What does the user DO, step by step, in the core journey? Map the user's activities as a left-to-right narrative. Each activity is a verb phrase from the user's perspective: "Authenticate", "Create Profile", "Generate Content", "Track Progress", "Download Output". These form the backbone of the story map — the horizontal axis that layers cut across. The activities should read as a coherent sentence: "The user authenticates, then creates a profile, then generates content, then tracks progress, then downloads the output." This comes BEFORE layer definitions — build the backbone first, then draw release lines across it.
Technical constraints: Non-negotiable stack choices, infrastructure requirements, hard dependencies.
Quality dimensions: Which dimensions of this product require human judgment that agents cannot provide? Not every dimension needs calibration — only those where "correct but not right" is likely. Common dimensions:
For each declared dimension: what layer is it most likely to first need calibration? Why?
Layered MVP contract: Layer 0 is the walking skeleton — a horizontal slice across the activity backbone, picking the thinnest story from each activity. Each subsequent layer adds capabilities. Later layers may introduce new activities that extend the backbone to the right. Define what the user can accomplish at each layer.
.5 layers are human alignment layers, not just "UI polish." A .5 layer is any point where the team pauses agent execution to calibrate human intent across one or more quality dimensions. Layer 0.5 might be visual design only. Layer 1.5 might be visual design extension + copy tone. The calibration.plan maps layers to expected calibration checkpoints.
Organize everything into the Context Document (see templates/context-document.md). Present the draft to the user.
Populate product.quality_dimensions from the diverge conversation — for each dimension the user identified as needing human calibration, record the dimension, criticality, first calibration layer, and rationale.
Quality standard: every statement must be convertible into a verification condition. "The system should be performant" fails. "API p95 latency < 200ms" passes. If a statement cannot be tested, it is not precise enough for agents to act on.
Hand the Context Document to agents that did not participate in the conversation. They review it cold from three angles:
Each reviewer produces a challenge list. The user resolves each item — either by refining the document or marking it as an explicit open_question with a default assumption and a revisit trigger.
Note: The stress test is itself a form of pre-build calibration — independent agents check alignment before building. Post-build calibration (
/aep-calibrate) extends this to dimensions that only become visible after agents have produced output: visual design, UX flow, naming, tone.
Record the stress test results in product.stress_test within the YAML.
Split mode:
product/index.yaml:
opportunity (from Phase 0)personas (extracted from the persona work — use list format with id, description, jtbd)capabilities (at least one entry; single-journey products get one capability)product subsection: problem, goals, non_goals, mvp_boundary, constraints, layers, activities, failure_model, security_model, success_criteria, quality_dimensions, open_questions, decisions, stress_testproduct-context.yaml:
schema: v1, project, version, updated_at, dispatch_epoch: 0calibration.plan (mapped from quality_dimensions)calibration.history: []changelog entry recording what was created/aep-map)V1 mode: Write everything to product-context.yaml using templates/product-context-schema.yaml as the structural reference.
On subsequent runs — read the existing file(s), update the relevant sections, and preserve all other sections (e.g., architecture, stories, topology).
If quality dimensions were declared, also write the initial calibration.plan section — mapping each dimension to the layer where calibration is expected. This plan is refined by /aep-map (which has concrete layer definitions) and executed by /aep-calibrate.
If the product has 2+ distinct user journeys, also create capability map files:
product/index.yaml has multiple entries in capabilities[]product/maps/<capability-id>/frame.yaml — scope, boundary, primary user, outcome contract/aep-mapSimple single-journey products get one capability entry but skip frame.yaml and map.yaml.
See references/yaml-guardrails.md for the full checklist. Run:
# Split mode
python3 -c "import yaml; [yaml.safe_load(open(f)) for f in ('product/index.yaml', 'product-context.yaml')]; print('YAML OK')"
# V1 mode
python3 -c "import yaml; yaml.safe_load(open('product-context.yaml')); print('YAML OK')"
If this fails, fix the YAML before committing. Common fixes: quote list items containing colons, flatten nested sub-lists, escape embedded double quotes.
# Resolve $BASE (integration branch) — see git-ref "Integration Branch" (override → develop → main)
BASE=$(git config --get aep.integration-branch 2>/dev/null || true)
[ -z "$BASE" ] && { git show-ref --verify --quiet refs/heads/develop \
|| git show-ref --verify --quiet refs/remotes/origin/develop; } && BASE=develop
BASE=${BASE:-main}
# Split mode: Write product/index.yaml (opportunity + personas + capabilities + product)
# Split mode: Write product-context.yaml (calibration + changelog, operational sections empty)
# V1 mode: Write product-context.yaml (all sections)
git pull --ff-only origin "$BASE"
git add product-context.yaml product/ docs/
git commit -m "feat: add product context (opportunity brief + context document)"
git push origin "$BASE"
When revisiting an existing product (triggered by /aep-reflect or the user's own initiative):
product/index.yaml in split mode, product-context.yaml in v1 mode)opportunity and/or product)changelog section/aep-envision vs /aep-reflectNot every post-layer adjustment requires envision. Most learning leads to re-slicing (moving stories between layers), which is handled entirely in /aep-reflect. For details, see docs/decisions/release-line-adjustments.md.
What does NOT trigger /aep-envision (handle in /aep-reflect instead):
What DOES trigger /aep-envision:
Product is envisioned. Proceed to:
/aep-map
This decomposes the Context Document into a system map, layered story graph, and agent topology.
npx claudepluginhub memorysaver/agentic-engineering-patterns --plugin agentic-development-workflowProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.