All notable changes to beastmode.
Replace the multi-step Install section in the README with a single "Get the Party Started" prose paragraph that users paste into Claude Code to bootstrap their entire project in one shot.
- Replace Install section with "Get the Party Started" bootstrap section listing prerequisites and a single paste-and-go paragraph
- Remove uninstall instructions from README
Fix dashboard spinner palindrome animation (pulsing instead of rotating) and enable spinner display for design-phase epics. Extract shared spinner module to eliminate duplication between EpicsPanel and TreeView.
- Create shared spinner module with forward-only frame arrays, tick hook, and phase-based activation logic
- Use shared spinner module and phase-based
isActive()activation in EpicsPanel — design-phase epics now show spinners
- Refactor TreeView to use shared spinner module, remove local spinner definitions
Fixes the dashboard hang-on-exit bug by properly draining all four categories of async work that hold the Bun event loop open. The dashboard now exits cleanly within seconds when the user presses q or Ctrl+C, with verbose shutdown logging showing progress.
- Add AbortSignal support to
gh()subprocess helper — kills spawned Bun processes on abort - Thread AbortSignal through
reconcileGitHub()callchain — in-flight GitHub API calls cancelled on exit - Per-tick AbortController lifecycle on WatchLoop —
stop()aborts current tick, verbose shutdown logging, reduced waitAll timeout from 30s to 5s, listener cleanup viaremoveAllListeners(),createTagguard against post-shutdown spawns - Await
proc.exitedinfetchGitStatus— releases git subprocess handles to unblock event loop drain
Cleans up three visible defects in GitHub issue sync: removes redundant phase badges from issue bodies, normalizes artifact link paths for GitHub permalink resolution, and adds diagnostic logging to the commit-issue-ref amend pipeline.
- Remove phase badge from
formatEpicBodyoutput — labels are the canonical phase indicator - Remove phase badge from early issue stub body
- Add diagnostic logging to
amendCommitsInRangeandresolveRangeStartat all silent exit points - Log commit-ref amend result unconditionally in runner step 8.5
- Normalize artifact link paths through
buildArtifactsMapto strip absolute/worktree-relative prefixes - Strengthen slug-title BDD step assertion and remove dead import
- Rename misleading slug-title step to match actual assertion
Accuracy pass across all README.md sections to match v0.124 reality. No structural changes.
- Fix Pipeline table Implement row — shared branch, not worktrees
- Rewrite Orchestration — JSON file store, direct commits, no manifests
- Complete CLI command reference — all 13 commands + verbosity flags
- Expand Dashboard — heartbeat, stats, tree log, keyboard, nyan border
- Rewrite GitHub Integration — store as authority, GitHub as mirror
- Fix Install prerequisites — Git for branch ops, not worktree ops
Removes the unused [topic] positional argument from beastmode design. The design skill's Phase 0 interview is now the sole entry point for problem framing.
- Remove design args branch in phase command; design always passes empty slug
- Add args rejection guard:
beastmode design somethingerrors with a clear message and exits - Update CLI help text to show
beastmode designwithout[topic]placeholder
- Update interactive-runner design fixtures to empty args
- Add args rejection guard tests for design phase
Replaces the static "watch: running/stopped" label with a live countdown timer that ticks every second, shows "scanning..." during active scans, and displays the configured interval when stopped.
- Add countdown state machine with pure transition functions for counting/scanning/stopped states
- Add
scan-startedevent to WatchLoop andtrigger: "poll" | "event"field toscan-completeevent - Wire countdown display into dashboard header, replacing static watch status indicator
- Remove dead
watchRunningstate and fix unused param in ThreePanelLayout - Add BDD integration test scaffolding for heartbeat countdown scenarios
Defines an explicit frontmatter contract across all five phases, aligning field names between env vars, metadata-in, frontmatter, and output.json. Content fields move from frontmatter to artifact markdown body sections, making output.json a pure decisions-and-status signal.
- Unified field naming:
epic-id,epic-slug,feature-id,feature-slug,failed-featuresacross all layers - Frontmatter contract documentation with per-phase field tables
- Session-stop uses unified field names in frontmatter pass-through and
buildOutput - Reconcile extracts content from artifact body sections (
## Problem Statement,## Solution,## What to Build) - All five skill templates updated to unified frontmatter field names
- Artifact type interfaces renamed to unified naming convention
- BDD world artifact writers updated to unified field names
- Cucumber feature files updated to unified frontmatter field names
- Session-stop test fixtures updated to unified field names
- Reconcile tests updated to unified field names
Unifies all CLI hook context into five standardized BEASTMODE_* env vars and a structured metadata section in SessionStart. Renames generate-output to session-stop for naming symmetry. Pre-creates store entities before dispatch so IDs are available from the first hook invocation.
- Shared
buildEnvPrefixfunction produces inline env var prefix for all command hooks - All four hook builders (session-start, hitl-auto, hitl-log, stop) use unified env prefix
- SessionStart
additionalContextincludes structured metadata section with phase, entity IDs, parent artifacts, and output target path computeOutputTargetandbuildMetadataSectionexported for skill consumption- Pipeline runner pre-creates store entity at Step 0 before dispatch
reconcileDesigncreate-if-missing fallback removed — single entity creation pathgenerate-output.tsrenamed tosession-stop.tswithrunSessionStopentry pointSessionStartInputextended withepicIdandfeatureIdoptional fields- HITL hooks read
BEASTMODE_PHASEfrom env with positional arg fallback
- Complete session-stop rename in hooks.ts dispatcher and test APIs
- Use
epicIdfrom config instead ofepicSlugin env context construction
- Integration tests for session-stop-rename scenarios
- BDD portable-settings updated for new hook command strings
- Old
BEASTMODE_EPIC/BEASTMODE_SLUGenv var names removed from codebase
Eliminates slug/ID ambiguity across the entire pipeline. Environment variables, frontmatter, reconcile functions, store lookups, and mutex keys now use entity IDs exclusively.
- Replace
BEASTMODE_SLUGwithBEASTMODE_IDin hook environment variables - Replace
fm.slugwithfm.idin frontmatter contract - Update all call sites for the id parameter contract change
- Embed parent epic name in feature slugs with
--separator - Deduplicate slugify, replace randomHex with placeholder names
- Add placeholder name generator for human-readable feature slugs
- Accept dots in slug validation
- Fix remaining
store.find()references missed by agent dispatch - Fix BDD step definition parameter binding for slug-foundation tests
- Replace
toEndWithwithtoMatchfor type safety in slug-foundation tests - Update tests for new feature slug format and slugify dedup
- Replace slug params with epicId in all 6 reconcile functions
- Replace
store.find(slug)with epicId lookup in pipeline runner - Remove
find()method from TaskStore interface and implementations - Use
resolveIdentifierinstead ofstore.find()in store commands
Dashboard statistics now persist across restarts via a JSON file, and operators can toggle between all-time and current-session stats views with a keyboard shortcut.
- feat(stats-persistence): add persistence module with load/save/merge for cumulative dashboard stats
- feat(stats-persistence): wire persistence load and flush into App component
- feat(stats-view-toggle): add
skey toggle for all-time vs current-session stats - feat(stats-view-toggle): add toSessionStats converter
- feat(stats-view-toggle): add statsViewMode to DetailsPanel and resolver
- feat(stats-view-toggle): add stats mode to key hints bar
Fixes four dashboard tree log rendering bugs: SYSTEM routing filters epic-scoped entries, dispatched features show correct in-progress status, tree drawing characters stay dim grey regardless of log level, and only the level label carries color while messages remain white.
- feat(feature-status): upgrade pending features to in-progress when session exists
- feat(system-routing): gate systemRef entries on !context.epic
- fix(tree-format): decompose warn/error to segmented coloring
- fix: pass store feature slug to generate-output stop hook
- fix: preserve collision-proof hex suffix during design slug rename
Remove implementation branches (impl/<slug>--<feature>) entirely from the pipeline. Parallel feature agents now commit directly to the shared feature branch, eliminating checkout races, rebase conflicts at checkpoint, and push failures caused by concurrent branch switching in the same worktree.
- Remove
implBranchName()andcreateImplBranch()from worktree module and delete corresponding tests - Remove
parseImplBranch(),ImplBranchPartsinterface, and impl-specific commit routing from commit-issue-ref module - Remove impl branch creation from pipeline runner and watch-loop fan-out dispatch
- Remove impl branch pushing from git push module
- Remove impl-to-feature-issue linking from branch-link orchestrator
- Remove impl branch cleanup loop from
worktree.remove() - Update implement skill: remove Phase 0 branch verification, Phase 3 rebase/merge, and impl branch agent constraints
- Update implement-dev agent: constraints reference
git add <files>+git commiton the current branch - Clean stale impl branch mocks from all test files
- Collision-proof epic slugs — Epic slugs now embed the entity's 4-char hex short ID (e.g.,
dashboard-redesign-f3a7), making slug collisions structurally impossible - Ordinal feature slugs — Feature slugs embed their ordinal suffix (e.g.,
auth-flow-1), replacing hash-based deduplication - CLI prefix resolution — Opt-in prefix matching in
resolveIdentifier()lets CLI users typedashboard-redesignto resolvedashboard-redesign-f3a7 - In-place design reconciliation —
reconcileDesign()updates slug viaupdateEpic()instead of delete/recreate, preserving entity ID stability - Dead code removal — Deleted
hashId(),deduplicateSlug(), andcollectSlugs()— structurally unreachable after ordinal-based derivation - Backward compatibility — Old-format slugs continue working without migration;
slug?parameter retained in signatures
- Wave field persistence —
addFeature()now persists thewavefield on store features so dispatch respects wave ordering
- SessionStart hook — New
session-starthook assembles phase context automatically when a skill session begins, replacing the manual Phase 0 prime step across all five workflow skills - assembleContext core — New
assembleContextfunction reads BEASTMODE.md, config, and phase-specific L1/L2 context into a structured context object for hook injection - Settings writer —
ensureSessionStartHookandwriteSettingsFilefunctions register the hook in Claude Code'ssettings.local.jsonautomatically - CLI integration —
session-startcommand registered in the hooks router with full assembleContext wiring - Phase 0 removal — Stripped the manual prime/context-loading step from design, plan, implement, validate, and release skills
- Functional coupling rule — New L0 plan rule: merge features whose acceptance criteria overlap even when file targets differ
- Phase-aware sync gating —
readPrdSectionsand plan file reads now skip early viaisPhaseAtOrPast()when the producing phase hasn't completed, eliminating expected missing-artifact warnings from the log isPhaseAtOrPastutility — Centralized phase comparison function incli/src/types.tsreplaces scattered string comparisons across the sync engine- Log level corrections —
createLinkedBranch returned nulldowngraded from warn to debug (idempotent success path);readPrdSectionscatch block downgraded from error to warn (degradation, not hard error) - Phase context propagation —
logger.child({ phase: epic.phase })at the sync entry point enriches all downstream log calls with phase context automatically
- Rebase before squash merge — Release workflow now rebases the feature branch onto main before squash merge, preventing stale fork points from overwriting intermediate main commits
- Remove dead merge() — Removed unused
merge()function from worktree utilities
- Behavioral-change skip gate — Plan skill step 4 now evaluates each feature's behavioral impact before dispatching the plan-integration-tester agent; documentation-only, refactoring, config-change, and covered-fix features are classified as non-behavioral and skip agent dispatch entirely
- Agent consolidation analysis — plan-integration-tester agent restructured to two-section artifact format (New Scenarios + Consolidation), replacing the prior three-section format; consolidation section absorbs merges, updates, and deletions to existing scenarios
- Capability domain organization — New scenarios organized by capability domain with happy-path priority and risk-based error path inclusion; Gherkin Feature lines carry both epic and capability tags
- Test depth guidance — Agent definition updated with test depth heuristics for scenario generation
- Integration test feature files — BDD feature files added for skip-gate and agent-consolidation behaviors documenting the behavioral contracts declaratively
- Heading consistency fix — Fixed heading level and Feature-line consistency in the consolidation template
- Session stats accumulator — Event-driven
SessionStatsAccumulatorsubscribes to WatchLoop events (session-started,session-completed,scan-complete) and maintains running session metrics with dispose cleanup - Stats content variant — New
kind: "stats"variant inDetailsContentResultdiscriminated union renders live session statistics in the details panel when(all)is selected - Duration formatting —
format-duration.tsutility converts milliseconds to human-readable strings (e.g., "2m 30s") - Details panel wiring — Stats accumulator instantiated in App component, connected to WatchLoop EventEmitter, stats snapshot passed through to DetailsPanel rendering
- Test coverage — +169 individual tests, +20 test files covering accumulator logic, duration formatting, and BDD integration scenarios
- Test runner context correction — L2 testing rules corrected from stale
bun:testtovitest(project usesbun --bun vitest run)
- Shared version module — Single
cli/src/version.tsresolves version from plugin.json at runtime, eliminating scattered hardcoded version strings - CLI help integration — Help output uses shared version module instead of hardcoded string
- Watch loop integration — Status display uses shared version module for consistent version reporting
- BDD coverage — 6 Cucumber scenarios with inline World pattern verify end-to-end version resolution from plugin.json
- Test runner context correction — L2 testing rules now distinguish
bun:test(store tests) fromvitest(cli/tests) imports
- SYSTEM node rename — Rename CLI root node to SYSTEM with hierarchical tree prefix connectors matching epic node formatting
- Dynamic status badges — Use session phase for dynamic epic node status, in-progress badges for dynamically created feature nodes
- Event routing levels — Classify watch-loop started as debug, prefer explicit
levelfield inentryTypeToLevelmapping - Dashboard wiring — Pass enrichedEpics to
useDashboardTreeState, computemaxVisibleLinesfrom terminal rows, split session-started into info + debug entries - Single-concern plan rule — Add L0 process rule for single-concern feature decomposition during planning
- Artifact path normalization — Normalize absolute worktree paths to bare filenames via
basename()in sync engine functions (readPrdSections,syncFeature,buildArtifactsMap), preventing filesystem path leakage into GitHub issue bodies - Output path sanitization — Apply
basename()tobuildOutputfor design, validate, and release artifact paths before storing in the manifest - Sync debug logging — Add error logging to sync catch blocks and diagnostic logging to
syncFeature,buildArtifactsMap, andreadPrdSectionsfor future troubleshooting
- Install command —
npx @anthropic-ai/claude-code-beastmode installprovides zero-friction plugin setup: prerequisite checks, bun auto-install, CLI linking, JSON config merging, and post-install verification - Uninstall command —
npx @anthropic-ai/claude-code-beastmode uninstallcleanly removes plugin config entries and CLI links - Plain Node.js entry point — npx CLI (
src/npx-cli/) runs as pure ESM.mjswith no TypeScript, no build step, and no external dependencies — works before bun is available - README update — Add system requirements, npx install command, and uninstall instructions
- Portable hook commands — Replace absolute
import.meta.dirpaths withbunx beastmode hooks <name> [phase]CLI commands in all settings builders, making hooks portable across machines, worktrees, and installation paths - Hooks dispatch command — Add
beastmode hooks <name> [phase]CLI entry point that dispatches to hitl-auto, hitl-log, generate-output, and file-permission-settings handlers - HITL builder updates — Update PreToolUse, PostToolUse, and file-permission builders to emit
bunx beastmode hooksinstead ofbun run <absolute-path> - Git-initialized test dirs — Fix integration tests to call
git initin temp dirs before invoking CLI hook commands that internally usegit rev-parse
- Absolute hook paths — Replace fragile shell
$(dirname "$0")substitution withimport.meta.dirnamein HITL and file-permission hook builders, making hook paths absolute and portable across worktrees - Remove static Stop hook — Remove obsolete Stop hook from both
settings.jsonandhooks/hooks.json; all hooks now generated intosettings.local.jsonat dispatch time - Null guard fixes — Add null guards for optional
file-permissionsconfig section inconfig.tsand pipeline runner timeout lookups
- HITL config example — Replace fictional gates config in README with real
hitl:structure from config.yaml - Domain list correction — Fix domain attribution from "Meta" to "Research" in README knowledge hierarchy section
- README accuracy test — Add integration test validating README config examples and domain descriptions match actual project structure
- CLI verbosity filter — CLI root entries now pass through
shouldShowEntryso they respect the dashboard verbosity toggle instead of always rendering - Event routing and levels — Add optional
levelfield toLogEntry; lifecycle events route to the correct log with proper severity (debug for heartbeats, warn for dead sessions, error for failures); remove dual-write pattern - Version display — Capture plugin version from the
startedlifecycle event and render it below the clock in the NyanBanner header
- compareEpics comparator — Sort epics by most recent commit timestamp (descending), with slug-based tiebreaker for deterministic ordering
- listEnrichedFromStore sort — Apply compareEpics in the shared data layer so all consumers (dashboard, CLI) get sorted epics automatically
- Integration test — BDD scenario covering date-based epic ordering contract
- Command-type hooks — Replace prompt-based HITL hooks with static command-type hooks;
buildPreToolUseHook(phase)emitstype: "command"entries instead of prompt injection - hitl-auto.ts — Standalone auto-answer script that reads config at runtime, enabling config changes without hook regeneration
- BDD integration tests — Full Cucumber test suite for static HITL hook behavior with path resolution fixes
- Tree refactor — Flatten tree hierarchy from Epic > Phase > Feature to CLI > Epic > Feature; phase displayed as colored badge, not tree level
- Epics tree expansion — Flat row model with
buildFlatRowsandrowSlugAtIndex; single-expand toggle, feature status colors - Details panel — Renamed from OverviewPanel; context-sensitive content by selection type (all/epic/feature), artifact loading, PgUp/PgDn scroll
- Keyboard extensions — Tab focus toggle between Epics and Log panels, 'p' phase filter cycling, 'b' blocked toggle, arrow key routing by focused panel
- Focus border — Animated nyan rainbow border on focused panel using
NYAN_PALETTE[tick % 256] - Dashboard wiring — Wire all extensions into App.tsx: filters, scroll offsets, focus state, ThreePanelLayout integration
- Retry queue — PendingOp types extending SyncRef, exponential backoff (2^retryCount ticks, max 5), enqueue/drain/resolve pure functions, enqueue on sync engine error paths
- Reconciliation loop — Bootstrap sync-refs from store, drain retry queue, full body/title/label reconciliation for entities with
bodyHash: undefined, runs on every watch loop tick - Field mapping fix — Map store status to phase, build artifacts from flat fields, normalize artifact paths to repo-relative
- Bun mock fixes — CryptoHasher and spawnSync global mocks for Node-mode vitest integration tests
- Early issue titles — Epic-prefixed titles for stub feature issues
- Store schema extension — Feature.slug, EnrichedEpic, NextAction, summary object shape, slug utilities (slugify, isValidSlug, deduplicateSlug)
- Store import —
beastmode store importcommand with manifest-to-store migration path - GitHub sync separation — Sync-refs I/O module separating issue/project references from store; rewrite runner, early-issues, and syncGitHub to use store entities
- XState-store bridge — Rewrite pipeline machine types, guards, actions, and reconciler for store entity types; inline regress into actions.ts
- Consumer migration — Dashboard, watch loop, phase command, cancel, and backfill migrated to store-only; listEnrichedFromStore scan
- Manifest deletion — Manifest module (pure.ts, store.ts, reconcile.ts) deleted; all remaining references cleaned up
- Validation fixup — Reconciler slug rename via delete+recreate, feature status sync, reDispatchCount persistence, worktree rename after slug change
- Body enrichment — Epic issues get full PRD (6 sections), feature issues get full plan (4 sections), human-readable titles
- Git push — Unconditional branch/tag push after every checkpoint with
hasRemote()guard and warn-and-continue - Branch linking —
createLinkedBranchGraphQL mutation with delete-then-recreate workaround, node ID resolution helpers - Commit traceability — Range-based rebase amend replacing single-commit HEAD amend;
resolveRangeStart,resolveCommitIssueNumber,amendCommitsInRange - Backfill — Full reconciliation command (sync, push, amend, link) with comprehensive test suite
- Dead code removal — Removed
resolveGitMetadata,readVersionTag, Git section from body enrichment
- Unified 4-level Logger — Single Logger interface with debug/info/warn/error replacing six ad-hoc levels; structured LogEntry with key-value data support
- Pluggable sink model — StdioSink, DashboardSink, TreeSink behind one LogSink interface; verbosity gating moved to sinks, not Logger
- Full call-site migration — ~100 call sites migrated from three Logger implementations to unified API; console.error/console.log calls migrated to Logger
- Dashboard sink — DashboardSink routes log entries to dashboard stores; 2-level verbosity cycle (info/debug)
- Tree sink — TreeSink replaces TreeLogger; createTreeSink factory with tests
- Integration tests — Cucumber BDD scenarios for all 7 user stories with LoggingWorld API-behavioral pattern
- Test updates — All test mocks updated to 4-level Logger interface
- Inline Gherkin distribution — Plan invokes integration tester agent in batch, distributes scenarios inline into each feature plan (no dedicated Wave 1 integration-tests feature)
- BDD verification in implement — Post-wave BDD verification section with escalation docs, Task 0 convention discovery, and status summary stats
- Targeted validate re-dispatch — REGRESS_FEATURES event resets only failing features to pending (reDispatchCount budget of 2), passing features retain completed status; blanket REGRESS remains as fallback
- regressFeatures() pure function — ManifestFeature.reDispatchCount tracking with budget enforcement
- Integration test scenarios — 25 Cucumber scenarios (410 steps) covering full pipeline and validate feedback profiles
- Delete cmux/SDK dispatch — Remove cmux multiplexer, SDK streaming, SdkSessionFactory, and all related types; hardcode iTerm2 as the sole dispatch backend
- Narrow DispatchStrategy — Reduce to
interactive | iterm2only; remove strategy from config and DispatchedSession events field - Delete watch/status commands — Remove
watchandstatusfrom CLI router, delete WatchTreeApp, tree-subscriber, and strategy selection cucumber files - Extract ReconcilingFactory — Move to
dispatch/reconciling.ts, rewire dashboard imports - Integration tests — 20 new Cucumber scenarios across 8 feature files covering the simplified dispatch pipeline
- Context tree cleanup — Delete cmux context tree, update L2/L3 context files to remove all cmux/SDK/watch/status references
- Commit issue refs — Post-sync pipeline step amends commit messages with
(#N)trailing format for epic/feature auto-linking in GitHub timeline - Compare URLs — Epic body git metadata section includes compare URL with active branch range during development, archive tag range after release
- Early issue creation — Pre-dispatch pipeline step creates GitHub issues before phase dispatch so issue numbers are available from the first commit
- Enrichment pipeline fix — Artifact paths wired through reconcile functions;
artifactsfield added to EpicEvent; deadenrich()function removed - Backfill script —
backfill-enrichmentscript for retroactively enriching existing epic issues - Integration tests — 26 Cucumber scenarios across 7 feature files covering all enrichment capabilities
- Liveness engine — External process liveness detection via iTerm2 TTY process tree inspection;
checkLivenessonSessionFactoryinterface (optional) probesps -t <tty>forbeastmodein args - Session death detection — Dead sessions force-resolved and re-dispatched via existing rescan path;
session-deadevent emitted for observability - TTY management — TTY device paths captured at dispatch time via
It2Client.getSessionTty(); dual-ID mapping bridges dispatch session IDs to iTerm2 pane session IDs - Map lifecycle — Cleanup for ttyMap, resolvers, and dispatchToPaneId in all completion and abort paths
- Integration tests — Cucumber scenarios for crashed session detection, dead session re-dispatch, session isolation, session-dead event logging, and instrumentation-free liveness
- Monokai Pro palette — Centralized color module with hex/ANSI constants replacing scattered hardcoded values across all dashboard components
- Smooth gradient — 256-step interpolated nyan banner palette replacing 6-color hard-switch
- Depth hierarchy — Three-tier panel background system (chrome → mid → deep) with header/hints chrome bands
- Layout restructure — Vertical split layout with outer chrome removed, panel interior backgrounds via PanelBox
- Banner fixes — Correct D/K character swap and trailing dot count
- Integration tests — Cucumber scenarios for all dashboard-polish features with shared DashboardWorld helpers
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Store backend —
store.jsonpersistence layer withJsonFileStorefor CRUD operations, hash-basedbm-xxxxIDs, cross-epicdepends_ondependency modeling, and file-level mutex for concurrent access - Store CLI —
beastmode storecommand namespace with epic/feature CRUD, query commands (ready,blocked,tree,search), and JSON output contract - ID resolution —
resolveIdentifierfunction with dual-reference support (hash ID or human slug), ambiguity detection, and manifest fallback for coexistence - Phase integration — Store-based ID resolution wired into phase dispatch pipeline alongside existing manifest system
- Integration tests — Cucumber BDD suite with
InMemoryTaskStoretest double covering 10 user stories: ready queries, hash IDs, cross-epic deps, tree view, dual reference, dependency ordering, typed artifacts, JSON output, backend CRUD, and blocked detection
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- File permission config — Declarative
file-permissions:section in config.yaml with per-category prose fields and "always defer to human" defaults - Hook builders — Generate Claude Code PreToolUse prompt hooks from config, targeting Write/Edit with
if-field path filtering per category - Dispatch integration — File permission hooks written alongside HITL hooks at watch, phase, and pipeline runner dispatch time
- Permission logging — PostToolUse command hooks for Write/Edit events with unified log entry formatting and routing
- Integration tests — Cucumber BDD suite covering config parsing, hook generation, decision logging, and lifecycle scenarios
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- ThreePanelLayout wiring — Replaced dead TwoColumnLayout with ThreePanelLayout in App.tsx as the primary dashboard layout
- Cucumber integration tests — Added BDD integration test suite for dashboard wiring: Gherkin scenarios, DashboardWorld with source-analysis pattern, step definitions, and cucumber profile
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- NyanBanner — Animated 2-line ASCII block art header with continuously cycling 6-stripe rainbow colors (80ms tick, pure color engine in
nyan-colors.ts) - OverviewPanel — Static pipeline summary replacing dynamic DetailsPanel: phase distribution, active sessions count, git branch status
- Layout polish — Inline border titles in PanelBox (custom top line, no third-party dependency), fullscreen auto-expansion via
useTerminalSize()explicit height
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Plan-integration-tester agent — New domain-specialist agent spawned by plan skill post-decomposition to generate BDD integration test features from PRD user stories
- Integration test generation step — Plan skill execute phase now includes an integration test generation step that diffs PRD against existing
.featurefiles and produces Gherkin integration artifact at wave 1
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Two-column layout — Replaced ThreePanelLayout with full-height TwoColumnLayout (40/60 split), stacking epics and details panels in the left column with a full-height tree view on the right
- Panel styling — Added backgroundColor prop to PanelBox for dark charcoal (#2d2d2d) interior backgrounds, removed outer chrome border
- Epic list icons — Replaced row layout with status-aware icons (selected arrow, running spinner, phase-colored idle dot, dimmed done dot) and compact slug + phase badge format
- Icon selection tests — Added pure function extraction for testable icon selection logic with full test coverage
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Specialized agents — Replaced monolithic implement-implementer with three focused agents: implement-dev (TDD execution), implement-qa (verification), implement-auditor (spec compliance)
- Native dispatch — Rewired all skill dispatch from
.claude/agents/YAML tosubagent_typeparameters, eliminating manual prompt assembly - Legacy cleanup — Deleted
.claude/agents/directory andimplement-implementer.md, replaced by plugin agent definitions - Context updates — Agent naming convention (
<phase>-<role>) and dispatch pattern captured in L2 context docs
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Three-panel layout — App.tsx rewritten to use ThreePanelLayout with EpicsPanel, DetailsPanel, LogPanel as slot children, replacing the legacy drill-down navigation model
- Legacy component deletion — Removed EpicTable, FeatureList, AgentLog, ActivityLog, CrumbBar, view-stack module, and associated keyboard hooks
- Barrel export cleanup — Updated barrel exports and key hints for the new panel architecture
- Integration test suite — Added App wiring integration test with 22 tests and 56 assertions validating end-to-end dashboard wiring
- Context docs updated — DESIGN.md Dashboard section rewritten for three-panel model, L3 dashboard records updated
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Watch loop HITL injection —
dispatchPhase()inwatch.tsnow writes HITL hooks and rebases onto main before SDK dispatch, so AskUserQuestion calls respect thehitl:config instead of blocking for human input - skipPreDispatch comment fix —
runner.tscomment updated to accurately describe the contract: watch factory owns steps 1-3, runner skips them - Watch dispatch parity rule — L2 context updated with explicit invariant: when adding new pre-dispatch steps to the runner, also add them to
dispatchPhase()
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Isolated implementation branches — Parallel worktree agents use
impl/<slug>--<feature>branches instead offeature/<slug>/<feature>, eliminating git ref namespace collisions implBranchNameutility — Naming function for consistentimpl/<slug>--<feature>convention- Idempotent
createImplBranch— CLI-owned branch creation with try-catch robustness - Pipeline integration — Impl branch created in both pipeline runner and watch loop before dispatch
- Automatic cleanup — Impl branches deleted on worktree removal
- Skill updates — SKILL.md, agent, and context files updated to reference new convention
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Three-tier escalation ladder — Implementer agents start on haiku and automatically escalate to sonnet, then opus, when blocked or quality review fails with critical issues
- Per-task reset — Each new task starts at haiku regardless of previous task's escalation; no sticky escalation across tasks
- Retry budget — 2 retries per model tier, max 6 total attempts per task before marking BLOCKED
- BLOCKED handler escalation — Retry exhaustion at current tier triggers escalation to next tier
- Quality review escalation — NOT_APPROVED with Critical/Important severity issues triggers model escalation
- Non-escalation boundaries — NEEDS_CONTEXT and spec review FAIL do not trigger escalation (context/requirement issues, not model capability)
- Report visibility — Implementation report logs final model tier and escalation count per task
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Shared TreeView component — Hierarchical tree rendering (epic > phase > feature) with vertical line connectors and phase-based coloring, used by both
beastmode watchand dashboard log panel - TreeLogger — Drop-in Logger interface replacement that routes messages into tree state for Ink rendering instead of stdout;
child()creates scoped sub-loggers matching the tree hierarchy - useTreeState hook — React hook managing tree state with mutations for adding epics, phases, features, and log entries; shared between watch and dashboard
- Dashboard adoption —
useDashboardTreeStateadapter transforms existing ring buffer entries + session events into tree state, swapping only the rendering layer while preserving data flow - Watch integration —
WatchTreeAppInk component withattachTreeSubscriberfor WatchLoop-to-tree wiring;--plainflag and non-TTY detection fall back to flat format - Tree format functions —
formatTreeLogLinesimplified output (no phase/scope columns since tree position conveys hierarchy); tree data types with depth-aware prefix rendering
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Write Plan — Replaces implicit task decomposition with a visible
.tasks.mddocument containing complete code, TDD cycles, file structure mapping, and strict no-placeholder rule; self-review pass scans for spec coverage, forbidden patterns, and naming consistency before dispatch - Agent Review Pipeline — Three dedicated agent files (implementer, spec-reviewer, quality-reviewer) with four-status model (DONE, DONE_WITH_CONCERNS, NEEDS_CONTEXT, BLOCKED) and two-stage ordered review: spec compliance reads actual code before quality review runs
- Branch Isolation — Isolated implementation branches per feature (
feature/<slug>/<feature>) with per-task commits; checkpoint rebases back to worktree branch with auto-retry conflict resolution agent - Subagent Safety — Agents commit on impl branch only, never on worktree branch; branch verification in Prime ensures correct checkout before dispatch
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Unified pipeline runner — Both manual CLI and watch loop call the same 9-step
pipeline/runner.ts, eliminating duplicated worktree setup, dispatch, reconciliation, and teardown logic - Worktree rebase step — Feature branches automatically rebase onto local main before each phase dispatch (except design), preventing merge distance accumulation across multi-phase workflows
- Domain directory restructure — CLI source reorganized into seven domain directories (
git/,hooks/,dispatch/,pipeline/,settings/,artifacts/,manifest/) with uniform CRUD verb naming - Dead code removal — Unused exports, orphan modules, and stale files cleaned up; net reduction in codebase size
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Progressive body enrichment — Epic and feature issue bodies fill with PRD content, user stories, artifact links, and git metadata as epics advance through phases
- Section extractor/splitter — Regex-based markdown parser extracts named sections from PRD and plan artifacts by
##headings - Artifact reader — Resolves design/plan/validate/release artifacts from manifest paths with slug glob fallback and graceful degradation
- Feature user stories — Feature issue bodies include their user story extracted from plan files
- Release traceability — Epic body updated with version, release tag, and merge commit links on release
- Release closing comment — Closing comment posted to epic issue announcing version, tag, and merge commit
- Presence-based rendering — Missing fields produce no output, not empty sections; bodies degrade gracefully
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Fixed-width phase column — Extracts phase as a 9-character column for vertical alignment across all log lines
- Scope truncation — 32-character budget with trailing ellipsis for long epic/feature names
- Message deduplication — Strips phase/epic/feature info from message text when already present in structured prefix
- costUsd guard — Omits cost from completion messages when undefined instead of crashing on
.toFixed() - Dashboard parity — Activity log inherits new format automatically via shared
formatLogLine
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Release gate — Serializes release phase dispatch so only one epic releases at a time, preventing squash-merge conflicts on main; FIFO ordering by manifest creation date
release:heldevent — New typed WatchLoop EventEmitter event carrying waiting/blocking epic slugs, logged at info level for pipeline observability- Dashboard queue indicator — "Queued" badge on held epics with blocking epic tooltip, driven by
release:heldevents
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- HITL config section — Seeds
hitl:into.beastmode/config.yamlfor projects predating the HITL feature, making per-phase human-in-the-loop behavior visible and tunable - Design stays human — Design phase set to
"always defer to human", preserving collaborative interviews - Pipeline stays auto — Plan, implement, validate, release set to fully autonomous mode
- Init template parity — Includes
model: haikuandtimeout: 30matching the init template defaults
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Serial gray-area sweep — Replaced batched multi-select loop with one-at-a-time flow, presenting gray areas in priority order (most ambiguous first)
- Reduced interaction overhead — Removed dedicated "Skip" and "You decide" options; built-in Other field covers both bail-out and delegation
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Three-panel layout — k9s-style split screen with epics list (top-left), details (top-right), and log (bottom full-width), replacing the old drill-down navigation model
- Epics panel — Keyboard navigation,
/filter,xcancel with inline confirmation,atoggle done/cancelled - Details panel — Epic metadata, feature list with phase-colored status indicators, and progress bars
- Log panel — Auto-follow log stream, epic-filtered or aggregate "(all)" mode with ring buffer per session
- Old dashboard cleanup — Removed view stack, push/pop navigation, breadcrumb bar, and activity log components
- 99 new tests — Full test coverage across all four new panels
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Shared format function —
shared/log-format.tswith Pino-pretty style output:[HH:MM:SS] LEVEL (phase/epic/feature): message - Logger API —
createLogger(verbosity, context)with.child()context merging, replacing flat slug strings - Call site migration — All ~15 call sites migrated from raw console.log to structured logging API
- Dashboard format — ActivityLog uses shared
formatLogLine()for consistent visual output across CLI and TUI - NO_COLOR support — Graceful degradation via NO_COLOR/FORCE_COLOR/isatty() detection
- Null logger —
.child()returns null logger, preserving the null object pattern
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Endpoint in error messages —
gh()error messages now showargs.slice(0, 2)instead of just the verb, surfacing the actual API endpoint on failure - Logger threading — All 11
gh*helper functions ingh.tsaccept optionallogger?: Loggerfor epic-scoped context propagation - Sync layer wiring —
syncGitHub()andsyncGitHubForEpic()thread logger through all GitHub API call sites
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Per-phase HITL config — Prose config in
config.yamlunderhitl:key with "always defer to human" defaults for all phases - Prompt hook —
PreToolUsehook onAskUserQuestionreads HITL instructions and auto-answers or silently defers to the human - Decision logging —
PostToolUsecommand hook logs all auto and human decisions tohitl-log.mdper phase - Skill contract — L0 prime directive + guiding principle in all 5 skill files requiring
AskUserQuestionfor all user input - Retro integration — Context walker analyzes HITL logs, identifies repetitive human decisions, generates
config.yamlsnippets for automation
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Release cleanup — Wire
cleanup()into ReconcilingFactory's release teardown so epic tabs/workspaces close automatically on successful release - Error badge — Failed releases set a badge on the tab session so users know which lingering tabs need attention
- Orphan reconciliation — Startup reconciliation closes tabs for done-manifest epics instead of adopting them, covering both iTerm2 and cmux strategies
- Context promotions — Documented decorator-forwarding anti-pattern and best-effort visual cleanup convention
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Dead code removal — Stripped all cost-tracking plumbing (
costUsd,cost_usdfields,$0.00formatting) that always displayed zero because non-SDK dispatch strategies can't introspect cost data - Type cleanup — Removed
costUsdfromSessionResult,CompletionEntry, andPhaseResult; removedcost_usdfrom interactive runner - Session adapter cleanup — Removed
costUsd: 0hardcodes from cmux and iTerm2 session adapters - Watch loop cleanup — Removed cost capture logic and
$X.XXformatting from watch command output - Docs cleanup — Deleted
cost-tracking.mdandcost-separation.mdcontext docs; removed cost references from DESIGN.md and CLI context - Gitignore cleanup — Removed
.beastmode-runs.jsonentry
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Auto-continuation loop — Gray area sweep in design skill now auto-continues until 0 gray areas remain, replacing the opt-in "3 more or satisfied?" prompt
- Skip escape hatch — "Skip — move to validation" option in every batch's AskUserQuestion; Skip wins over co-selected gray areas
- Session deduplication — Resolved gray areas tracked per session, never re-surfaced in later batches
- Partial batch support — Presents 1-2 remaining gray areas when fewer than 3 exist
- Express path parity — Existing-document express path inherits the same exhaustive sweep behavior
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Uniform section ordering — All 5 phase skills (design, plan, implement, validate, release) restructured to follow Title > HARD-GATE > Guiding Principles > Phase 0-3 > Constraints > Reference ordering
- 3-level heading hierarchy — Enforced
#title,##major sections,###subsections max across all skill files - Guiding Principles sections — Each skill gets 2-4 skill-specific operating principles extracted from existing prose
- Constraints sections — All anti-pattern rules ("NEVER", "do NOT") collected into dedicated
## Constraintssections - Reference sections — Templates, formats, and reference material moved to
## Referenceat the end of each skill
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Skill flattening — All 5 phase skills (design, plan, implement, validate, release) collapsed from multi-file
phases/+references/structure into single self-contained SKILL.md files with inline phase sections - Task runner removed —
skills/task-runner.mddeleted; TodoWrite references removed from all HARD-GATE blocks - Context cleanup — Task-runner L2/L3 docs removed; 16 stale references to
phases/,_shared/, and@importsfixed across context hierarchy - Net reduction — 1782 added, 1743 removed across 63 files
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- View stack navigation — k9s-style push/pop drill-down across three views: EpicList, FeatureList, AgentLog (Enter to drill, Escape to pop)
- Breadcrumb bar — Shows current position in the view stack (e.g.,
epics > cancel-cleanup > cancel-logic) - Context-sensitive key hints — Bottom bar updates per view type with available keybindings
- SDK streaming refactor — Dispatch refactored from fire-and-forget to async generator iteration with EventEmitter;
includePartialMessagesenables text delta and tool call streaming - Structured message mapper — Converts SDKMessage types to terminal-friendly log entries (text deltas inline, tool calls as one-liners)
- Ring buffer per session — ~100 entries collected continuously per dispatched SDK session for instant history on navigation
- SDK dispatch override — Dashboard forces SDK dispatch strategy at runtime regardless of config setting
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Gate mechanism removed —
[GATE|...]/[GATE-OPTION|...]syntax stripped from all skill phase files; design inlines interactive behavior directly, non-design phases inline auto behavior as sole code path - CLI degated —
GatesConfigtypes,resolveGateMode(), gate-checking logic incheckBlocked()removed from TypeScript codebase - Config simplified —
gates:section removed from config.yaml; fewer knobs, less confusion - Task-runner streamlined — Gate detection block removed; execution loop no longer pauses on gate checks
- Context docs updated — Gate references purged from DESIGN.md, BEASTMODE.md, and 33 L1-L3 context files
- Dead code cleanup — sdk-runner, run-log removed; test dirs consolidated
- Net reduction — 643 added, 1680 removed across 152 files
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Shared cancel module —
cancel-logic.tsprovides ordered cleanup (worktree, branch, archive tags, phase tags, artifacts, GitHub issue, manifest) consumed by CLI, dashboard, and design-abandon --forceflag — Skips confirmation prompt for automated pipelines- Idempotent cancel — Running cancel twice succeeds with nothing left to clean
- Warn-and-continue — Failure in one cleanup step doesn't block the rest
- Artifact matching — Uses epic name from manifest, falls back to identifier on re-run; research artifacts preserved
- GitHub integration — Issue closed as not_planned when github.enabled and epic number present
- Fix — Derive output.json filename from worktree name, not artifact name
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Primary abandon gate — Detects missing design output after
runInteractive()returns, triggers cleanup sequence (worktree removal, manifest deletion, GitHub issue close) - Secondary post-dispatch guard — Prevents
DESIGN_COMPLETEDevent when no output artifact exists, blocking state machine advancement - Idempotent
store.remove()— Returns false for missing files, safe to retry - Test coverage — 16 new tests for design abandon gate (both exit paths), post-dispatch guard, and manifest store remove idempotency
- Net code reduction — 349 added, 609 removed across 23 files
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Phase regression/rerun — Overloads
beastmode <phase> <slug>to detect when the requested phase is at or behind the current phase, resetting the branch to the predecessor phase's tag and rerunning fresh - Phase detection matrix — Four-case exhaustive detection: regression (requested < current), same-phase rerun (requested == current with prior commits), normal forward (no prior), forward-jump blocked (requested > current)
- Generic REGRESS event — New XState machine event (
{ type: "REGRESS", targetPhase }) replaces the hardcoded VALIDATE_FAILED transition; guard enforces valid regression targets - CLI-managed git tags —
beastmode/<slug>/<phase>tags created at each phase checkpoint for deterministic reset targets; deleted on regression, renamed during slug rename - Crash-safe ordering — Delete downstream tags, git reset, regress manifest; missing tags are harmless, next phase recreates them
- Watch loop auto-regression — Validate failure sends REGRESS with targetPhase "implement" instead of VALIDATE_FAILED; no confirmation prompt in automated mode
- Confirmation prompt — Manual CLI prompts before destructive regression; watch loop skips for unattended operation
- Feature reset — All features reset to pending when regressing to or past implement phase
- Deletions — VALIDATE_FAILED event type, constants, and legacy tests fully removed
- Strategy dispatch — Replace broken CLI fallback with proper
selectStrategy()wired into dashboard command, respecting configured dispatch strategy - Verbosity cycling — Root-level App state ownership with
vkey handler, render-time filtering in LogPanel, and key hints bar indicator - Event log fallback —
FallbackEntryStorewith lifecycle-to-LogEntry converter, WatchLoop lifecycle events wired intouseDashboardTreeStatefor non-SDK dispatch visibility - Integration tests — 6 Gherkin feature files with 22 scenarios covering strategy selection, auto-detection, CLI fallback, and error handling via
DashboardDispatchWorld
- Standardized YAML frontmatter — Consistent
slug,epic,featurefields across all 5 phases with phase-specific additions (wave,status,bump) store.rename()— Single atomic method handling all 7 slug-keyed resources (artifacts, branch, worktree, manifest file, manifest content)store.find()— Resolves epics by either hex slug or human-readable nameslugify()/isValidSlug()— Centralized format validation in the manifest store- Collision resolution — Deterministic
<epic>-<hex>suffix when slugs collide - Single
store.save()persist — One call per dispatch; no more multiple writes or mid-transaction divergence output.jsonas sole LLM-to-CLI channel — Replaces commit-message regex parsing- Deletions —
rename-slug.ts,resolveDesignSlug()regex parser,skipFinalPersistflag, disk writes from machine persist action, rename logic fromstore.save()
beastmode dashboardcommand — Fullscreen terminal UI built with Ink v6.8.0 + React for monitoring and controlling the pipeline- Three-zone layout — Header bar with clock, scrollable epic table with progress bars and spinners, activity log with auto-scroll
- Embedded watch loop — Dashboard IS the orchestrator; WatchLoop refactored to extend EventEmitter with typed events (
epic:start,epic:complete,epic:error,phase:start,phase:complete,scan) - Keyboard navigation — q/Ctrl+C (quit), up/down arrows (row selection), x (cancel epic with inline y/n confirmation), a (toggle auto-scroll)
- Cancel epic action — Triggers XState state machine CANCEL event AND aborts running sessions via DispatchTracker
- Shared data module — Extracted
status-data.tswith pure functions for sorting, filtering, snapshot building, and change detection; shared betweenbeastmode statusandbeastmode dashboard - Externalized signal handling — Signal handlers moved out of WatchLoop; callers (watch command, dashboard) own SIGINT/SIGTERM and call
loop.stop()
- Dead file removal — Deleted
persona.md,0-prime-template.md,3-checkpoint-template.mdfromskills/_shared/ - Persona consolidation — Merged context-awareness and skill-announce sections into BEASTMODE.md; removed
@persona.mdimports from all 5 skill prime phases - Directory flatten — Moved
task-runner.mdtoskills/root, updated all 5 SKILL.md import paths, deleted empty_shared/directory - Dangling import cleanup — Removed stale
@retro.mdimport from design checkpoint
- Plan gate removal — Deleted
feature-set-approvalandfeature-approvalgates from plan execute and validate skills; steps renumbered - Slug gate collapse — Collapsed
slug-proposalgate in design checkpoint to auto-derive behavior (Claude synthesizes slug from problem statement, no prompt) - Config cleanup — Removed
plan.feature-set-approval,plan.feature-approval, anddesign.slug-proposalentries fromconfig.yaml
- Release-only retro — Retro runs once at release with all phase artifacts instead of after every phase checkpoint, producing a coherent cross-phase knowledge update
- Context walker sole agent — Meta walker deleted, context walker is the only retro agent
- Inlined retro orchestration — Release skill inlines retro directly, no shared
_shared/retro.mdimport - Single retro gate — Four retro gates (
records,context,phase,beastmode) collapsed to singleretro.beastmode: human; L3/L2/L1 changes apply automatically - Meta tree removal — Universal meta rules migrated to BEASTMODE.md process sections, entire
meta/directory deleted - Compaction decoupled — Automatic compaction removed from release; manual-only via
beastmode compact - Knowledge docs updated — DESIGN.md and RELEASE.md context docs updated to reflect new retro behavior
- Epic body formatting — Epic issues now display a phase badge, problem statement, solution summary, and a feature checklist with
[x]/[ ]completion status and#Nissue links - Feature body formatting — Feature issues show plan description text with epic back-reference
- Manifest summary fields —
summary(problem + solution) onPipelineManifest,descriptiononManifestFeature, populated by design and plan checkpoints respectively - Sync body update —
ghIssueEditaccepts optionalbodyparam, formats and writes issue bodies on every sync pass - Hash-compare short-circuit —
github.bodyHashstores last-written content hash, skips API call when body unchanged - Graceful fallback — Missing summary fields still produce richer body (phase badge + checklist) instead of stub
- Cancelled features excluded from checklist; manifest array order preserved
- Watch loop sync —
reconcileState()now callssyncGitHubForEpic()after persistence, with discovery cached once per scan cycle and per-epic logger support - Sync helper extraction — New
syncGitHubForEpic()ingithub-sync.tsencapsulates the full sync lifecycle (config → discover → sync → apply mutations → warn-and-continue), replacing the inline block inpost-dispatch.ts - Cancelled phase sync — Cancelled epics map to Done board column, get
phase/cancelledlabel, and close on GitHub just like done epics
- XState v5 epic machine — Explicit state machine with 7 states (design → plan → implement → validate → release → done/cancelled), named guards (
hasFeatures,allFeaturesCompleted,outputCompleted), and declarative actions (persist,enrichManifest,renameSlug,syncGitHub) viasetup()API - Feature status machine — Separate 4-state machine (pending → in-progress → completed → blocked) for feature lifecycle
- State metadata dispatch — Watch loop reads
meta.dispatchTypefrom actor snapshot instead ofderiveNextAction()— single source of truth for what each state means - Snapshot persistence —
getSnapshot()→ JSON →createActor(machine, { snapshot })round-trip, same.manifest.jsonformat, zero migration - Consumer swap —
post-dispatch.tsreduced to thin event router,watch-command.tsreads dispatch from actor meta,state-scanner.tsuses actor for state resolution - Validate regression —
VALIDATE_FAILEDas explicit implement ← validate transition with feature reset - Cancel from any state —
CANCELevent valid from any non-terminal state withmarkCancelled+persistactions - 835 tests — Comprehensive coverage across transitions, guards, actions, persistence round-trips, and integration flows
- Retro value-add gate — Both retro walkers (context, meta) now check four criteria before creating L3 records: rationale, constraints, provenance, dissenting context. Redundant L3s that merely restate their parent L2 are silently skipped
- Compaction agent — New utility agent (
agents/compaction.md) audits the full context tree with three ordered operations: staleness removal, L3 restatement folding, and L0 promotion detection for rules duplicated across 3+ phases beastmode compactCLI — On-demand context tree audit command, always runs regardless of release cadence- Release compaction integration — Automatic compaction every 5 releases, runs before retro in checkpoint phase to prevent creating-then-immediately-deleting records
- Centralized logger — New
createLogger(verbosity, slug)factory incli/src/logger.tswith level-gated methods:log()(L0),detail()(L1),debug()(L2),trace()(L3),warn()/error()(stderr) - Verbosity flags —
-v/-vv/-vvvflag parsing on all CLI commands (watch, phase, cancel, status) - Full call-site migration — All 70
console.log/console.errorcalls replaced with logger equivalents across 13 CLI files - Consistent output format —
HH:MM:SS slug: messageacross all commands - stderr/stdout split — warn/error always write to stderr, info/debug to stdout
- Fix — Restored feature-isolation guards removed during call-site migration
- Slugless design entry —
beastmode designtakes no arguments; generates random hex temp slug, asks "What are you trying to solve?" before any codebase exploration - Slug proposal gate — Design checkpoint proposes a slug after decision tree completion, user confirms or overrides via gated decision
- Post-dispatch rename — CLI reads real slug from output.json and renames worktree dir, git branch, manifest file, manifest internals, and PRD artifact
- Auto-suffix collision handling —
-v2through-v99when slug collides with existing worktree/branch - Graceful rename failure — System continues under hex name if rename fails
- Artifact rename fix — Renamed artifacts from
slugless-designtodesign-assumptions-less-of-them-v2for consistency
- iTerm2 dispatch strategy — New
dispatch-strategy: iterm2uses theit2CLI for native tab-per-epic and split-pane-per-phase pipeline visibility in iTerm2 - It2Client wrapper — Typed wrapper for
it2CLI commands (create-tab, split-pane, close-pane, list-sessions) with full pane lifecycle management - ITermSessionFactory — Implements
SessionFactoryinterface for iTerm2 tab/pane creation, cleanup, and reconciliation - Auto-detection chain —
dispatch-strategy: autonow prioritizes iTerm2 (if detected + it2 available) before cmux and SDK - Environment detection — Detects iTerm2 via
ITERM_SESSION_IDandTERM_PROGRAMenv vars - Startup reconciliation — Reconciles existing
bm-*tabs/panes from previous runs on watch startup - Badge notifications — iTerm2 badge notifications for errors and blocked gates
- GitHub sync fix — Runtime discovery replaces manual config IDs
- Always-run design retro — Design checkpoint now includes a
SKIP SECTIONdirective that bypasses the Quick-Exit Check, ensuring every design session produces L2/L3 knowledge records regardless of session size
- Live watch mode —
beastmode status --watch/-wturns the one-shot status command into a live-updating terminal dashboard that polls manifest state every 2 seconds - Change highlighting — Rows that transitioned since last poll render with bold/inverse for one cycle, then revert
- Dashboard header — Shows watch loop running indicator (lockfile-based detection) and blocked gate details per epic
- Render refactor — Extracted status table rendering into a reusable pure function, separated render logic from command handler
- Pipeline fixes — Fixed GitHub sync race conditions, feature isolation in dispatch fan-out, YAML parser quote stripping, cmux session feature-specific output detection, and epic-scoped output provenance
- Reconciling factory — Extract state reconciliation and release teardown from
dispatchPhaseintoReconcilingFactory, eliminating duplication between SDK and cmux paths - Cmux dispatch strategy —
watchCommandreadsdispatch-strategyfrom config, wiresCmuxSessionFactorywhen cmux is available with graceful fallback - Output.json scan-all — Stop hook scans ALL artifact .md files with frontmatter instead of only the most recent; uses mtime comparison for efficiency
- Epic-level worktrees —
dispatchPhasealways uses epic-level worktree slug, removing per-feature worktree creation - Implement checkpoint wording — Clarify "Next:" handoff message
- Remove prior-decisions gate — Deleted
[GATE|design.prior-decisions]from design prime phase; design interviews now start without accumulated rules biasing the conversation - Config cleanup — Removed
prior-decisions: autofromgates.designin config.yaml - Step renumbering — Renumbered prime phase steps (4 -> 3, 5 -> 4) for contiguous ordering
- Config example fix — README config.yaml example now shows real gate names; removed deleted
transitions:block - Domain description fix — Corrected domain list to three: Artifacts, Context, Meta
- "What Beastmode Is NOT" section — Added positioning section after "Why?" to clarify scope
- ROADMAP "Now" update — Added CLI orchestrator, cmux integration, GitHub state model, terminal phase states, manifest split, demo recording
- ROADMAP cleanup — Removed shipped/deleted items (phase auto-chaining, visual language spec); updated "Next"/"Later" to reflect current state
- Config example fix — README config.yaml example now shows real gate names; removed deleted
transitions:block - Domain description fix — Corrected domain list to three: Artifacts, Context, Meta
- "What Beastmode Is NOT" section — Added positioning section after "Why?" to clarify scope
- ROADMAP "Now" update — Added CLI orchestrator, cmux integration, GitHub state model, terminal phase states, manifest split, demo recording
- ROADMAP cleanup — Removed shipped/deleted items (phase auto-chaining, visual language spec); updated "Next"/"Later" to reflect current state
- Terminal phases —
doneandcancelledadded as first-class Phase values;shouldAdvancereturns"done"for completed releases,deriveNextActionreturns null for both terminal phases - Type-safe cancel —
cancel()no longer needsas Phasecast;"cancelled"is a valid Phase - GitHub Done sync —
PHASE_TO_BOARD_STATUSmapsdoneto "Done" column; epic issues auto-close on completion - Status filtering —
buildStatusRowshides done/cancelled epics by default;--allflag shows full history - Phase styling —
colorPhasegreen+dim for done, red+dim for cancelled; PHASE_ORDER positions done below active work - Scanner reconciliation — Pre-reconcile worktree outputs in scanner to prevent stale data; preserve manifests after release
- Orchestrator-driven state reconciliation — Watch loop reconciles state by scanning worktree plan files directly instead of parsing output.json; the orchestrator is the sole writer of pipeline state
- Explicit phase advancement map —
NEXT_PHASEconstant map replaces ad-hoc phase transition logic - Plan reconciliation — Scans worktree for feature plan
.mdfiles and enriches the manifest automatically - Artifact copying — Copies plan files from worktree to git-tracked
artifacts/plan/for downstream agents - Dead code removal — Removed
findWorktreeOutputFile,loadWorktreePhaseOutput,shouldAdvance/regressPhaseimports, stale release re-dispatch test, and unused manifest-store exports
- Async dispatch mutex design — PRD for promise-based async mutex serializing concurrent
tick()andrescanEpic()calls in the watch loop, closing a check-then-act race condition - Dispatch mutex plan — Feature plan for global async mutex in
WatchLoopwith acquire/release semantics and wait-queue contention model - Concurrent dispatch test plan — Feature plan for CI test proving mutex serialization: simultaneous
tick()+rescanEpic()asserts exactly onesessionFactory.create()call - Housekeeping — Removed stale
.beastmode-runs.json, added to.gitignore, fixed plugin update scope in release skill
- Pure manifest state machine — Split
manifest.tsinto pure state transitions and newmanifest-store.tsfilesystem boundary; pipeline logic is fully testable without disk IO - Consumer migration — All CLI modules (watch, status, cancel, phase, github-sync, reconcile-startup, post-dispatch) rewritten against new manifest API
- Directory restructure — Historical state artifacts moved from
.beastmode/state/to.beastmode/artifacts/; pipeline manifests live in.beastmode/pipeline/ - Stop hook — Graceful agent termination via
.claude/settings.jsonhook; agents can be stopped mid-phase without corruption - Structured blocked state —
blockedfield upgraded from boolean to{ gate, reason } | nullwith full context - Phase regression —
regressPhase()allows stepping backward on validate failure instead of manual restart - EnrichedManifest type — Replaces legacy
EpicState,FeatureProgress,SkippedManifestwith single canonical type - Skill checkpoint contracts — Implement tasks write
.output.jsonfiles for downstream phase consumption - Release worktree ops —
archive()andmerge()exports restored inworktree.tsfor release teardown - Immutable github-sync — Returns mutations instead of mutating manifest in-place
- Release version deferral — Version bumping moved to post-merge checkpoint on main; worktree no longer touches version files
- Pipeline-only discovery — Scanner reads pipeline/ manifests exclusively; design-file discovery removed, dropping ~118 zombie epics from status output
- Manifest.phase authority — Phase derivation reads
manifest.phasedirectly; missing/invalid phase causes strict reject (manifest skipped) - Shared manifest validation schema — TypeScript validator used by both scanner (read) and reconciler (write); required fields: phase, design, features, lastUpdated
- Single EpicState type — Canonical interface in state-scanner.ts; watch-types.ts duplicate deleted
- Unified blocked field — Single
blocked: booleanreplaces gateBlocked/blockedGate/gateName - Compact status table — Redesigned: Epic | Phase | Features (done/total) | Status with color output
- --verbose flag — Surfaces skipped manifests and validation errors
- Feature status validation — Rejects unknown status values instead of casting any string
- Cost tracking removed — costUsd, aggregateCost, readRunLog removed from scanner and status
- Test suite rewrite — 362 tests, 728 assertions across 20 files
- Merge coordinator deleted — Removed
merge-coordinator.ts(328 lines) and all associated types, functions, and tests; CLI no longer drives git merges - Worktree ops stripped — Removed
merge()andarchive()fromworktree.ts; module reduced to create, enter, ensureWorktree, exists, remove - Watch fan-out simplified — Implement fan-out dispatches all feature sessions to the same epic worktree instead of creating per-feature branches
- Release/cancel teardown — Release calls
removeWorktree()only (no archive, no merge); cancel skips archive step entirely
- Module sketch removal — Removed Execute step 3 (module sketch) from design phase; design stays in problem-space (decisions, gray areas, user stories) without premature structural decomposition
- Deep modules guidance — Moved "deep modules" guidance (from A Philosophy of Software Design) to plan phase's architectural decisions step where it applies with actual codebase context
- Reference cleanup — Removed all module-related references from design SKILL.md, express path, executive summary template, and PRD template
- Checkpoint sync removal — Removed orphaned "Sync GitHub" sections and
@../_shared/github.mdimports from all 5 checkpoint files; skills no longer reference the deleted shared GitHub utility - Status subcommand deletion — Deleted
skills/beastmode/subcommands/status.mdand removed routing/help text from SKILL.md (status moved to CLI in v0.32.0) - Context doc update — DESIGN.md GitHub State Model section updated to reflect skills are no longer GitHub-aware at checkpoint time
- Fork-point tracking — Worktrees fork from local main instead of stale
origin/HEAD; fork-point SHA recorded inWorktreeInfofor audit trail - Main branch resolution —
resolveMainBranch()resolves default branch fromgit symbolic-refwith"main"fallback - Graceful degradation —
forkPointset toundefinedwhenmerge-basefails (unrelated histories, missing branch)
- SessionStrategy interface — Formal strategy pattern (
dispatch(),isComplete(),cleanup()) withSdkStrategyandCmuxStrategyimplementations - CmuxClient — Typed CLI wrapper for the
cmuxbinary with--jsonflag:ping(),newWorkspace(),newSplit(),sendSurface(),closeSurface(),listWorkspaces(),notify() - CmuxStrategy — Workspace-per-epic surface model with
fs.watchcompletion detection via.dispatch-done.jsonmarker files - SessionFactory — Strategy selection based on
cli.dispatch-strategyconfig (sdk | cmux | auto) and runtime cmux availability - Startup reconciliation — Adopts live cmux surfaces, closes dead ones, removes empty workspaces on watch restart
- Surface cleanup — Automatic workspace teardown when epic reaches release
- Universal completion marker —
phaseCommandwrites.dispatch-done.jsonregardless of dispatch method - Desktop notifications — Error and blocked gate notifications via
cmux notify - 220 tests passing — Full test coverage across all new modules
- Manifest structural validation — Scanner validates required fields (design, features, lastUpdated) with correct types; malformed manifests skipped with warning instead of corrupting status output
- Output.json phase detection — Phase derivation uses checkpoint output.json files instead of legacy directory artifact scanning; waterfall: release > validate > implement-done > implement > plan > design
- Watch command cleanup — Removed seedPipelineState (stale manifest re-seeding) and dead scanEpicsInline fallback; watch loop imports state-scanner directly
- Manifest-first scanner — Epic discovery pivots on manifest files instead of design files; status table drops from ~116 noisy rows to ~12 active epics
- Status cleanup — Removed Cost column, readRunLog, formatCost; table simplified to 5 columns (Epic, Phase, Progress, Blocked, Last Activity)
- Watch convergence — Deleted scanEpicsInline() from watch-command.ts; watch loop delegates to canonical state-scanner.scanEpics()
- Interactive runner — All five manual phase commands spawn interactive
claudeCLI sessions with inherited stdio; operators get a live terminal for every phase - Phase dispatch unification —
phaseCommand()simplified from ~270 lines with fan-out logic to uniform interactive dispatch; implement is no longer a special case
- Manifest redesign — Pipeline manifest restructured as pure state: single epic, top-level phase, feature statuses, artifact refs; CLI is sole mutator
- Phase output contract — Skills write structured
.output.jsonfiles tostate/<phase>/at checkpoint; universal schema consumed by CLI to advance pipeline state - GitHub sync engine — Stateless
syncGitHub(manifest, config)runs post-dispatch; one-way mirror from manifest to GitHub with blast-replace labels and warn-and-continue error handling - Dispatch pipeline — CLI reads phase outputs from worktree after dispatch, updates manifest, then syncs GitHub
- Skill cleanup — Deleted
skills/_shared/github.md, removed GitHub sync from 5 checkpoint files and implement prime; skills are now fully GitHub-unaware and manifest-unaware
- CLI worktree lifecycle —
ensureWorktree()creates or reuses a single worktree per epic; all phases share it via cwd injection - Cancel command —
beastmode cancel <slug>archives branch tip, removes worktree, deletes local branch, updates manifest, closes GitHub epic - Skill worktree sweep — Removed worktree references from ~16 skill files; skills receive feature slug as argument, never touch worktree internals
- Justfile and hook deletion — Deleted
Justfile,hooks/worktree-create.sh,skills/_shared/worktree-manager.md; removedWorktreeCreatefromhooks/hooks.json - Implement fan-out flattened — Parallel SDK sessions share the epic worktree directly; no per-feature worktrees or merge-coordinator involvement
- Canonical scanner rewrite — Single
state-scanner.tsreplaces divergentscanEpicsInline()in watch-command.ts; manifests are the sole epic anchor, no design file fallback - Manifest phase field — Top-level
manifest.phase(plan|implement|validate|release|released) replaces marker files and thephasesmap as the single source of truth for epic phase - Merge conflict auto-resolution — Ours-side resolution strips git conflict markers before JSON.parse, preventing silent phase regressions from parallel worktree merges
- Slug collision detection — Warns on stderr when multiple manifests resolve to the same slug; uses newest manifest (last sorted by filename)
- Graceful empty state — Missing or empty pipeline directories return an empty array instead of crashing
- Scanner test suite — Comprehensive unit tests covering every phase transition, conflict resolution, slug collision, empty state, and blocked feature detection (124 tests)
- Dispatch abstraction —
DispatchedSessioninterface withSdkSessionandCmuxSessionimplementations,SessionFactoryfor runtime strategy selection - CmuxSession implementation — Workspace-per-epic surface model, Unix socket JSON-RPC client, lifecycle management (create workspace, create surface, send command, cleanup)
- Validation — 124 tests, 0 failures, clean type check
- Phase command —
beastmode <phase> <slug>replacesbeastmode runandjust <phase>as the sole entry point for phase execution - Worktree lifecycle — CLI owns full lifecycle: create-once at first phase, persist through all phases, squash-merge to main and remove at release
- Manifest module — New
cli/src/manifest.tsreads and manages pipeline manifests from worktrees - Implement fan-out — Per-feature worktrees with
<epic>-<feature>slug; merge-coordinator handles conflict simulation and optimal merge ordering - Release teardown — CLI squash-merges epic branch to main, archives branch tip, removes worktree
- Watch command alignment — Watch loop uses same worktree lifecycle as manual execution, ensuring identical behavior
- cmux integration PRD — Unix socket JSON-RPC client, workspace-per-epic surface model, strategy pattern dispatch abstraction, optional dependency with zero regression risk
- CLI worktree management PRD — Automated worktree creation, branch lifecycle, and cleanup for the beastmode CLI orchestrator
- GitHub CLI migration PRD — Replace raw GraphQL/REST API calls with
ghCLI commands across all shared GitHub utilities - L2 context: cmux-integration — 5 new L2 context docs (communication-protocol, lifecycle, notifications, optionality, surface-model)
- Epics-only board model — Removed
gh project item-addcalls for Feature issues; only Epics added to Projects V2 board - Orchestrator revert — Reverted TypeScript CLI orchestrator (v0.25.0) in favor of Justfile + CronCreate architecture
- Orchestrator PRD — CronCreate-based poll loop, worktree-isolated agents, per-epic teams, manifest convergence
- TypeScript CLI orchestrator —
beastmodeCLI built with Bun and Claude Agent SDK for phase execution and pipeline orchestration (reverted in v0.27.0)
- Epics-only board model — Removed
gh project item-addcalls for Feature issues from plan checkpoint, implement prime, and implement checkpoint; only Epics are added to the Projects V2 board - Existing feature cleanup — Removed all existing Feature issues from the project board via
deleteProjectV2ItemGraphQL mutation (one-time ad-hoc cleanup) - Context doc updates —
github-state-model.mdgains NEVER rule for Feature board-add;DESIGN.mdsummary updated to reflect epics-only model
- Pipeline status field — Setup-github creates a 7-option Pipeline field (Backlog, Design, Plan, Implement, Validate, Release, Done) with color-coded statuses via GraphQL
- Project metadata cache — Setup-github writes
.beastmode/state/github-project.cache.jsonwith project ID, field ID, and option ID map for downstream checkpoint use - Issue backfill — Setup-github adds all existing
type/epicandtype/featureissues to the project with Status derived from their current labels - Shared project sync — New "Add to Project + Set Status" operation in
_shared/github.mdhandles idempotent project item addition and status updates - Checkpoint project sync — All 5 phase checkpoints sync Epic and Feature issues to the project board at every transition
- Cache field name fix — Fixed
pipelineFieldvsstatusFieldnaming inconsistency between cache writer and reader
- Justfile orchestrator — Thin CLI shell with recipes for each phase (
just design,just plan,just implement,just validate,just release). Invokesclaude --worktreeinteractively. - WorktreeCreate hook — Smart branch detection: if
feature/<slug>exists, branch from it; otherwise defaultorigin/HEADbehavior - Skill purification — Removed all worktree creation/entry/assertion logic and phase transition gates from every skill. Skills are now pure content processors.
- Checkpoint handoff — All 5 phase checkpoints print
just <next-phase> <slug>instead of auto-chaining viaSkill()calls - Commit-per-phase — Each phase commits to the feature branch at checkpoint. Release squash-merges to main.
- Config cleanup — Removed
transitionssection from.beastmode/config.yaml
- Manifest-based state tracking — JSON manifest created at design checkpoint, enriched at plan (features array + architectural decisions), updated at implement (feature status transitions). Local authority for feature lifecycle.
- GitHub sync at checkpoints — Optional "Sync GitHub" step in all 5 phase checkpoints creates/advances/closes Epic and Feature issues at checkpoint boundaries. Gated on
github.enabledconfig toggle. - Setup subcommand update —
/beastmode setup-githubnow creates 12 labels (dropped status/review), Projects V2 board, and writesgithub.enabled: trueto config - Warn-and-continue error handling — All GitHub API calls wrapped in try/catch pattern: print warning, skip sync, continue with local state. Workflow never blocked by GitHub.
- Status rewrite —
/beastmode statusreads manifests from worktrees, shows per-feature status (pending/in-progress/blocked/completed) with GitHub issue links when enabled - Config extension — New
github.enabled(default: false) andgithub.project-namekeys in.beastmode/config.yaml - Shared GitHub utility update — Added error handling convention section and set-status-label operation to
_shared/github.md
- PRD-to-features — /plan now decomposes PRDs into independent architectural feature plans (vertical slices) instead of monolithic implementation plans
- Feature manifest — New manifest JSON tracks feature status, architectural decisions, and PRD link across all features in a design
- Task decomposition moves to /implement — Detailed wave/task breakdown now happens at implement time, not plan time, giving /implement full autonomy over execution strategy
- Baseline-aware spec checks — Implement tracks a baseline snapshot at prime to prevent false positives when features share a worktree
- Manifest-gated validation — /validate checks all features are completed via manifest before proceeding
- Two-tier plan approval — New
feature-set-approval(human) andfeature-approval(auto) gates replace the old singleplan-approval - Feature format template — New reference template for architectural feature plans: user stories, what to build, acceptance criteria (no file paths, no code)
- Decision tree interviews — /design now walks every branch of the design tree one question at a time with Claude's recommendation, replacing the old gray-area-first batch loop
- Two-pass flow — Full decision tree walk first, then gray area sweep as a second pass to catch big-picture blind spots the tree missed
- Inline exploration — Codebase reads and research happen during the interview instead of requiring separate triggers in prime
- Module sketch step — New step between interview and PRD writing identifies deep modules (encapsulate complexity behind simple testable interfaces)
- Prior decisions gate — New
design.prior-decisionsgate (default: auto) applies context/meta decisions silently so settled questions don't get re-asked - PRD output format — Design artifacts now follow standardized PRD template: Problem Statement, Solution, User Stories, Implementation Decisions, Testing Decisions, Out of Scope, Further Notes, Deferred Ideas
- New gate set — Replaced 4 old design gates (intent-discussion, approach-selection, section-review, design-approval) with 4 new ones (decision-tree, gray-areas, prior-decisions, prd-approval)
- GitHub state model — Two-level issue hierarchy (Epic > Feature) with label-based state machines, externalizing workflow lifecycle to GitHub Issues and Projects V2
- Shared GitHub utility — Reusable API operations for auth, labels, issues, sub-issues, and Projects V2
- Setup subcommand —
/beastmode setup-githubbootstraps labels, project board, columns, repo linking (idempotent) - Config extension — backlog-to-design and release-to-done transitions, github.project-name setting
- 17-domain skeleton — Skeleton assets expanded from 7 to 17 L2 files covering design (4), plan (4), implement (3), validate (2), release (4), each with matching L3 directories and
.gitkeep - Inventory agent expansion — Detects all 17 domains with specific detection signals for 10 new domains (domain-model, error-handling, workflow, build, quality-gates, validation-patterns, versioning, changelog, deployment, distribution)
- Writer agent retro-format — L2 output switched from prose paragraphs to ALWAYS/NEVER bullets with em-dash rationale; L3 records use Context/Decision/Rationale format matching retro agents
- Init retro phase — New phase spawns retro-context agents (one per phase) after writers complete, processing state/ artifacts and populating meta/ files
- Synthesize agent expansion — Generates all 10 L1 files (5 context + 5 meta) instead of only context; meta L1 format mirrors context L1
- 5-phase init flow — Init restructured from 3 phases (inventory → populate → synthesize) to 5 (skeleton → inventory → write → retro → synthesize)
- Init system redesigned — Replaced 5 narrow init agents + greenfield wizard with 3-phase layered discovery: Inventory (orchestrator reads all project knowledge) → Populate (parallel writers create L2 summaries + L3 records) → Synthesize (generates L1 summaries, rewrites CLAUDE.md)
- Knowledge map architecture — Inventory agent reads 7 source types (CLAUDE.md, README, docs, plans, source structure, git history, config files) and produces structured knowledge map with L2 topic assignments
- L3 record creation — Writer agents create L3 decision records with source attribution from all discoverable sources
- Dynamic topic discovery — Proposes new L2 topics when 3+ items cluster beyond the 6 base topics
- Greenfield mode removed — Empty projects get skeleton only and evolve through /design sessions
- Hook field removed from plugin.json — The
hooksreference to./hooks/hooks.jsoncaused plugin loading issues; removed to restore correct behavior
- First-class init agents — 5 init-* agents made self-contained with
@common-instructions.mdimport; dispatched via registeredbeastmode:init-*types instead of manual prompt assembly - common-instructions.md relocated — Moved from
skills/beastmode/references/discovery-agents/toagents/ - Brownfield dispatch simplified —
init.mdprompt assembly + concatenation replaced with direct registered agent dispatch - Dead reference docs removed — Deleted
gate-check.mdandtransition-check.md(both "Reference Only — NOT @imported")
- Structural HARD-GATE enforcement — Worktree entry/creation sections wrapped in
<HARD-GATE>tags with numbered procedure bullets, replacing verbose prose enforcement - Design worktree placement — Worktree creation moved from design/1-execute to design/3-checkpoint (step 0), matching the phase's actual needs
- Prime-first worktree entry — plan/implement/validate/release enter worktree as step 1 of 0-prime, before announce or context load
- Bare assert pattern — validate/release 1-execute slimmed to one-line worktree-manager assert calls
- Redundant prose removal — Eliminated "MANDATORY", "no exceptions", "lightweight" enforcement language; gate tags handle enforcement
- Context window handling removed — Deleted
context-report.md,visual-language.md, and all phase indicator / context report references from prime and checkpoint phases - Context bridge removed — Deleted
context-bridge-hook.sh,context-bridge-statusline.sh, and PostToolUse hook fromhooks.json - Auto-transitions simplified — All auto transition gates now chain unconditionally via
Skill()calls; no more threshold estimation or low-context fallback - Knowledge hierarchy updated — L1/L2 context docs cleaned of stale threshold, context report, and context bridge references
- Config simplified — Removed
context_thresholdfromconfig.yamlandBEASTMODE.mdphase indicator reference
- Statusline context persistence — New
context-bridge-statusline.shwrites real context window metrics (used%, remaining%, window size) to/tmp/beastmode-{session_id}.jsonper session - PostToolUse context injection — New
context-bridge-hook.shreads persisted metrics and injects raw context data asadditionalContext, replacing estimation with ground truth - Plugin-managed hooks — New
hooks/hooks.jsondeclares SessionStart and PostToolUse hooks with${CLAUDE_PLUGIN_ROOT}portable paths; migrated from project settings to plugin manifest - Settings cleanup — Removed hook declarations from
.claude/settings.local.json(now plugin-managed viaplugin.jsonhooks field)
- Tightened HARD-GATE contract — All 5 skill HARD-GATE blocks now require TodoWrite as the first tool call, making task-runner execution verifiable
- Anti-freestyle enforcement — "Do not output anything else first" prevents agents from skipping the framework and running sessions conversationally
- Anti-rationalization line — "Do not skip this for simple tasks" preempts the "this is too lightweight" excuse
- Init skeleton restructured — Init assets now match evolved reality: BEASTMODE.md, config.yaml, research/, full L3 directory tree with .gitkeep
- PRODUCT.md → context/design/product.md — Root-level product file moved to proper hierarchy position
- State simplified — No more L1 state files; just 5 phase subdirs with .gitkeep
- Meta L2 templates — All 5 phases get process.md + workarounds.md + L3 record directories
- Reality cleanup — research/ moved from state/ to root, obsolete DESIGN.md deleted, meta L2 bullets migrated to ALWAYS/NEVER format
- Hierarchy-aligned retro gates — Four gates match the knowledge hierarchy:
retro.records(L3),retro.context(L2),retro.phase(L1),retro.beastmode(L0) - Bottom-up gate ordering — Gates fire L3 → L0, approving lower levels before higher ones
- Parallel walker spawning — Context and meta walkers launch simultaneously, outputs merged by hierarchy level before gating
- Unified L0 gating —
release.beastmode-md-approvalabsorbed intoretro.beastmode, available to any phase - Explicit L1 gating — L1 summary recomputation and promotions gated through
retro.phaseinstead of being a silent side-effect
- HARD-GATE worktree enforcement —
<HARD-GATE>blocks before worktree steps in all 5 phase files prevent Claude from rationalizing "lightweight" exceptions - L0 worktree rule — BEASTMODE.md Workflow section includes
NEVER skip worktree creationas a prime directive - Assert Worktree anti-rationalization — worktree-manager.md documents the known failure mode where Claude skips worktree creation for "documentation-only" tasks
- ROADMAP sync — Added 8 shipped features to "Now" section; updated Progressive Autonomy Stage 3 to reference native Claude Code team support
- Stale reference fixes — Fixed L0 line count in progressive-hierarchy.md (~80 → ~40), removed
--brownfieldflag from retro-loop.md and ROADMAP.md
- Unified /beastmode command — Single entry point with
init,status,ideassubcommands; flat depth, no flags - Phase-grouped status —
/beastmode statusshows active features grouped by workflow phase with worktree detection - Deferred ideas capture —
/beastmode ideaswalks design docs, reconciles against skill files via semantic matching, marks implemented items with strikethrough - Auto-detect init mode —
initauto-selects greenfield/brownfield based on project state - Auto-install on init —
initinstalls.beastmode/skeleton automatically if missing - Feature name arguments — Phase transitions use feature names (
/plan deferred-ideas) instead of file paths, eliminating cross-session worktree discovery failures - Resolve Artifact — New worktree-manager section for convention-based artifact discovery inside worktrees
- Removed standalone
/statusskill andinstallsubcommand
- Conversational intent flow — Design execute phase collapsed from 8 steps to 5, replacing batch-question mechanics with one-question-at-a-time conversational flow
- On-demand codebase reading — Scout step merged into intent understanding; code is read as questions arise rather than upfront
- Gray area batches of 3 — Users multi-select from 3 most unclear areas with "Claude's Discretion" bucket, loop until satisfied
- Approach-selection gate — New
design.approach-selectiongate separates approach choice from gray area discussion - Scope guardrail — Out-of-scope suggestions captured as deferred ideas, not lost
- Gate rename —
gray-area-selection+gray-area-discussionreplaced byintent-discussion+approach-selection
- Next Step spec — Added "Next Step" visual language element with strict rendering rules (inline code only, single authority)
- Transition gate standardization — All 4 checkpoint files (design, plan, implement, validate) use identical format for next-step output
- Retro guidance ban —
retro.mdexplicitly banned from printing transition guidance - Context report separation —
context-report.mdno longer bleeds transition instructions; only describes context state - Auto mode prefix — Low-context auto transitions use
Start a new session and run:prefix
- Context changes template — Retro context section uses
~/+prefixes with actual content bullets instead of opaque one-liners - Meta review inline — L2 edits shown with literal before/after content instead of count-heavy summary block
- Records template — L3 records use
>>/+prefixes with one-sentence summaries, domain and confidence tags - Promotions template — Shows actual ALWAYS/NEVER rules being promoted with
^prefix and basis
- Centralized feature naming — Single
Derive Feature Namesection in worktree-manager.md ensures worktree directory names and artifact filenames always match 1:1 - Assert Worktree guard — pwd-based check in worktree-manager.md prevents
.beastmode/writes outside a worktree; called by all 5 checkpoint phases, retro, and release pre-merge - Retro agent path injection — Context Walker and Meta Walker receive absolute
worktree_rootpath, eliminating relative-path drift - Release two-phase split — Explicit TRANSITION BOUNDARY separates pre-merge (worktree) from post-merge (main) operations
- Shared worktree operations — All 0-prime phases reference Discover Feature + Enter Worktree from worktree-manager.md instead of inline logic
- L0 bullet conversion — BEASTMODE.md converted to pure bullet format under
##section headers - L1 bullet conversion — All 10 L1 files (5 Context + 5 Meta) stripped of prose paragraphs, rules converted to dash bullets
- L2 bullet conversion — All 27 L2 files converted to bullets with em dash rationale
- Format parity — Meta and Context domains now use identical structure at L1 and L2
- L3 unchanged — Record format preserved; 2 new observations appended during design retro
- Quick-exit removal — Removed subjective quick-exit check from
retro.md; retro always runs, agents handle empty phases gracefully - Release phase normalization — Moved retro from execute (step 8.5) to checkpoint (step 1), consistent with all other phases
- Release checkpoint expansion — Checkpoint now owns: retro, squash merge, commit, tag, marketplace update
- Release execute truncation — Execute ends at step 8 (L0 proposal prep); steps 8.5-12 moved to checkpoint
- Strict rendering spec — Rewrites
visual-language.mdfrom descriptive guide to prescriptive specification with parameterized rules tables - Enforcement warnings — "DO NOT" directives on every visual element (phase indicator, context bar, handoff text)
- Bad/good examples — Common violations catalogued alongside correct output for pattern-matching anchors
- Literal handoff text — Three exact strings, no paraphrasing allowed
- Domain rename —
insights.md→process.md,upstream.md→workarounds.mdacross all 5 phases - Directory rename —
insights/→process/,upstream/→workarounds/for all L3 record directories - L1 reformat — All 5 meta L1 files now use
## Process/## Workaroundssections with inlined rules (mirrors Context L1 format) - L2 reformat — All 10 meta L2 files restructured with
##sections per L3 topic (mirrors Context L2 format) - Retro agent update —
retro-meta.mdupdated to target new domain names and output format - Context/skill vocabulary — Architecture docs and
skills/_shared/retro.mdupdated from insights/upstream to process/workarounds
- Domain count fix — README updated from "four domains" to three (Product merged into Context at v0.14.0)
- Retro terminology abstraction — retro-loop.md and README replaced Learnings/SOPs/Overrides taxonomy with confidence-based findings/procedures language
- Meta path fix — progressive-hierarchy.md meta domain example updated to valid
meta/DESIGN.mdpath - Gate coverage — configurable-gates.md now mentions retro and release gates with config.yaml pointer
- Roadmap sync — Moved auto-chaining, confidence promotion, checkpoint restart to Now; removed stale /compact reference
- Meta hierarchy rebuild — Replaced flat sops.md/overrides.md/learnings.md with L1/L2/L3 progressive knowledge hierarchy mirroring the context walker
- Meta walker rewrite — 6-step algorithm: Session Extraction, L1 Quick-Check, L2 Deep Check, L3 Record Management, Promotion Check, Emit Changes
- Confidence-gated promotion — [LOW] -> [MEDIUM] -> [HIGH] -> L1 Procedure with frequency thresholds
- Two L2 domains — insights (process patterns) + upstream (beastmode feedback), both promotable to L1 Procedures
- Gate consolidation — retro.learnings/retro.sops/retro.overrides replaced by retro.records + retro.promotions
- Full migration — All 5 phases migrated: 17 L3 insight records, 3 L3 upstream records, 4 L1 Procedures
- Agent centralization — Moved 6 agent prompts from skill-local
references/dirs intoagents/with{phase}-{role}.mdnaming - Dead code removal — Deleted
agents/discovery.md, replaced by 5 specialized init agents - Researcher rename —
agents/researcher.md→agents/common-researcher.mdfollowingcommon-{role}convention - Missing reference fix — Plan prime now references
common-researcher.md(was missing entirely) - Import path updates — All 5 affected skill files updated to new agent locations
- Handoff guidance restored — Added missing handoff guidance thresholds to visual-language.md
- Context report tightened — Explicit "single code block" and "after the code block" rendering instructions in context-report.md
- Context report authority cleanup — Eliminated duplication between visual-language.md and context-report.md; each file now has clear ownership boundaries
- Handoff guidance moved — Thresholds and guidance text now owned exclusively by context-report.md
- Rendering contradiction fixed — Removed conflicting "code block" vs "plain text" instructions
- Unified state file naming — All phases now use
YYYY-MM-DD-<feature>.mdconvention - Release file renames — 51 release state files renamed from version-based to feature-based naming
- Validate date fix — 5 validate state files fixed from
YYYYMMDD-toYYYY-MM-DD- - Skill template updates — Release, validate, and retro templates updated to use new naming convention
- State L1 removal — Deleted 5 dead state index files (
state/DESIGN.mdthroughstate/RELEASE.md) that nothing consumed or maintained - Release skill cleanup — Removed state L1 references from L0 proposal generation step
- Visual language spec — New
skills/_shared/visual-language.mddefining█▓░▒block-element vocabulary for progress displays - Phase indicator — Gradient density phase indicator at session start and phase announce showing completed/current/pending phases
- Context bar — Full diagnostic context bar with percentage, bar visualization, and token breakdown at checkpoints
- Prime Directive update — BEASTMODE.md now includes phase indicator display at session start
- Context report update — Switched from prose instructions to visual format with handoff guidance
- Retro loop doc — Dedicated argumentative essay at
docs/retro-loop.mdcovering the self-improving retro mechanism - Configurable gates doc — Dedicated argumentative essay at
docs/configurable-gates.mdcovering progressive autonomy through gates - README integration — All three differentiator sections in "What's Different" now link to their full argument docs
- L0 simplification — BEASTMODE.md cut from 81 to 42 lines; removed knowledge hierarchy tables, domain definitions, write protection table, sub-phase anatomy, slash commands, and configuration explanation
- Persona pointer — persona.md converted from full duplication to pointer referencing L0; unique content (context-awareness detail, skill announces) retained
- Three Domains section —
docs/progressive-hierarchy.mdnow documents Context, Meta, and State as first-class domains - Write Protection section — Promotion path rules (state-only writes, retro gatekeeper) added to the spec
- Workflow section — Five-phase pipeline and sub-phase anatomy documented in the spec
- Level description fixes — L0 line count corrected (~80), L1 dual-domain pattern shown
- L0 Prime Directive — Banner display instruction moved to BEASTMODE.md (autoloaded) with BEFORE-priority wording
- Task-runner cleanup — Removed dead Session Banner Check step; @import indirection never auto-expanded
- Root cause — Prior fixes targeted wording (v0.14.5) and task-runner (v0.14.6), but the real issue was @import non-expansion in HARD-GATE sections
- Remove CONTEXT.md — L0 domain entry for Context removed; routing table duplicated by hierarchy conventions, zero consumers
- Remove STATE.md — L0 domain entry for State removed; kanban unused,
/beastmode:statuscovers status needs
- Task-runner banner check — New Step 1 in task-runner.md checks system context for SessionStart banner and displays it before skill execution
- Prime Directive cleanup — Removed redundant banner display directive from BEASTMODE.md; task-runner is sole owner
- ANSI stripping — Banner display strips escape codes so code blocks render cleanly
- L1/L2/L3 format spec — All context files standardized as rule-lists: dense summaries + numbered NEVER/ALWAYS rules
- L3 context records — New record format (Context/Decision/Rationale/Source) at
context/{phase}/{domain}/{record}.md - Hierarchy table update — L3 = Records, state removed from hierarchy levels in BEASTMODE.md
- @imports removed — All L1/L2 context files use convention-based paths
- Retro format enforcement — Context walker gains Format Enforcement section with
format_violationfinding type - Rule-writing principles — Anti-bloat rules documented in retro agent: absolute directives, concrete rules, bullets over paragraphs
- Write protection rule — Phases write only to L3 state; retro is the sole gatekeeper for L0/L1/L2 promotion
- Release L0 migration — BEASTMODE.md updates flow through L3 proposal + retro promotion instead of direct write
- Retro L0 promotion — New step 10 applies L0 update proposals during release phase retro
- Config gate —
retro.l2-writecontrols L2 context file creation during retro
- L2 gap detection — Context walker gains Gap Detection Protocol with structured
context_gapoutput type, confidence scoring, and accumulation-based promotion thresholds - Gap proposal processing — Retro phase gains step 9 for processing context gap findings: logs gaps to learnings, gates file creation via
retro.l2-write, creates approved L2 files with session-seeded content - New HITL gate —
retro.l2-writegate (default: human) controls L2 file creation approval
- L0 rework — BEASTMODE.md rewritten as agent survival guide: prime directives, persona, workflow, knowledge hierarchy, domains, configuration
- CLAUDE.md simplified — Reduced to single
@.beastmode/BEASTMODE.mdimport - Prime directives consolidated — Moved from CLAUDE.md into BEASTMODE.md where they survive compression
- Internal mechanisms removed — Loading tables, compaction flow, writing guidelines, meta domain structure stripped from L0
- BEASTMODE.md replaces L0 trio — Single system manual (~108 lines) replaces PRODUCT.md, META.md, and .beastmode/CLAUDE.md as the sole autoload
- @imports removed — All L1 files use convention-based paths instead of @imports for L2 navigation
- Three data domains — Product domain merged into Context via
context/design/product.md; four domains simplified to three (State/Context/Meta) - Skill primes updated — All 5 phases load
context/{PHASE}.md+meta/{PHASE}.mdduring prime (BEASTMODE.md autoloaded separately) - Retro agents modernized — Convention-based L2 discovery replaces @import parsing
- Unified gate syntax —
[GATE|id]/[GATE-OPTION|mode]replaces oldGate:format across all 20 gates - Standardized SKILL.md template — task runner as first line in HARD-GATE, no trailing @imports
- Import semantics —
@file= mandatory import,[name](path)= reference link, documented in conventions.md - Worktree detection fix — state file reads now happen after worktree entry in plan/implement primes
- Stale steps removed —
Role Clarity,Load Prior Decisions, prose@references cleaned up
- ROADMAP accuracy audit — moved shipped features (auto-chaining, persona) to Now, clarified partial implementations in Next, added designed-but-unshipped features (dynamic retro walkers), reordered Later by implementation proximity
- Stale references removed — "Progressive Autonomy Stage 2" with incorrect /compact references replaced by accurate "Phase auto-chaining" entry
- README restructure — "What Makes It Different" → expanded "How It Works" + new "What Makes It Work" section
- Mechanics-only prose — Removed pitch framing, replaced with sharp explanations of how beastmode actually works
- Session model documented — Self-contained phase model (checkpoint → clean session → prime) now front and center
- Squash-per-release —
/releaseusesgit merge --squashto collapse feature branches into one commit on main - Archive tagging — Feature branch tips preserved as
archive/feature/<name>tags before deletion - GitHub release style commits —
Release vX.Y.Z — Titlewith categorized Features/Fixes/Artifacts body - Retroactive rewrite script —
scripts/squash-history.shrebuilds main as one commit per version tag
- Configurable retro gates — 4 per-category
Gate:steps (learnings, sops, overrides, context-changes) replace HTML comment annotations - Merge strategy gate — Release merge/PR/keep/discard decision now configurable via
release.merge-strategygate - 5 new config keys — Fine-grained autonomous control for retro and merge phases
- README differentiators section — New "What Makes It Different" section with four substantial inline arguments: progressive hierarchy, compounding knowledge, session-surviving context, design-before-code
- Task-runner gate detection — Gate steps processed by task runner with config.yaml lookup and mode-based substep pruning
- Inline gate steps — 15
## N. Gate:steps replace<!-- HITL-GATE -->annotations +@gate-check.md/@transition-check.mdimports across all skill phases - Two-tier HITL system —
<HARD-GATE>for unconditional constraints,## N. Gate:for configurable human/auto behavior
- Dynamic retro walkers — Replace hardcoded retro agents with structure-walking hierarchy walkers
- Design approval summary — Executive summary shown before design approval gate
- Meta hierarchy — Fractal L2 hierarchy for meta domain with SOPs, overrides, learnings per phase
- Design approval summary — Executive summary (goal, approach, locked decisions, acceptance criteria) shown before the approval gate so users see the full picture before approving
- Progressive hierarchy essay — New
docs/progressive-hierarchy.mdmakes the case for curated hierarchical context over flat embedding retrieval - README rework — "Why This Works" leads with hierarchy differentiator and links to the deep-dive essay
- Agent-facing differentiators — PRODUCT.md gains "Key Differentiators" section so agents understand why the hierarchy exists
- docs/ directory — External-facing documentation home, not imported by agents
- Merge-only release — Replaced
git rebase origin/mainwith merge-only strategy; conflicts resolve once instead of per-commit replay - Fewer version files — Dropped hardcoded version from README.md badge and PRODUCT.md
Current Versionsection; version now lives in 3 files (plugin.json, marketplace.json, session-start.sh)
- CHANGELOG.md — Consolidated 18 releases into 10 scannable entries with subtle personality in version titles
- README changelog link — Credits section now links to the full changelog
- PRODUCT.md release rollup — PRODUCT.md becomes a living document updated at release time with capabilities inventory and current version
- README rewrite — Restructured following high-star GitHub patterns: centered hero, badges, install-first layout, removed credibility killers
- Parallel wave dispatch — /implement spawns agents concurrently within waves when file isolation analysis confirms no overlaps
- File isolation analysis — /plan detects file overlap per wave, auto-resequences conflicts, marks safe waves with
Parallel-safe: true - Sequential fallback — Graceful degradation to sequential dispatch when parallel safety can't be verified
- Implement v2 — Subagent-per-task execution model with wave ordering, deviation rules, and spec checks
- Design v2 — Gray area identification, scope guardrails, role clarity, discussion pacing, and downstream-aware output
- Plan improvements — Wave-based task dependencies, design coverage verification, structured skill handoff
- Lean prime refactor — 0-prime is now read-only; all side effects moved to 1-execute
- Lazy task expansion — Sub-phases expand only when entered, reducing TodoWrite noise by ~60%
- Git branching strategy —
feature/<feature>branches with.beastmode/worktrees/isolation - Phase retro system — Parallel agents review context docs and capture meta learnings at every checkpoint
- Release workflow — Sync with main before version bump, fix version detection, retro before commit
- Progressive L1 docs — Fractal knowledge hierarchy where every level follows the same pattern: summary + section summaries + @imports
.beastmode/CLAUDE.mdmanifest — Pure @imports hub wiring all L0/L1 files into sessions- Retro bottom-up bubble — 3-checkpoint propagates summaries L2 → L1 → L0
- Fix: meta and state loading — Meta learnings and state L1 files now actually loaded into sessions
- Wave-based task dependencies — Plan task format gains
WaveandDepends onfields for parallel execution - Design coverage verification — Plan validation checks every design component maps to a task
- Release version sync — Rebase on main before bumping to eliminate version conflicts on merge
- Release retro fix — Retro moved before commit step so meta learnings get included in the release
- Lazy task expansion — Sub-phases expand only when a phase becomes active, not at parse time
- Child collapse — Completed phase children removed from TodoWrite to save tokens
- Session tracking removal — Eliminated
.beastmode/sessions/directory; worktree lookup via path convention instead
- Shared retro module — Every workflow phase runs a scoped retro with 2 parallel agents at checkpoint
- Context review agent — Compares session artifacts against context docs for accuracy
- Meta learnings agent — Captures phase-specific insights with confidence levels
- Quick-exit heuristic — Skips agent review for trivial sessions
- Feature branches —
feature/<feature>naming replacescycle/<topic>, spanning the entire design-to-release lifecycle - Worktree isolation — Feature work happens in
.beastmode/worktrees/<feature>, shared worktree-manager handles create/enter/merge/cleanup - Natural commits — Removed "Do NOT commit" constraints; phases commit freely, release owns merge
.beastmode/migration — Replaced.agents/with organized four-domain structure: Product, State, Context, Meta- L0/L1/L2 hierarchy — Efficient context loading: L1 always loaded, L2 on-demand
/validateskill — Quality gate before release with tests, lint, type checks- Skill anatomy standard — All workflow skills follow
0-prime → 1-execute → 2-validate → 3-checkpoint - Release skill — Version detection, commit categorization, changelog generation, interactive merge, git tagging
- Task runner — Shared utility enforces step completion via TodoWrite tracking
- Session banner —
hooks/session-start.shprints activation banner with version and random self-deprecating quote - Plugin hooks —
plugin.jsongains hooks configuration with${CLAUDE_PLUGIN_ROOT}path variable