From agentic-development-workflow
Mines a draft Object Map from a story map, presents it for human review, and writes a noun-first blueprint for UI build agents. Bridges verb-first stories to consistent object-oriented UI.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agentic-development-workflow:modelThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn the verb-first story map into a noun-first **Object Map** before UI gets
references/orca-process.mdtemplates/agent-topology.mdtemplates/context-document.mdtemplates/object-map-schema.yamltemplates/object-model-schema.yamltemplates/opportunity-brief.mdtemplates/product-context-schema.yamltemplates/references/symphony-spec-reference.mdtemplates/story-spec.mdtemplates/system-map.mdtemplates/technical-spec.mdTurn the verb-first story map into a noun-first Object Map before UI gets
built. AEP's spine (/aep-envision → /aep-map) plans what the user does;
this skill plans the objects the user acts on — which objects appear, what their
fields are, how they nest, and what actions hang off each. Without it, build
agents invent screen structure per story, which drifts into disjointed
task-wizard UIs. With it, they inherit one consistent object-oriented blueprint.
The one rule: a story-map slice cuts scope, not interface type. Never translate the backbone one-step-one-screen into a wizard. MVP slice ≠ wizard.
Where this fits:
/aep-envision → /aep-map → /aep-model → [ /aep-calibrate ] → /aep-dispatch → /aep-launch → /aep-build → /aep-wrap → /aep-reflect
▲ you are here (UI-facing products)
Session: Main, interactive with user (object boundaries + IA need human review)
Input: Product definition (product/index.yaml split mode, product-context.yaml v1) + stories, architecture.domain_model from product-context.yaml
Output: product/object-model.yaml (cross-capability ontology) + one product/maps/<capability>/object-map.yaml per UI-facing capability (status: approved); thin calibration.history entry + changelog in product-context.yaml
Schemas: templates/object-model-schema.yaml, templates/object-map-schema.yaml.
Process detail: references/orca-process.md (ORCA round-by-round derivation + the object-first/task-oriented decision framework).
Run /aep-model for UI-facing products/capabilities only. A capability is
UI-facing when it declares the object-model quality dimension (set by
/aep-envision), or declares visual-design/ux-flow, or has user-facing stories
(non-null activity whose module is kind: ui). Pure-backend/CLI products skip it
— there are no user-perceived objects to model.
If nothing is UI-facing, say so and route the user straight to /aep-dispatch.
File Resolution:
ls product/index.yaml 2>/dev/null && echo "SPLIT MODE" || echo "V1 MODE"
cat product-context.yaml
product/index.yaml exists): read product definition,
personas, capabilities, activities, quality_dimensions from
product/index.yaml; read stories, architecture.domain_model from
product-context.yaml. Write product/object-model.yaml and
product/maps/<capability>/object-map.yaml.product-context.yaml. Still write the
standalone artifacts under product/ (create the directory) — the object model
is a stable design file, never inlined into operational YAML.If stories is empty, run /aep-map first. If no product definition exists, run
/aep-envision first.
Mode detection:
product/object-model.yaml yet → full ORCA over all
UI-facing capabilities.If /aep-map already wrote draft artifacts (product/object-model.yaml and
product/maps/<cap>/object-map.yaml with status: draft), read and refine them
— do not regenerate from scratch. Preserve their provenance/source_evidence,
fill gaps, and fix obvious errors. Generate fresh only when no draft exists. (Set
provenance.generated_by/status to reflect reality — aep-map for an untouched
draft, refined in place here.)
Run the four ORCA rounds per references/orca-process.md. This step is
agent-driven — mine, don't ask yet.
product.activities,
stories[].description, product.problem, personas, and
architecture.domain_model. Promote user-perceived things to objects; demote
implementation nouns. Cross-link backs_onto to domain entities. Record
source_evidence + confidence.from_story it came from.collection + detail views; pick each capability's anchor_object. IA only,
no visual design.Write:
product/object-model.yaml — the cross-capability ontology
(provenance.reviewed: false).product/maps/<capability>/object-map.yaml per UI-facing capability with
status: draft, including the coverage index (story → objects/screens; screen
ids use the canonical <object-id>:<view> grammar). Use capabilities[] ids for
<capability>; in v1/single-journey (no capabilities[]) use one default
capability = the project slug.Default every flow to object_first. Only add an interaction_modes entry to
mark a flow task_oriented, with a reason grounded in the decision framework.
Object boundaries and IA are the highest-leverage design decisions here — same
error-cost logic as the /aep-map System Map gate. Present the draft compactly
(objects, the NOM, primary screens, any task-flow exceptions) and ask a SHORT set
of high-leverage questions, one at a time:
confidence
object explicitly.)Apply the answers to the draft. Keep the questions few — this is a gate, not a
redesign workshop. Heavy taste decisions (look, voice) are NOT this skill's job;
they stay in /aep-calibrate (visual-design, copy-tone) and journey/page/
transition stays in ux-flow.
On approval:
Set each reviewed product/maps/<capability>/object-map.yaml →
status: approved, approved_by: human, approved_at: <ISO 8601>.
Set product/object-model.yaml provenance.reviewed: true (+ reviewed_at).
Back-annotate stories: add object_model_refs to UI stories the map covers,
e.g. object_model_refs: ["product/maps/dashboard/object-map.yaml#order"].
Keep it a thin reference — the map body never goes into product-context.yaml.
Append a thin record to calibration.history in product-context.yaml:
- dimension: object-model
calibrated_at: "<ISO date>"
calibrated_from_layer: <layer> # the active layer whose UI stories this approval unblocks
mode: establishment # or extension
artifact_path: "product/maps/<capability>/object-map.yaml"
summary: "Approved object-first IA for <capability> — N primary objects, M task-flow exceptions"
Append a changelog entry (type: map_update, author: human,
sections_changed: [calibration, stories]).
# Validate every YAML touched
python3 -c "import yaml,glob; [yaml.safe_load(open(f)) for f in ['product/object-model.yaml','product-context.yaml']+glob.glob('product/maps/*/object-map.yaml')]; print('YAML OK')"
If it fails, fix before committing (see templates/product-context-schema.yaml
guidance: quote list items with colons, flatten nested sub-lists, escape 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}
git pull --ff-only origin "$BASE"
git add product/ product-context.yaml
git commit -m "feat: object model — approved object-first IA for <capabilities>"
git push origin "$BASE"
/aep-dispatch injects only the slice for the objects a story touches
(from coverage) into the story's context package — not the whole model — and
refuses to dispatch a UI-facing story whose capability lacks an approved
object-map (run /aep-model first), mirroring the calibration gate./aep-launch aborts a UI-facing story with no approved object-map./aep-build treats the injected slice as binding: objects, their core
attributes, CTA placement, and screen structure come from the map;
visual-design/copy-tone/ux-flow calibration still own look, voice, and journey./aep-validate Mode A runs the completeness checks (coverage, anchors,
task-flow reasons)./aep-calibrate visual-design. This skill is structure only.architecture, not the object model.product-context.yaml; keep them under product/ with thin references.Object model approved. Heavy taste dimensions next (if planned), then dispatch:
/aep-calibrate visual-design # look & feel (optional, if a .5 layer plans it)
/aep-dispatch # inject object-map slices and start building
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.