Agent skill
method:decision-pressure-loop
Architecture decision workflow for choosing between meaningful architectural or protocol options under uncertainty before implementation begins. 8 steps across 5 phases: Framing -> Reality Mapping -> Option Exploration -> Pressure -> Publication. Use when the team needs a defensible decision with explicit tradeoffs, reopen conditions, and implementation-facing guidance — not when the goal is already code delivery.
Install this agent skill to your Project
npx add-skill https://github.com/petekp/claude-code-setup/tree/main/skills/method-decision-pressure-loop
SKILL.md
Decision-Pressure-Loop Method
An artifact-centric workflow that turns architectural uncertainty into a pressure-tested decision before code begins. It chains decision framing -> system reality -> serious options -> explicit weighting -> adversarial pressure -> durable publication. The user steers at three checkpoints where judgment must become conscious rather than implicit.
When to Use
- Architectural or protocol decisions with real downside either way
- Work where multiple serious options exist and tradeoffs are not obvious
- Situations where the team needs reopen conditions before implementation starts
- Align work inside
pipelinewhen downstream execution depends on a safe architectural call
Do NOT use for code delivery, bug fixes, or tasks where the decision is already settled.
Glossary
- Artifact — A canonical method output file in
${RUN_ROOT}/artifacts/. These are the durable chain. Each step produces exactly one artifact. - Worker handoff — The raw output a Codex worker writes to its relay
handoffs/directory. Worker handoffs are inputs to artifact synthesis, not artifacts themselves. - Prompt header — A self-contained file the orchestrator writes before dispatch. Contains the full worker contract: mission, inputs, output path, output schema, success criteria.
- Synthesis — When the orchestrator (Claude session) reads prior artifacts and writes a new artifact directly, without dispatching a worker.
- Reopen signal — Evidence that the current decision should be revisited instead of patched around locally.
Principles
- Artifacts, not debates. Every step produces a concrete file. No step exits without writing its output artifact.
- Reality before options. The current system is mapped before options are generated, so the decision responds to real constraints instead of aspiration.
- Score before pressure. Comparison logic becomes explicit before the front-runner is attacked, which prevents hidden priority drift.
- User steers priorities, not approvals. Checkpoints ask the user to choose what to optimize and what downside to accept on purpose.
- Stop before code. This method ends with a durable decision guide, not an execution packet or delivery contract.
- Skill composition, not redundancy.
architecture-explorationandsolution-explorergenerate grounded options,seam-ripperandclean-architectureharden the pressure step, andmethod:spec-hardeningcan follow once the decision is stable.
Setup
RUN_SLUG="<decision-slug>"
RUN_ROOT=".relay/method-runs/${RUN_SLUG}"
mkdir -p "${RUN_ROOT}/artifacts"
Record RUN_ROOT — all paths below are relative to it.
Per-step scaffolding — before each dispatch step, create:
step_dir="${RUN_ROOT}/phases/<step-name>"
mkdir -p "${step_dir}/handoffs" "${step_dir}/last-messages"
Domain Skill Selection
When a step says <domain-skills>, pick 1-2 skills matching the affected system:
- Rust core:
rust - Swift app:
swift-apps - Both:
rust,swift-apps - Web frontend:
next-best-practices
Never exceed 4 total skills per dispatch. If a step already names two base skills
(solution-explorer + architecture-exploration, or seam-ripper + clean-architecture),
add at most one domain skill. Do not append interactive skills (like proposal-review
or grill-me) to autonomous codex exec dispatches.
Canonical Header Schema
Every dispatch step's prompt header MUST include these fields:
# Step N: <title>
## Mission
[What the worker must accomplish]
## Inputs
[Full text or digest of consumed artifacts]
## Output
- **Path:** [exact path where the worker must write its primary artifact]
- **Schema:** [required sections/headings in the output]
## Success Criteria
[What "done" looks like for this step]
## Handoff Instructions
Write your primary output to the path above. Also write a standard handoff to
`handoffs/handoff.md` with these exact section headings:
### Files Changed
[List files modified or created]
### Tests Run
[List test commands and results, or "None" if no tests]
### Verification
[How the output was verified]
### Verdict
[CLEAN / ISSUES FOUND]
### Completion Claim
[COMPLETE / PARTIAL]
### Issues Found
[List any issues, or "None"]
### Next Steps
[What the next phase should focus on]
Why these headings matter: compose-prompt.sh checks for ### Files Changed,
### Tests Run, and ### Completion Claim in the assembled prompt. If missing, it
appends relay-protocol.md which contains unresolved {slice_id} placeholders.
Including these headings in the header prevents that contamination.
Phase 1: Framing
Step 1: Decision Frame — interactive
Objective: Turn a vague "we should rethink this" impulse into a crisp decision question with explicit stakes and reopen triggers.
User checkpoint: The user names the real decision and the qualities that must be protected.
Ask the user (via AskUserQuestion):
We are opening a decision-pressure loop. Please answer:
- What is the concrete architectural or protocol decision we need to make now?
- What triggered this reconsideration?
- Over what time horizon should this decision hold before we expect to revisit it?
- Which qualities must be protected even if that makes the decision slower or more expensive?
- What is explicitly outside this decision?
- What signals should reopen this decision later?
Write their response to ${RUN_ROOT}/artifacts/decision-brief.md:
# Decision Brief
## Decision Question
## Triggering Context
## Time Horizon
## Must-Protect Qualities
## Non-Decision Space
## Reopen Signals
Gate: decision-brief.md exists with non-empty Decision Question, Must-Protect Qualities,
and Non-Decision Space.
Failure mode: The method optimizes a vague aspiration instead of a real decision.
Phase 2: Reality Mapping
Step 2: Current System Map — dispatch
Objective: Capture the current architecture, boundary ownership, operational constraints, and pain points that any serious option must respond to.
Setup:
mkdir -p "${RUN_ROOT}/phases/step-2/handoffs" "${RUN_ROOT}/phases/step-2/last-messages"
Header (${RUN_ROOT}/phases/step-2/prompt-header.md):
# Step 2: Current System Map
## Mission
Capture the current architecture, boundary ownership, operational constraints, and
pain points that any serious option must respond to.
## Inputs
Full text of `decision-brief.md`
## Output
- **Path:** `${RUN_ROOT}/phases/step-2/current-system-map.md`
- **Schema:** `# Current System Map`, `## System Boundary`,
`## Existing Responsibilities`, `## Operational Constraints`,
`## Known Pain Points`, `## Invariants and Contracts`,
`## Unknowns That Matter`
## Success Criteria
The map is grounded in the current system and includes at least one invariant,
one operational constraint, and one pain point.
## Handoff Instructions
Write your primary output to the path above. Also write a standard handoff to
`handoffs/handoff.md` with these exact section headings:
### Files Changed
[List files modified or created]
### Tests Run
[List test commands and results, or "None" if no tests]
### Verification
[How the output was verified]
### Verdict
[CLEAN / ISSUES FOUND]
### Completion Claim
[COMPLETE / PARTIAL]
### Issues Found
[List any issues, or "None"]
### Next Steps
[What the next phase should focus on]
Dispatch (no --template):
./scripts/relay/compose-prompt.sh \
--header ${RUN_ROOT}/phases/step-2/prompt-header.md \
--skills architecture-exploration,<domain-skills> \
--root ${RUN_ROOT}/phases/step-2 \
--out ${RUN_ROOT}/phases/step-2/prompt.md
cat ${RUN_ROOT}/phases/step-2/prompt.md | \
codex exec --full-auto \
-o ${RUN_ROOT}/phases/step-2/last-messages/last-message.txt -
Verify and promote:
test -f ${RUN_ROOT}/phases/step-2/current-system-map.md
cp ${RUN_ROOT}/phases/step-2/current-system-map.md ${RUN_ROOT}/artifacts/current-system-map.md
If the worker only wrote handoffs/handoff.md, the orchestrator reads it and
synthesizes current-system-map.md manually using the required schema.
Gate: current-system-map.md is grounded in the current system and includes at least
one invariant, one operational constraint, and one pain point.
Failure mode: Option generation happens in the abstract and ignores the real system.
Phase 3: Option Exploration
Step 3: Generate Serious Options — dispatch
Objective: Produce distinct options that differ on real dimensions rather than cosmetic implementation variations.
Setup:
mkdir -p "${RUN_ROOT}/phases/step-3/handoffs" "${RUN_ROOT}/phases/step-3/last-messages"
Header (${RUN_ROOT}/phases/step-3/prompt-header.md):
# Step 3: Generate Serious Options
## Mission
Produce distinct architectural or protocol options that differ on real dimensions
rather than cosmetic implementation variations.
## Inputs
Full `decision-brief.md` and full `current-system-map.md`
## Output
- **Path:** `${RUN_ROOT}/phases/step-3/decision-options.md`
- **Schema:** `# Decision Options`; for each option include `## Option N`,
`- Architecture Shape`, `- Ownership Boundary`,
`- Migration Blast Radius`, `- Failure Surface`,
`- Operational Profile`, `- Explicit Disqualifiers`;
repeat for at least three options
## Success Criteria
At least three options exist, and each option differs from the others on at
least two of architecture shape, ownership boundary, migration cost, or failure surface.
## Handoff Instructions
Write your primary output to the path above. Also write a standard handoff to
`handoffs/handoff.md` with these exact section headings:
### Files Changed
[List files modified or created]
### Tests Run
[List test commands and results, or "None" if no tests]
### Verification
[How the output was verified]
### Verdict
[CLEAN / ISSUES FOUND]
### Completion Claim
[COMPLETE / PARTIAL]
### Issues Found
[List any issues, or "None"]
### Next Steps
[What the next phase should focus on]
Dispatch (no --template):
./scripts/relay/compose-prompt.sh \
--header ${RUN_ROOT}/phases/step-3/prompt-header.md \
--skills solution-explorer,architecture-exploration,<domain-skills> \
--root ${RUN_ROOT}/phases/step-3 \
--out ${RUN_ROOT}/phases/step-3/prompt.md
cat ${RUN_ROOT}/phases/step-3/prompt.md | \
codex exec --full-auto \
-o ${RUN_ROOT}/phases/step-3/last-messages/last-message.txt -
Verify and promote:
test -f ${RUN_ROOT}/phases/step-3/decision-options.md
cp ${RUN_ROOT}/phases/step-3/decision-options.md ${RUN_ROOT}/artifacts/decision-options.md
If the worker only wrote handoffs/handoff.md, the orchestrator reads it and
synthesizes decision-options.md manually using the required schema.
Gate: At least three options exist, and each option differs from the others on at least two of architecture shape, ownership boundary, migration cost, or failure surface.
Failure mode: The user gets a false choice among slight variants of the same idea.
Step 4: Score and Compare — synthesis
Objective: Make the comparison logic explicit before the team falls in love with a favorite option.
The orchestrator reads decision-brief.md, current-system-map.md, and
decision-options.md, then writes ${RUN_ROOT}/artifacts/decision-scorecard.md:
# Decision Scorecard
## Evaluation Dimensions
## Weights
## Per-Option Scores
## Confidence per Score
## Ties and Sensitivities
## Preliminary Front-Runner
Each score must include reasoning and a confidence label (high, medium, or low);
do not write naked numbers without explanation.
Gate: decision-scorecard.md has weighted dimensions, per-option reasoning, and
confidence labels rather than naked numbers.
Failure mode: The recommendation is driven by vibe or recency bias instead of explicit tradeoffs.
Phase 4: Pressure
Step 5: Tradeoff Weighting Checkpoint — interactive
Objective: Let the user consciously choose which quality to optimize now and which downside to accept on purpose.
User checkpoint: The user chooses the tradeoff weighting after the scorecard is visible.
Present decision-scorecard.md to the user. Ask (via AskUserQuestion):
The scorecard is visible. Please answer:
- Rank the evaluation dimensions in the order you want optimized now.
- Which risks or downsides are you willing to accept on purpose if that priority order wins?
- Which costs or regressions are you explicitly rejecting even if they improve another dimension?
- What constraints must not regress under the chosen weighting?
Write their response to ${RUN_ROOT}/artifacts/decision-steer.md:
# Decision Steer
## Chosen Priority Order
## Risks Willingly Accepted
## Costs Explicitly Rejected
## Must-Not-Regress Constraints
Gate: Priority order and accepted risks are explicit, and they map back to scorecard dimensions.
Failure mode: The pressure test attacks the wrong dimension or the final recommendation silently optimizes the wrong thing.
Step 6: Pressure Test the Leading Option — dispatch
Objective: Attack the front-runner with serious objections, scenario failures, and runner-up comparison pressure.
Setup:
mkdir -p "${RUN_ROOT}/phases/step-6/handoffs" "${RUN_ROOT}/phases/step-6/last-messages"
Header (${RUN_ROOT}/phases/step-6/prompt-header.md):
# Step 6: Pressure Test the Leading Option
## Mission
Attack the front-runner with serious objections, scenario failures, boundary-level
criticism, and direct runner-up comparison pressure.
## Inputs
Full `current-system-map.md`, full `decision-options.md`, full `decision-scorecard.md`,
and full `decision-steer.md`
## Output
- **Path:** `${RUN_ROOT}/phases/step-6/pressure-report.md`
- **Schema:** `# Pressure Report`, `## Strongest Objections`,
`## Scenario Attacks`, `## Boundary Breaks`,
`## Comparison to Runner-Up`, `## Surviving Thesis`,
`## Reopen Recommendation`
## Success Criteria
The report includes at least one plausible failure scenario, one boundary-level
objection, and an explicit comparison to the strongest alternative.
## Handoff Instructions
Write your primary output to the path above. Also write a standard handoff to
`handoffs/handoff.md` with these exact section headings:
### Files Changed
[List files modified or created]
### Tests Run
[List test commands and results, or "None" if no tests]
### Verification
[How the output was verified]
### Verdict
[CLEAN / ISSUES FOUND]
### Completion Claim
[COMPLETE / PARTIAL]
### Issues Found
[List any issues, or "None"]
### Next Steps
[What the next phase should focus on]
Dispatch (no --template):
./scripts/relay/compose-prompt.sh \
--header ${RUN_ROOT}/phases/step-6/prompt-header.md \
--skills seam-ripper,clean-architecture,<domain-skills> \
--root ${RUN_ROOT}/phases/step-6 \
--out ${RUN_ROOT}/phases/step-6/prompt.md
cat ${RUN_ROOT}/phases/step-6/prompt.md | \
codex exec --full-auto \
-o ${RUN_ROOT}/phases/step-6/last-messages/last-message.txt -
Verify and promote:
test -f ${RUN_ROOT}/phases/step-6/pressure-report.md
cp ${RUN_ROOT}/phases/step-6/pressure-report.md ${RUN_ROOT}/artifacts/pressure-report.md
If the worker only wrote handoffs/handoff.md, the orchestrator reads it and
synthesizes pressure-report.md manually using the required schema.
Gate: The report includes at least one plausible failure scenario, one boundary-level objection, and an explicit comparison to the strongest alternative.
Failure mode: The favored option survives only because nobody attacked its weakest seam.
Step 7: Decision Commit — interactive
Objective: Turn the pressure-tested tradeoff into an accountable choice with named downsides and reopen conditions.
User checkpoint: The user commits to a pressure-tested option and explicitly accepts the downside profile.
Present decision-scorecard.md and pressure-report.md to the user. Ask (via AskUserQuestion):
The front-runner has been pressure-tested. Please answer:
- Which option are we choosing?
- Why does this option win now, given the scorecard and pressure report?
- Which downsides are we explicitly accepting?
- Which alternatives are we rejecting, and why not now?
- What conditions should reopen this decision later?
Write their response to ${RUN_ROOT}/artifacts/decision-choice.md:
# Decision Choice
## Chosen Option
## Why This Wins Now
## Accepted Downsides
## Rejected Alternatives
## Conditions That Reopen the Decision
Gate: decision-choice.md exists with non-empty Chosen Option, Accepted Downsides,
and at least one Rejected Alternative.
Failure mode: The loop never becomes a decision, so downstream work re-litigates the same debate.
Phase 5: Publication
Step 8: Publish ADR and Implementation Guide — synthesis
Objective: Package the outcome into a durable artifact that downstream implementers can follow without reopening the decision by accident.
The orchestrator reads decision-brief.md, current-system-map.md,
decision-choice.md, and pressure-report.md, then writes
${RUN_ROOT}/artifacts/decision-guide.md:
# Decision Guide
## ADR Summary
## Current-State Snapshot
## Chosen Direction
## Interface or Ownership Changes
## Migration Guidance
## Risk Watchpoints
## Verification Questions for Implementers
## Reopen Conditions
Gate: The guide contains both decision rationale and implementation-facing guardrails, and it preserves the reopen conditions.
Failure mode: Future implementers understand the answer but not the reasons, or understand the reasons but not how to apply them.
Artifact Chain Summary
decision-brief.md [user: decision frame]
-> current-system-map.md
-> decision-options.md
-> decision-scorecard.md
-> decision-steer.md [user: tradeoff weighting checkpoint]
-> pressure-report.md
-> decision-choice.md [user: decision commit]
-> decision-guide.md
Resume Awareness
If ${RUN_ROOT}/artifacts/ already has files, determine the resume point:
- Check artifacts in chain order (decision-brief -> current-system-map -> ... -> decision-guide)
- Find the last complete artifact with passing gate
- Continue from the next step
This is best-effort — the method has no durable state beyond artifacts on disk and step-local relay directories. If a session dies mid-step, check the step's relay directory for worker output before concluding the step failed.
Circuit Breaker
Escalate to the user when:
- A dispatch step fails twice (no valid output after 2 attempts)
- The current system cannot be mapped with enough evidence to produce a grounded option set
- No option survives pressure without violating Must-Protect Qualities
- The user cannot commit at Step 7 without contradicting the Step 5 priority order
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ubiquitous-language
Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. Saves to UBIQUITOUS_LANGUAGE.md. Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD".
every-style-editor
This skill should be used when reviewing or editing copy to ensure adherence to Every's style guide. It provides a systematic line-by-line review process for grammar, punctuation, mechanics, and style guide compliance.
manage-codex
Autonomous Codex batch orchestrator. Use for "/manage-codex", "manage codex", "use codex", "dispatch to codex", or long-running Codex work.
seo-audit
When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," or "indexing issues." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. For building pages at scale to target keywords, see programmatic-seo. For adding structured data, see schema-markup. For AI search optimization, see ai-seo.
capture-learning
Analyze recent conversation context and capture learnings to project knowledge files (for project-specific insights) or skills/commands/subagents (for cross-project patterns). Use when the user asks to "capture this learning", "update the docs with this", "remember this for next time", "document this issue", "add this to CLAUDE.md", "save this knowledge", or "update project knowledge". Also triggers after resolving build/setup issues, discovering non-obvious patterns, or completing debugging sessions with valuable insights.
agent-changelog
Compile an agent-optimized changelog by cross-referencing git history with plans and documentation. Use when asked to "update changelog", "compile history", "document project evolution", or proactively after major milestones, architectural changes, or when stale/deprecated information is detected that could confuse coding agents.
Didn't find tool you were looking for?