Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Assesses decision reversibility and risk at critical checkpoints. Use when a workflow reaches a high-stakes branch needing escalation check.
.claude/skills/athola-war-room-checkpoint/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 207% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 238% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 259% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 370% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 114% | 0% |
Lightweight inline assessment for determining whether a decision point within a command warrants War Room escalation.
Run make test-checkpoint to verify checkpoint logic works correctly after changes.
This skill is not invoked directly by users. It is called by other commands (e.g., /do-issue, /pr-review) at critical decision points to:
| Command | Trigger Conditions | |---------|-------------------| | /do-issue | 3+ issues, dependency conflicts, overlapping files | | /pr-review | >3 blocking issues, architecture changes, ADR violations | | /architecture-review | ADR violations, high coupling, boundary violations | | /fix-pr | Major scope, conflicting reviewer feedback |
| Situation | Use instead | |-----------|-------------| | A user asks for deliberation directly | Skill(attune:war-room) | | The decision is cheap to reverse (high RS) | Proceed without a checkpoint | | A panel already ruled on this decision | The prior verdict |
This skill decides whether deliberation is warranted and returns fast when it is not. A command that checkpoints every decision pays the scoring cost to be told to proceed almost every time, and re-checkpointing a settled call re-litigates it.
markdownSkill(attune:war-room-checkpoint) with context: - source_command: "{calling_command}" - decision_needed: "{human_readable_question}" - files_affected: [{list_of_files}] - issues_involved: [{issue_numbers}] (if applicable) - blocking_items: [{type, description}] (if applicable) - conflict_description: "{summary}" (if applicable) - profile: "default" | "startup" | "regulated" | "fast" | "cautious"
Analyze the provided context to extract:
Calculate RS using the 5-dimension framework:
| Dimension | Assessment Question | |-----------|-------------------| | Reversal Cost | How hard to undo this decision? | | Time Lock-In | Does this crystallize immediately? | | Blast Radius | How many components/people affected? | | Information Loss | Does this close off future options? | | Reputation Impact | Is this visible externally? |
Score each 1-5, calculate RS = Sum / 25.
Apply profile thresholds to determine mode:
if RS <= profile.express_ceiling:
mode = "express"
elif RS <= profile.lightweight_ceiling:
mode = "lightweight"
elif RS <= profile.full_council_ceiling:
mode = "full_council"
else:
mode = "delphi"Return immediately with recommendation:
yamlresponse: should_escalate: false selected_mode: "express" reversibility_score: {rs} decision_type: "Type 2" recommendation: "{quick_recommendation}" rationale: "{brief_explanation}" confidence: 0.9 requires_user_confirmation: false
Invoke full War Room and return results:
yamlresponse: should_escalate: true selected_mode: "{lightweight|full_council|delphi}" reversibility_score: {rs} decision_type: "{Type 1B|1A|1A+}" war_room_session_id: "{session_id}" orders: ["{order_1}", "{order_2}"] rationale: "{war_room_rationale}" confidence: {calculated_confidence} requires_user_confirmation: {true_if_confidence_low}
For escalated decisions, calculate confidence for auto-continue:
confidence = 1.0
- 0.10 * dissenting_view_count
- 0.20 if voting_margin < 0.3
- 0.15 if RS > 0.80
- 0.10 if novel_domain
- 0.10 if compound_decision
+ 0.20 if unanimous (cap at 1.0)
requires_user_confirmation = (confidence <= 0.8)| Profile | Express | Lightweight | Full Council | Use Case | |---------|---------|-------------|--------------|----------| | default | 0.40 | 0.60 | 0.80 | Balanced | | startup | 0.55 | 0.75 | 0.90 | Move fast | | regulated | 0.25 | 0.45 | 0.65 | Compliance | | fast | 0.50 | 0.70 | 0.90 | Speed priority | | cautious | 0.30 | 0.50 | 0.70 | Higher stakes |
| Command | Adjustment | Rationale | |---------|-----------|-----------| | do-issue (3+ issues) | -0.10 | Higher risk with multiple issues | | pr-review (strict mode) | -0.15 | Strict mode = higher scrutiny | | architecture-review | -0.05 | Architecture inherently consequential |
Return a structured response that the calling command can act on:
markdown## Checkpoint Response **Source**: {source_command} **Decision**: {decision_needed} ### Assessment - **RS**: {reversibility_score} ({decision_type}) - **Mode**: {selected_mode} - **Escalated**: {yes|no} ### Recommendation {recommendation_or_orders} ### Control Flow - **Confidence**: {confidence} - **Auto-continue**: {yes|no} {user_prompt_if_needed}
requires_user_confirmationorders or recommendationIf checkpoint invocation fails:
Checkpoints are logged to:
~/.claude/memory-palace/strategeion/checkpoints/{date}/{checkpoint-id}.jsonEach file contains a CheckpointEntry with: checkpoint_id, session_id, phase, action, reversibility_score, dimensions, confidence, files_affected, and requires_user_confirmation.
After a war room session completes and persist_session() is called, an audit report is written automatically to:
~/.claude/memory-palace/strategeion/war-table/{session-id}/audit-report.jsonThe report consolidates: all checkpoints for the session, the expert panel, voting summary with unanimity score, escalation history, final decision and rationale, and a Merkle-DAG integrity verification block. The verification recomputes every node hash against the stored values so any tampering with deliberation content is detectable.
Use AuditTrailManager from scripts.war_room.audit_trail to query checkpoints or generate reports programmatically:
pythonfrom scripts.war_room.audit_trail import AuditTrailManager manager = AuditTrailManager() checkpoints = manager.get_checkpoints("war-room-20260303-100000") audited = manager.list_audited_sessions()
Input:
yamlsource_command: "do-issue" decision_needed: "Execution order for issues #101, #102" issues_involved: [101, 102] files_affected: ["src/utils/helper.py", "tests/test_helper.py"]
Assessment:
RS: 0.20 (Type 2)
Response:
yamlshould_escalate: false selected_mode: "express" recommendation: "Execute in parallel - no dependencies detected" confidence: 0.95 requires_user_confirmation: false
Input:
yamlsource_command: "pr-review" decision_needed: "Review verdict for PR #456" blocking_items: - {type: "architecture", description: "New service without ADR"} - {type: "breaking", description: "API contract change"} - {type: "security", description: "Auth flow modification"} - {type: "scope", description: "Unrelated payment refactor"} files_affected: ["src/auth/", "src/api/", "src/payment/", "src/services/new/"]
Assessment:
RS: 0.64 (Type 1A)
Response:
yamlshould_escalate: true selected_mode: "full_council" war_room_session_id: "war-room-20260125-143025" orders: - "Split PR: auth changes separate from payment refactor" - "Require ADR for new service before merge" - "API change: add migration path, not blocking" confidence: 0.75 requires_user_confirmation: true
Skill(attune:war-room) - Full War Room deliberationSkill(attune:war-room)/modules/reversibility-assessment.md - RS framework/attune:war-room - Standalone War Room invocation/do-issue - Issue implementation (uses this checkpoint)/pr-review - PR review (uses this checkpoint)/architecture-review - Architecture review (uses this checkpoint)/fix-pr - PR fix (uses this checkpoint)reversibility_score(0.0-1.0), selected_mode (express / lightweight / full_council / delphi), should_escalate (boolean), and recommendation or orders.
reversibility_score > profile threshold has should_escalate: trueand triggers the full War Room via Skill(attune:war-room) before returning.
confidence <= 0.8 sets requires_user_confirmation: true and presentsa confirmation prompt to the user rather than auto-continuing.
~/.claude/memory-palace/strategeion/checkpoints/{date}/{checkpoint-id}.json; if this write fails, the calling command proceeds and logs a warning rather than blocking the workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | pass→pass | 12,643 | 7,649 | -40% | 1 | 1 | 0% | 1,844 | 4,191 | +127% | 0 | 0 | — |
case-10 | pass→pass | 10,833 | 5,321 | -51% | 1 | 1 | 0% | 1,809 | 3,974 | +120% | 0 | 0 | — |
case-01 | fail→fail | 13,425 | 15,146 | +13% | 1 | 1 | 0% | 2,172 | 5,754 | +165% | 0 | 0 | — |
case-02 | fail→pass | 8,672 | 11,136 | +28% | 1 | 1 | 0% | 1,580 | 4,854 | +207% | 0 | 0 | — |
case-03 | fail→pass | 8,747 | 11,677 | +33% | 1 | 1 | 0% | 1,464 | 4,941 | +238% | 0 | 0 | — |
case-04 | pass→pass | 20,444 | 20,953 | +2% | 1 | 1 | 0% | 3,059 | 6,405 | +109% | 0 | 0 | — |
case-06 | pass→fail | 10,450 | 8,719 | -17% | 1 | 1 | 0% | 1,734 | 3,350 | +93% | 0 | 0 | — |
case-07 | fail→pass | 5,290 | 4,878 | -8% | 1 | 1 | 0% | 1,070 | 3,845 | +259% | 0 | 0 | — |
case-08 | fail→pass | 4,013 | 2,787 | -31% | 1 | 1 | 0% | 722 | 3,390 | +370% | 0 | 0 | — |
case-09 | pass→pass | 3,617 | 3,742 | +3% | 1 | 1 | 0% | 686 | 3,559 | +419% | 0 | 0 | — |
case-11 | fail→pass | 9,451 | 3,841 | -59% | 1 | 1 | 0% | 1,690 | 3,617 | +114% | 0 | 0 | — |
case-12 | fail→pass | 13,549 | 3,155 | -77% | 1 | 1 | 0% | 2,206 | 3,487 | +58% | 0 | 0 | — |
case-13 | pass→pass | 13,196 | 3,104 | -76% | 1 | 1 | 0% | 2,338 | 3,495 | +49% | 0 | 0 | — |
case-14 | fail→pass | 10,280 | 2,643 | -74% | 1 | 1 | 0% | 1,466 | 3,317 | +126% | 0 | 0 | — |
case-15 | fail→pass | 13,091 | 3,721 | -72% | 1 | 1 | 0% | 2,356 | 3,593 | +53% | 0 | 0 | — |
case-16 | fail→pass | 10,573 | 4,030 | -62% | 1 | 1 | 0% | 1,768 | 3,658 | +107% | 0 | 0 | — |
case-17 | pass→pass | 5,198 | 1,925 | -63% | 1 | 1 | 0% | 774 | 3,203 | +314% | 0 | 0 | — |
case-18 | pass→pass | 4,283 | 2,370 | -45% | 1 | 1 | 0% | 639 | 3,241 | +407% | 0 | 0 | — |
case-19 | fail→pass | 10,991 | 2,761 | -75% | 1 | 1 | 0% | 1,923 | 3,443 | +79% | 0 | 0 | — |
case-20 | fail→pass | 10,612 | 2,070 | -80% | 1 | 1 | 0% | 1,811 | 3,247 | +79% | 0 | 0 | — |
case-21 | pass→pass | 10,366 | 3,262 | -69% | 1 | 1 | 0% | 1,601 | 3,404 | +113% | 0 | 0 | — |
case-22 | fail→pass | 7,811 | 2,956 | -62% | 1 | 1 | 0% | 1,314 | 3,418 | +160% | 0 | 0 | — |
case-23 | fail→pass | 12,157 | 2,938 | -76% | 1 | 1 | 0% | 2,005 | 3,458 | +72% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +52 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.