feat(sync): metrics aggregation, worktree isolation, sync-report, and…#474
feat(sync): metrics aggregation, worktree isolation, sync-report, and…#474JustAGhosT merged 1 commit intodevfrom
Conversation
… scaffold policy enhancements
* Add start command: new user entry point with state detection (#387)
* fix(commands): add AskUserQuestion to VALID_TOOLS and /start command
The /start command session got stuck because AskUserQuestion was not
included in the allowed-tools whitelist. This fix addresses three issues:
1. VALID_TOOLS in spec-validator was missing AskUserQuestion, TodoWrite,
Agent, and NotebookEdit — preventing commands from declaring these
Claude Code built-in tools in their allowed-tools.
2. The /start command template now explicitly includes AskUserQuestion
in its allowed-tools frontmatter and instructs the agent to use it
for interactive guided choices (Phase 3).
3. Added /start command spec to commands.yaml with AskUserQuestion as
a declared tool dependency.
Also adds a test case validating all four newly-added tools are accepted
by the spec validator.
https://claude.ai/code/session_01Qh3Xk3jFkVdeRAXTqLvq3M
* fix(commands): remove unrendered Handlebars comment from start.md output
The generated .claude/commands/start.md contained a raw {{! ... }}
Handlebars comment that was not processed by the sync engine. Remove it
so the generated output is clean Markdown.
https://claude.ai/code/session_01Qh3Xk3jFkVdeRAXTqLvq3M
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Add configurable prefix to kits commands (#388)
* feat(sync): add configurable command prefix for generated slash commands
Add `commandPrefix` setting to overlay settings that namespaces all
generated slash commands across platforms:
- Claude Code: subdirectory strategy (kits/check.md → /project:kits:check)
- Cursor/Windsurf/Copilot/Codex: filename prefix (kits-check.md → /kits-check)
- Team commands excluded from prefixing (already namespaced)
Changes:
- Add resolveCommandPath() helper with subdirectory/filename strategies
- Update syncClaudeCommands, syncClaudeSkills, syncCursorCommands,
syncWindsurfCommands, syncCopilotPrompts, syncCodexSkills
- Add commandPrefix to vars from overlay settings
- Add commandPrefixedName to buildCommandVars
- Add 16 unit + integration tests (all pass, 93 existing tests unaffected)
Default is null (no prefix) for full backwards compatibility.
https://claude.ai/code/session_01EBjmVEhi7fP2huAL3SBR6p
* fix(sync): address review findings for command prefix
- Remove unused afterAll import from test file
- Add clarifying comment that non-spec command files are also prefixed
- Add 2 integration tests verifying commandPrefixedName template variable
renders correctly with and without prefix
https://claude.ai/code/session_01EBjmVEhi7fP2huAL3SBR6p
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(ci): CI remediation — package manager, review findings, test stability (#390)
* fix(ci): resolve 7 bugs from project review
- BUG-001: Replace flaky discover test with controlled temp fixture
- BUG-002: Run prettier --write to fix formatting drift
- BUG-003: Add form-template detection skip in issue label validation
- BUG-005: Change claude.yml to self-hosted runner
- BUG-006: Align branch protection required status checks with project.yaml
- BUG-007: Fix command injection in resolve-merge.sh (use grep -F)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: update changelog, add planning registry review findings
- Add changelog entries for Wave 1-3 fixes (Added/Changed/Fixed/Removed)
- Add Project Review Findings section to planning registry (PR-001 to PR-014)
- Update planning docs after sync merge
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(review): add --generate-plans flag to project-review command
Add Phase 2.5 plan generation after project review findings. When
--generate-plans is passed (default: true), scaffold plan files from
critical/high findings into docs/planning/review-findings/.
Also includes sync cleanup of stale cursor/windsurf settings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(sync): regenerate all outputs after project review fixes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cli): dynamic flag loading from commands.yaml + context-aware template hook
- Replace ~200 lines of hardcoded VALID_FLAGS/FLAG_TYPES with loadCommandFlags()
that reads flag definitions from commands.yaml at startup
- CLI_INTERNAL_FLAGS/CLI_INTERNAL_FLAG_TYPES cover commands not in commands.yaml
- Self-validation warns at startup if any flag is missing a type definition
- Update cli.test.mjs to validate CLI_INTERNAL_FLAGS consistency
- Fix scaffold-once orphan bug: carry forward manifest entries for files
skipped by scaffold-once so orphan cleanup does not delete them
- Make protect-templates hook context-aware: skip protection in the
agentkit-forge source repo (detected via package.json name) so
maintainer agents can edit templates; block only in downstream repos
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(sync): add managed-mode script templates for downstream repos
Add 14 script templates (.agentkit/templates/scripts/) with `managed`
scaffold mode so downstream repos receive script updates via three-way
merge while preserving local customizations.
Templates include: create-doc, update-changelog, validate-documentation,
validate-numbering, check-documentation-requirement, sync-issues,
sync-split-pr, setup-agentkit-branch-governance, and resolve-merge
(both .sh and .ps1 variants where applicable).
Parameterized templates use {{defaultBranch}} and branch protection
variables from project.yaml. Engine wired via syncScripts() under
doc-scaffolding feature gate.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(teams): add TeamForge meta-team for agent team creation (cogmesh #130)
Add the TEAMFORGE meta-team (T11) — a structured pipeline for creating,
validating, and deploying new agent team specifications. Adapted from
cogmesh #130 with a simplified 6-agent pipeline:
- input-clarifier: assess requests, extract constraints
- mission-definer: lock team definition (ID, scope, accepts)
- role-architect: design agent roles and dependencies
- prompt-engineer: write agent descriptions and rules
- flow-designer: design team command and integration points
- team-validator: quality gate for spec consistency
Includes /team-forge command with --task flag (create-team, validate-team,
audit-teams, update-team) and planning doc.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(teams): add Strategic Ops team for cross-project coordination
Add the STRATEGIC OPS team (T12) — handles framework governance,
portfolio analysis, adoption strategy, impact assessment, and release
coordination across all repos using AgentKit Forge.
5-agent pipeline:
- portfolio-analyst: inventory repos, detect drift, adoption metrics
- governance-advisor: versioning strategy, breaking change protocols
- adoption-strategist: onboarding, migration paths, rollout plans
- impact-assessor: blast radius analysis for template/spec changes
- release-coordinator: version bumps, sync waves, release comms
Includes /team-strategic-ops command with --task and --scope flags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(agents): add agent/team relationship matrix analysis engine + scripts
Add comprehensive agent/team relationship analysis with 8 cross-reference
matrices and 10 supplementary analyses (orphans, cycles, bottlenecks,
reachability, critical path, notification amplifiers, etc.).
- Fix YAML structure: strategic-ops agents now under own top-level key
- Add explicit agents: lists to forge + strategic-ops teams in teams.yaml
- Add consolidation detection responsibilities to portfolio-analyst
- Create agent-analysis.mjs engine module (loadFullAgentGraph + renderers)
- Wire analyze-agents CLI command with --output/--matrix/--format flags
- Add managed-scaffold script templates (bash + PowerShell)
- Integrate into sync pipeline (auto-regenerates matrix on spec changes)
- Add 33 tests covering all matrices, analyses, and edge cases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: update documentation files and add plan template
- Add trailing newlines to Cursor command documentation files for consistency
- Add new plan template files for project planning
- Improve markdown table formatting in Claude skills documentation
- Remove obsolete .clinerules/testing.md file
- Update various rule files with better formatting and advisory rule alignment
* feat(agents): add spec-compliance-auditor feedback loop + Cost Ops team (T14)
- Add spec-compliance-auditor to operations category (quality team) — closes
the feedback loop between agent specs and actual behavior
- Add Cost Ops team (T14) with 5 agents: model-economist,
token-efficiency-engineer, vendor-arbitrage-analyst, grant-hunter,
cost-ops-monitor
- Add ai-cost-ops rules domain with 6 conventions (model routing, token
budgets, caching, batch APIs, vendor abstraction, credit tracking)
- Add team-cost-ops command with --task, --period, --provider flags
- Update notification chains: data→cost-ops-monitor, infra→model-economist,
retrospective-analyst→spec-compliance-auditor
- Add intake routes: cost-ops, agent-performance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(teams): add implement to cost-ops team accepts list
Resolves agent/team accepts mismatch — token-efficiency-engineer accepts
implement but the team definition only had investigate/review/plan/document.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cost-ops): add multi-provider infra cost ticket to backlog
Add detailed planning ticket for multi-provider infrastructure cost
normalisation, routing, and cost-agent integration. Covers 9 providers
(Anthropic, OpenAI, Google, Mistral, Cohere, self-hosted, Azure, AWS,
GCP) with 3-phase delivery plan and cross-team dependency tracking.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(templates): resolve PR review comments from CodeRabbit
- Fix protect-templates.sh: package name check uses correct
"agentkit-forge-runtime" instead of "agentkit-forge"
- Fix protect-templates.ps1: malformed path (missing separator before
.agentkit) and same package name correction
- Fix update-changelog.ps1: change .mjs to .cjs to match CommonJS
require() syntax used in the inline Node script
- Fix resolve-merge.sh: add fallback for {{defaultBranch}} placeholder
- Fix AGENT_TEAMS.md: resolve three-way merge conflict markers left
by sync engine, keeping user formatting + implement in cost-ops
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cost-ops): add WebSearch/WebFetch tools to cost-ops agents
Enable web research capabilities for cost-ops team:
- Add WebSearch and WebFetch to /team-cost-ops allowed-tools
- Add WebSearch and WebFetch to model-economist, vendor-arbitrage-analyst,
and grant-hunter agent preferred-tools
- Add web intake expansion ticket (P2) for MCP crawler, Puppeteer
integration, automated pricing refresh, and cross-session persistence
- Regenerate sync outputs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cost-ops): add Cost Ops team, agents, and multi-provider cost ticket (#364)
* feat(agents): add spec-compliance-auditor feedback loop + Cost Ops team (T14)
- Add spec-compliance-auditor to operations category (quality team) — closes
the feedback loop between agent specs and actual behavior
- Add Cost Ops team (T14) with 5 agents: model-economist,
token-efficiency-engineer, vendor-arbitrage-analyst, grant-hunter,
cost-ops-monitor
- Add ai-cost-ops rules domain with 6 conventions (model routing, token
budgets, caching, batch APIs, vendor abstraction, credit tracking)
- Add team-cost-ops command with --task, --period, --provider flags
- Update notification chains: data→cost-ops-monitor, infra→model-economist,
retrospective-analyst→spec-compliance-auditor
- Add intake routes: cost-ops, agent-performance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(teams): add implement to cost-ops team accepts list
Resolves agent/team accepts mismatch — token-efficiency-engineer accepts
implement but the team definition only had investigate/review/plan/document.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cost-ops): add multi-provider infra cost ticket to backlog
Add detailed planning ticket for multi-provider infrastructure cost
normalisation, routing, and cost-agent integration. Covers 9 providers
(Anthropic, OpenAI, Google, Mistral, Cohere, self-hosted, Azure, AWS,
GCP) with 3-phase delivery plan and cross-team dependency tracking.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(templates): resolve PR review comments from CodeRabbit
- Fix protect-templates.sh: package name check uses correct
"agentkit-forge-runtime" instead of "agentkit-forge"
- Fix protect-templates.ps1: malformed path (missing separator before
.agentkit) and same package name correction
- Fix update-changelog.ps1: change .mjs to .cjs to match CommonJS
require() syntax used in the inline Node script
- Fix resolve-merge.sh: add fallback for {{defaultBranch}} placeholder
- Fix AGENT_TEAMS.md: resolve three-way merge conflict markers left
by sync engine, keeping user formatting + implement in cost-ops
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cost-ops): add WebSearch/WebFetch tools to cost-ops agents (#365)
Enable web research capabilities for cost-ops team:
- Add WebSearch and WebFetch to /team-cost-ops allowed-tools
- Add WebSearch and WebFetch to model-economist, vendor-arbitrage-analyst,
and grant-hunter agent preferred-tools
- Add web intake expansion ticket (P2) for MCP crawler, Puppeteer
integration, automated pricing refresh, and cross-session persistence
- Regenerate sync outputs
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(teams): address CodeRabbit review findings on strategic-ops PR
- Lazy-load js-yaml in cli.mjs after ensureDependencies() to prevent
crash when node_modules is missing
- Convert YAML frontmatter to PowerShell comment blocks in all 6 PS1
templates to fix invalid PowerShell syntax
- Fix protect-templates hook path: use 3 parent traversals to reach
.agentkit/package.json from hooks directory
- Remove schema-invalid 'phase' field from ai-cost-ops rule domain
- Narrow strategic-ops scope: replace **/* catch-all with specific files
- Add strategic-ops to cost-ops handoff-chain for consistency
- Add Write tool to spec-compliance-auditor, vendor-arbitrage-analyst,
and grant-hunter agents
- Fix glob matching in resolve-merge.sh (use regex instead of broken
sed strip)
- Add merge failure vs conflict detection in resolve-merge.ps1
- Add branch existence check in setup-agentkit-branch-governance scripts
- Add gh CLI preflight check in sync-split-pr.ps1
- Deduplicate branch protection loop when defaultBranch is 'main'
- Fix applies-to glob: docs/planning/cost/** → docs/planning/cost-governance/**
- Fix non-canonical doc paths in intake-agent-proposal.md
- Add changelog entries for new teams, agents, and analysis engine
- Resolve AGENT_TEAMS.md merge conflict (accept narrowed scope)
- Run prettier on all modified files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(templates): add gh auth preflight and changelog divider handling
- sync-split-pr.ps1: add gh auth status check before side effects
- update-changelog.ps1: stop before --- divider when appending entries
Addresses CodeRabbit review comments #7 and #13 on PR #356.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(sync): set executable permission on analyze-agents.sh
Linux CI sync produces +x permissions; align local to match.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(templates): address CodeRabbit review round 3-4 findings
- Fix YAML frontmatter in copilot agent template: use double quotes
for description field to handle apostrophes (CRITICAL)
- Fix protect-templates.sh/ps1 path traversal: correct parent
directory count for .agentkit/package.json source repo detection
- Add $PSNativeCommandUseErrorActionPreference to sync-split-pr.ps1
so native command failures (git, pnpm, gh) are treated as fatal
- Replace try/catch with $LASTEXITCODE check for gh auth status
- Deduplicate branch loop in setup-agentkit-branch-governance.sh
when defaultBranch equals 'main'
- Fix duplicate verification echo lines in governance scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* style(docs): fix prettier formatting on planning documents
Run prettier --write on web-intake-expansion.md and
intake-agent-proposal.md to fix CI formatting check.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(tests): isolate render target gating tests with fresh temp dirs
Tests in the "render target gating" describe block shared a single temp
directory via beforeAll/afterAll. The first test ran --only claude
(generating .claude/ files), and the second ran --only warp expecting no
Claude files — but leftovers from test 1 caused the assertion to fail.
Changing to beforeEach/afterEach gives each test a clean directory.
Closes #377
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(commands): add /start command as new user entry point
Adds a context-aware triage command that detects repository state
(fresh clone, post-discovery, mid-session, uncommitted work) and
guides users to the right command or team for their goal.
Includes team routing table, 4 contextual flows, and decision
guidance for when users don't know which team to use.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* refactor(commands): add Arguments and State Management sections to /start
Addresses TEAMFORGE validation findings:
- Add dedicated Arguments section documenting $ARGUMENTS handling
- Add State Management section (reads/writes inventory)
- Fix frontmatter: remove misleading generated_by field
- Add explicit "manually authored" comment header
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): add /start to spec and template for cross-repo generation
Moves /start from a hand-authored command to a proper spec-driven,
sync-generated command available to any repo that adopts AgentKit Forge.
- Add start command definition to commands.yaml (no feature gate — always on)
- Create start.md template in .agentkit/templates/claude/commands/
- Add /start to CLAUDE.md Quick Reference table template
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after adding /start command
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): make /start team routing dynamic instead of hardcoded
Replace the static team routing table with dynamic discovery:
1. Read AGENT_TEAMS.md (from /discover) at runtime
2. Fall back to .agentkit/spec/teams.yaml
3. Fall back to /team-* command frontmatter
This ensures /start always reflects the actual teams configured
in any repo, rather than a hardcoded list that could go stale.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after dynamic routing change
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add interactive TUI entry point with hybrid UI
Replace static markdown output with an ink-based terminal UI that
combines two modes: a guided conversation flow for first-run users
and a fuzzy-searchable command palette for returning users. A
persistent status bar shows repo state at a glance (branch, phase,
backlog count, working tree status).
- Context detection module mirrors /start Phase 1 signals
- ConversationFlow: branching dialogue tree (choose-your-own-adventure)
- CommandPalette: fuzzy search with context-ranked star recommendations
- StatusBar: tmux-style persistent strip with color-coded segments
- Supports --json flag for scripting/piping
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add test suite, error handling, and refactor for production readiness
- Add vitest test infrastructure with 102 tests across 7 files
- Coverage: 95.58% statements, 90.81% branches, 96.72% functions
- Extract conversation tree to separate config module for testability
- Add error boundary to App component for graceful error display
- Add --help flag with usage documentation
- Add TTY detection with JSON fallback for non-interactive environments
- Add SIGINT/SIGTERM signal handling for clean exit
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore: add coverage to gitignore, include plan and workspace config
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — unused code, git cwd, magic numbers
- Call exit() after command selection so Ink process terminates
- Remove unused ctx prop from Header component
- Fix git commands to use -C flag with root path parameter
- Extract dumpContextJson() helper to deduplicate JSON output logic
- Add comment explaining hardcoded team filter exclusion
- Replace magic numbers with named constants (FUSE_THRESHOLD,
RECOMMENDED_SCORE, MAX_BRANCH_LENGTH)
- Remove unused ink-spinner dependency
- Add test verifying git -C flag passes root correctly
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — security, correctness, test quality
- CRITICAL: Replace execSync shell interpolation with execFileSync to
prevent command injection via root parameter in detect.js
- CRITICAL: Remove phantom --external:ink-spinner from build script and
switch npx to direct esbuild invocation
- HIGH: Fix exit race condition — use useEffect instead of setTimeout
- HIGH: Wire up onSelect callback in ConversationFlow so Guide mode
triggers the result screen in App
- HIGH: Destructure and accept ctx prop in ConversationFlow
- HIGH: Add back-navigation (Escape) in ConversationFlow
- HIGH: Guard against undefined team.focus in commands.js tags
- MEDIUM: Use functional setCursor form to avoid stale closures
- MEDIUM: Key commandIndices Map by string id instead of object identity
- MEDIUM: Improve parseTeams header detection (drop first row approach)
- MEDIUM: Filter completed/done/closed items from backlogCount
- MEDIUM: Extract shared makeCtx test utility across all test files
- MEDIUM: Add null guard to StatusBar truncate helper
- LOW: Validate orchestratorPhase is a number in range 1-5
- LOW: Fix pnpm-workspace.yaml list syntax
- Replace all setTimeout in tests with vi.waitFor deterministic waits
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(engine): add pre-sync commit guard and interactive apply mode
Adds two safety features to the sync pipeline:
1. Pre-sync commit guard: Detects uncommitted changes in protected
directories (.agentkit/engines, spec, overlays) before sync runs.
In TTY mode, prompts to abort, stash, or continue. In non-TTY
mode (CI), prints a warning and proceeds.
2. Interactive apply mode: After rendering, shows a change summary
and prompts: apply all / skip all / prompt each file. Per-file
prompt supports show-diff and apply-all-remaining. Default in
TTY; bypassed with --yes, --no-prompt, or --force.
New module: sync-guard.mjs with 4 exported functions and 7 tests.
New CLI flags: --yes, --no-prompt for non-interactive sync.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(sync): regenerate outputs after branch merges
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(sync): regenerate outputs after merge of new-user-entry-point
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(engine): add configurable package manager and fix review findings
- Add `stack.packageManager` field to project.yaml (pnpm | npm | yarn)
- Derive helper template vars (pmInstall, pmRun, pmExec, pmLockfile, etc.)
- Update CLAUDE.md template and hook/workflow templates to use {{packageManager}}
- Fix sync-guard to exclude .agentkit/spec from protected dirs and add try/catch
- Remove duplicate cost-ops team definition from teams.yaml
- Pin all dependency versions in package.json (remove ^ prefixes)
- Add vitest coverage thresholds (80% statements/branches/functions/lines)
- Fix src/start/ code quality: null guards, exit delay, error boundaries
- Harden consolidate-branches.sh: self-resolution guard, stash restore
- Regenerate all 533 output files via agentkit sync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(engine): add brand color palette variables to sync vars
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(ci): fix test race condition, workspace config, and lockfile
- Fix ConversationFlow test: wait for 'Got it' before asserting hint text
- Add packages field to pnpm-workspace.yaml for proper workspace resolution
- Regenerate lockfile after version pinning (removed ^ prefixes)
- Remove accidental .agentkit/templates/src/ artifacts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(start): add event loop yields to ConversationFlow tests
ink-select-input needs setImmediate yields after a new menu renders
before it can process ENTER keypresses. Without this, the second ENTER
in leaf-selection tests was swallowed, causing intermittent failures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(spec): correct githubSlug to phoenixvc/agentkit-forge (#391)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Add entry point for new framework users (#389)
* feat(commands): add /start command as new user entry point
Adds a context-aware triage command that detects repository state
(fresh clone, post-discovery, mid-session, uncommitted work) and
guides users to the right command or team for their goal.
Includes team routing table, 4 contextual flows, and decision
guidance for when users don't know which team to use.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* refactor(commands): add Arguments and State Management sections to /start
Addresses TEAMFORGE validation findings:
- Add dedicated Arguments section documenting $ARGUMENTS handling
- Add State Management section (reads/writes inventory)
- Fix frontmatter: remove misleading generated_by field
- Add explicit "manually authored" comment header
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): add /start to spec and template for cross-repo generation
Moves /start from a hand-authored command to a proper spec-driven,
sync-generated command available to any repo that adopts AgentKit Forge.
- Add start command definition to commands.yaml (no feature gate — always on)
- Create start.md template in .agentkit/templates/claude/commands/
- Add /start to CLAUDE.md Quick Reference table template
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after adding /start command
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): make /start team routing dynamic instead of hardcoded
Replace the static team routing table with dynamic discovery:
1. Read AGENT_TEAMS.md (from /discover) at runtime
2. Fall back to .agentkit/spec/teams.yaml
3. Fall back to /team-* command frontmatter
This ensures /start always reflects the actual teams configured
in any repo, rather than a hardcoded list that could go stale.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after dynamic routing change
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add interactive TUI entry point with hybrid UI
Replace static markdown output with an ink-based terminal UI that
combines two modes: a guided conversation flow for first-run users
and a fuzzy-searchable command palette for returning users. A
persistent status bar shows repo state at a glance (branch, phase,
backlog count, working tree status).
- Context detection module mirrors /start Phase 1 signals
- ConversationFlow: branching dialogue tree (choose-your-own-adventure)
- CommandPalette: fuzzy search with context-ranked star recommendations
- StatusBar: tmux-style persistent strip with color-coded segments
- Supports --json flag for scripting/piping
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add test suite, error handling, and refactor for production readiness
- Add vitest test infrastructure with 102 tests across 7 files
- Coverage: 95.58% statements, 90.81% branches, 96.72% functions
- Extract conversation tree to separate config module for testability
- Add error boundary to App component for graceful error display
- Add --help flag with usage documentation
- Add TTY detection with JSON fallback for non-interactive environments
- Add SIGINT/SIGTERM signal handling for clean exit
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore: add coverage to gitignore, include plan and workspace config
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — unused code, git cwd, magic numbers
- Call exit() after command selection so Ink process terminates
- Remove unused ctx prop from Header component
- Fix git commands to use -C flag with root path parameter
- Extract dumpContextJson() helper to deduplicate JSON output logic
- Add comment explaining hardcoded team filter exclusion
- Replace magic numbers with named constants (FUSE_THRESHOLD,
RECOMMENDED_SCORE, MAX_BRANCH_LENGTH)
- Remove unused ink-spinner dependency
- Add test verifying git -C flag passes root correctly
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — security, correctness, test quality
- CRITICAL: Replace execSync shell interpolation with execFileSync to
prevent command injection via root parameter in detect.js
- CRITICAL: Remove phantom --external:ink-spinner from build script and
switch npx to direct esbuild invocation
- HIGH: Fix exit race condition — use useEffect instead of setTimeout
- HIGH: Wire up onSelect callback in ConversationFlow so Guide mode
triggers the result screen in App
- HIGH: Destructure and accept ctx prop in ConversationFlow
- HIGH: Add back-navigation (Escape) in ConversationFlow
- HIGH: Guard against undefined team.focus in commands.js tags
- MEDIUM: Use functional setCursor form to avoid stale closures
- MEDIUM: Key commandIndices Map by string id instead of object identity
- MEDIUM: Improve parseTeams header detection (drop first row approach)
- MEDIUM: Filter completed/done/closed items from backlogCount
- MEDIUM: Extract shared makeCtx test utility across all test files
- MEDIUM: Add null guard to StatusBar truncate helper
- LOW: Validate orchestratorPhase is a number in range 1-5
- LOW: Fix pnpm-workspace.yaml list syntax
- Replace all setTimeout in tests with vi.waitFor deterministic waits
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* test(start): add coverage for result screen exit path
Add App-level test that navigates through ConversationFlow to a leaf
node and verifies the result screen text is rendered before exit().
Confirms the synchronous useEffect exit is safe — React commits the
render (Ink captures the frame) before useEffect fires.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore: update generated sync output timestamps
Generated files updated with current sync date from dev merge.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix: caldues heuristics (#398)
* feat: complete revisit of agents (#399) (#400)
* Add start command: new user entry point with state detection (#387)
* fix(commands): add AskUserQuestion to VALID_TOOLS and /start command
The /start command session got stuck because AskUserQuestion was not
included in the allowed-tools whitelist. This fix addresses three issues:
1. VALID_TOOLS in spec-validator was missing AskUserQuestion, TodoWrite,
Agent, and NotebookEdit — preventing commands from declaring these
Claude Code built-in tools in their allowed-tools.
2. The /start command template now explicitly includes AskUserQuestion
in its allowed-tools frontmatter and instructs the agent to use it
for interactive guided choices (Phase 3).
3. Added /start command spec to commands.yaml with AskUserQuestion as
a declared tool dependency.
Also adds a test case validating all four newly-added tools are accepted
by the spec validator.
https://claude.ai/code/session_01Qh3Xk3jFkVdeRAXTqLvq3M
* fix(commands): remove unrendered Handlebars comment from start.md output
The generated .claude/commands/start.md contained a raw {{! ... }}
Handlebars comment that was not processed by the sync engine. Remove it
so the generated output is clean Markdown.
https://claude.ai/code/session_01Qh3Xk3jFkVdeRAXTqLvq3M
---------
* Add configurable prefix to kits commands (#388)
* feat(sync): add configurable command prefix for generated slash commands
Add `commandPrefix` setting to overlay settings that namespaces all
generated slash commands across platforms:
- Claude Code: subdirectory strategy (kits/check.md → /project:kits:check)
- Cursor/Windsurf/Copilot/Codex: filename prefix (kits-check.md → /kits-check)
- Team commands excluded from prefixing (already namespaced)
Changes:
- Add resolveCommandPath() helper with subdirectory/filename strategies
- Update syncClaudeCommands, syncClaudeSkills, syncCursorCommands,
syncWindsurfCommands, syncCopilotPrompts, syncCodexSkills
- Add commandPrefix to vars from overlay settings
- Add commandPrefixedName to buildCommandVars
- Add 16 unit + integration tests (all pass, 93 existing tests unaffected)
Default is null (no prefix) for full backwards compatibility.
https://claude.ai/code/session_01EBjmVEhi7fP2huAL3SBR6p
* fix(sync): address review findings for command prefix
- Remove unused afterAll import from test file
- Add clarifying comment that non-spec command files are also prefixed
- Add 2 integration tests verifying commandPrefixedName template variable
renders correctly with and without prefix
https://claude.ai/code/session_01EBjmVEhi7fP2huAL3SBR6p
---------
* fix(ci): CI remediation — package manager, review findings, test stability (#390)
* fix(ci): resolve 7 bugs from project review
- BUG-001: Replace flaky discover test with controlled temp fixture
- BUG-002: Run prettier --write to fix formatting drift
- BUG-003: Add form-template detection skip in issue label validation
- BUG-005: Change claude.yml to self-hosted runner
- BUG-006: Align branch protection required status checks with project.yaml
- BUG-007: Fix command injection in resolve-merge.sh (use grep -F)
* docs: update changelog, add planning registry review findings
- Add changelog entries for Wave 1-3 fixes (Added/Changed/Fixed/Removed)
- Add Project Review Findings section to planning registry (PR-001 to PR-014)
- Update planning docs after sync merge
* feat(review): add --generate-plans flag to project-review command
Add Phase 2.5 plan generation after project review findings. When
--generate-plans is passed (default: true), scaffold plan files from
critical/high findings into docs/planning/review-findings/.
Also includes sync cleanup of stale cursor/windsurf settings.
* chore(sync): regenerate all outputs after project review fixes
* feat(cli): dynamic flag loading from commands.yaml + context-aware template hook
- Replace ~200 lines of hardcoded VALID_FLAGS/FLAG_TYPES with loadCommandFlags()
that reads flag definitions from commands.yaml at startup
- CLI_INTERNAL_FLAGS/CLI_INTERNAL_FLAG_TYPES cover commands not in commands.yaml
- Self-validation warns at startup if any flag is missing a type definition
- Update cli.test.mjs to validate CLI_INTERNAL_FLAGS consistency
- Fix scaffold-once orphan bug: carry forward manifest entries for files
skipped by scaffold-once so orphan cleanup does not delete them
- Make protect-templates hook context-aware: skip protection in the
agentkit-forge source repo (detected via package.json name) so
maintainer agents can edit templates; block only in downstream repos
* feat(sync): add managed-mode script templates for downstream repos
Add 14 script templates (.agentkit/templates/scripts/) with `managed`
scaffold mode so downstream repos receive script updates via three-way
merge while preserving local customizations.
Templates include: create-doc, update-changelog, validate-documentation,
validate-numbering, check-documentation-requirement, sync-issues,
sync-split-pr, setup-agentkit-branch-governance, and resolve-merge
(both .sh and .ps1 variants where applicable).
Parameterized templates use {{defaultBranch}} and branch protection
variables from project.yaml. Engine wired via syncScripts() under
doc-scaffolding feature gate.
* feat(teams): add TeamForge meta-team for agent team creation (cogmesh #130)
Add the TEAMFORGE meta-team (T11) — a structured pipeline for creating,
validating, and deploying new agent team specifications. Adapted from
cogmesh #130 with a simplified 6-agent pipeline:
- input-clarifier: assess requests, extract constraints
- mission-definer: lock team definition (ID, scope, accepts)
- role-architect: design agent roles and dependencies
- prompt-engineer: write agent descriptions and rules
- flow-designer: design team command and integration points
- team-validator: quality gate for spec consistency
Includes /team-forge command with --task flag (create-team, validate-team,
audit-teams, update-team) and planning doc.
* feat(teams): add Strategic Ops team for cross-project coordination
Add the STRATEGIC OPS team (T12) — handles framework governance,
portfolio analysis, adoption strategy, impact assessment, and release
coordination across all repos using AgentKit Forge.
5-agent pipeline:
- portfolio-analyst: inventory repos, detect drift, adoption metrics
- governance-advisor: versioning strategy, breaking change protocols
- adoption-strategist: onboarding, migration paths, rollout plans
- impact-assessor: blast radius analysis for template/spec changes
- release-coordinator: version bumps, sync waves, release comms
Includes /team-strategic-ops command with --task and --scope flags.
* feat(agents): add agent/team relationship matrix analysis engine + scripts
Add comprehensive agent/team relationship analysis with 8 cross-reference
matrices and 10 supplementary analyses (orphans, cycles, bottlenecks,
reachability, critical path, notification amplifiers, etc.).
- Fix YAML structure: strategic-ops agents now under own top-level key
- Add explicit agents: lists to forge + strategic-ops teams in teams.yaml
- Add consolidation detection responsibilities to portfolio-analyst
- Create agent-analysis.mjs engine module (loadFullAgentGraph + renderers)
- Wire analyze-agents CLI command with --output/--matrix/--format flags
- Add managed-scaffold script templates (bash + PowerShell)
- Integrate into sync pipeline (auto-regenerates matrix on spec changes)
- Add 33 tests covering all matrices, analyses, and edge cases
* chore: update documentation files and add plan template
- Add trailing newlines to Cursor command documentation files for consistency
- Add new plan template files for project planning
- Improve markdown table formatting in Claude skills documentation
- Remove obsolete .clinerules/testing.md file
- Update various rule files with better formatting and advisory rule alignment
* feat(agents): add spec-compliance-auditor feedback loop + Cost Ops team (T14)
- Add spec-compliance-auditor to operations category (quality team) — closes
the feedback loop between agent specs and actual behavior
- Add Cost Ops team (T14) with 5 agents: model-economist,
token-efficiency-engineer, vendor-arbitrage-analyst, grant-hunter,
cost-ops-monitor
- Add ai-cost-ops rules domain with 6 conventions (model routing, token
budgets, caching, batch APIs, vendor abstraction, credit tracking)
- Add team-cost-ops command with --task, --period, --provider flags
- Update notification chains: data→cost-ops-monitor, infra→model-economist,
retrospective-analyst→spec-compliance-auditor
- Add intake routes: cost-ops, agent-performance
* fix(teams): add implement to cost-ops team accepts list
Resolves agent/team accepts mismatch — token-efficiency-engineer accepts
implement but the team definition only had investigate/review/plan/document.
* feat(cost-ops): add multi-provider infra cost ticket to backlog
Add detailed planning ticket for multi-provider infrastructure cost
normalisation, routing, and cost-agent integration. Covers 9 providers
(Anthropic, OpenAI, Google, Mistral, Cohere, self-hosted, Azure, AWS,
GCP) with 3-phase delivery plan and cross-team dependency tracking.
* fix(templates): resolve PR review comments from CodeRabbit
- Fix protect-templates.sh: package name check uses correct
"agentkit-forge-runtime" instead of "agentkit-forge"
- Fix protect-templates.ps1: malformed path (missing separator before
.agentkit) and same package name correction
- Fix update-changelog.ps1: change .mjs to .cjs to match CommonJS
require() syntax used in the inline Node script
- Fix resolve-merge.sh: add fallback for {{defaultBranch}} placeholder
- Fix AGENT_TEAMS.md: resolve three-way merge conflict markers left
by sync engine, keeping user formatting + implement in cost-ops
* feat(cost-ops): add WebSearch/WebFetch tools to cost-ops agents
Enable web research capabilities for cost-ops team:
- Add WebSearch and WebFetch to /team-cost-ops allowed-tools
- Add WebSearch and WebFetch to model-economist, vendor-arbitrage-analyst,
and grant-hunter agent preferred-tools
- Add web intake expansion ticket (P2) for MCP crawler, Puppeteer
integration, automated pricing refresh, and cross-session persistence
- Regenerate sync outputs
* feat(cost-ops): add Cost Ops team, agents, and multi-provider cost ticket (#364)
* feat(agents): add spec-compliance-auditor feedback loop + Cost Ops team (T14)
- Add spec-compliance-auditor to operations category (quality team) — closes
the feedback loop between agent specs and actual behavior
- Add Cost Ops team (T14) with 5 agents: model-economist,
token-efficiency-engineer, vendor-arbitrage-analyst, grant-hunter,
cost-ops-monitor
- Add ai-cost-ops rules domain with 6 conventions (model routing, token
budgets, caching, batch APIs, vendor abstraction, credit tracking)
- Add team-cost-ops command with --task, --period, --provider flags
- Update notification chains: data→cost-ops-monitor, infra→model-economist,
retrospective-analyst→spec-compliance-auditor
- Add intake routes: cost-ops, agent-performance
* fix(teams): add implement to cost-ops team accepts list
Resolves agent/team accepts mismatch — token-efficiency-engineer accepts
implement but the team definition only had investigate/review/plan/document.
* feat(cost-ops): add multi-provider infra cost ticket to backlog
Add detailed planning ticket for multi-provider infrastructure cost
normalisation, routing, and cost-agent integration. Covers 9 providers
(Anthropic, OpenAI, Google, Mistral, Cohere, self-hosted, Azure, AWS,
GCP) with 3-phase delivery plan and cross-team dependency tracking.
* fix(templates): resolve PR review comments from CodeRabbit
- Fix protect-templates.sh: package name check uses correct
"agentkit-forge-runtime" instead of "agentkit-forge"
- Fix protect-templates.ps1: malformed path (missing separator before
.agentkit) and same package name correction
- Fix update-changelog.ps1: change .mjs to .cjs to match CommonJS
require() syntax used in the inline Node script
- Fix resolve-merge.sh: add fallback for {{defaultBranch}} placeholder
- Fix AGENT_TEAMS.md: resolve three-way merge conflict markers left
by sync engine, keeping user formatting + implement in cost-ops
* feat(cost-ops): add WebSearch/WebFetch tools to cost-ops agents (#365)
Enable web research capabilities for cost-ops team:
- Add WebSearch and WebFetch to /team-cost-ops allowed-tools
- Add WebSearch and WebFetch to model-economist, vendor-arbitrage-analyst,
and grant-hunter agent preferred-tools
- Add web intake expansion ticket (P2) for MCP crawler, Puppeteer
integration, automated pricing refresh, and cross-session persistence
- Regenerate sync outputs
---------
* fix(teams): address CodeRabbit review findings on strategic-ops PR
- Lazy-load js-yaml in cli.mjs after ensureDependencies() to prevent
crash when node_modules is missing
- Convert YAML frontmatter to PowerShell comment blocks in all 6 PS1
templates to fix invalid PowerShell syntax
- Fix protect-templates hook path: use 3 parent traversals to reach
.agentkit/package.json from hooks directory
- Remove schema-invalid 'phase' field from ai-cost-ops rule domain
- Narrow strategic-ops scope: replace **/* catch-all with specific files
- Add strategic-ops to cost-ops handoff-chain for consistency
- Add Write tool to spec-compliance-auditor, vendor-arbitrage-analyst,
and grant-hunter agents
- Fix glob matching in resolve-merge.sh (use regex instead of broken
sed strip)
- Add merge failure vs conflict detection in resolve-merge.ps1
- Add branch existence check in setup-agentkit-branch-governance scripts
- Add gh CLI preflight check in sync-split-pr.ps1
- Deduplicate branch protection loop when defaultBranch is 'main'
- Fix applies-to glob: docs/planning/cost/** → docs/planning/cost-governance/**
- Fix non-canonical doc paths in intake-agent-proposal.md
- Add changelog entries for new teams, agents, and analysis engine
- Resolve AGENT_TEAMS.md merge conflict (accept narrowed scope)
- Run prettier on all modified files
* fix(templates): add gh auth preflight and changelog divider handling
- sync-split-pr.ps1: add gh auth status check before side effects
- update-changelog.ps1: stop before --- divider when appending entries
Addresses CodeRabbit review comments #7 and #13 on PR #356.
* fix(sync): set executable permission on analyze-agents.sh
Linux CI sync produces +x permissions; align local to match.
* fix(templates): address CodeRabbit review round 3-4 findings
- Fix YAML frontmatter in copilot agent template: use double quotes
for description field to handle apostrophes (CRITICAL)
- Fix protect-templates.sh/ps1 path traversal: correct parent
directory count for .agentkit/package.json source repo detection
- Add $PSNativeCommandUseErrorActionPreference to sync-split-pr.ps1
so native command failures (git, pnpm, gh) are treated as fatal
- Replace try/catch with $LASTEXITCODE check for gh auth status
- Deduplicate branch loop in setup-agentkit-branch-governance.sh
when defaultBranch equals 'main'
- Fix duplicate verification echo lines in governance scripts
* style(docs): fix prettier formatting on planning documents
Run prettier --write on web-intake-expansion.md and
intake-agent-proposal.md to fix CI formatting check.
* fix(tests): isolate render target gating tests with fresh temp dirs
Tests in the "render target gating" describe block shared a single temp
directory via beforeAll/afterAll. The first test ran --only claude
(generating .claude/ files), and the second ran --only warp expecting no
Claude files — but leftovers from test 1 caused the assertion to fail.
Changing to beforeEach/afterEach gives each test a clean directory.
Closes #377
* feat(commands): add /start command as new user entry point
Adds a context-aware triage command that detects repository state
(fresh clone, post-discovery, mid-session, uncommitted work) and
guides users to the right command or team for their goal.
Includes team routing table, 4 contextual flows, and decision
guidance for when users don't know which team to use.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* refactor(commands): add Arguments and State Management sections to /start
Addresses TEAMFORGE validation findings:
- Add dedicated Arguments section documenting $ARGUMENTS handling
- Add State Management section (reads/writes inventory)
- Fix frontmatter: remove misleading generated_by field
- Add explicit "manually authored" comment header
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): add /start to spec and template for cross-repo generation
Moves /start from a hand-authored command to a proper spec-driven,
sync-generated command available to any repo that adopts AgentKit Forge.
- Add start command definition to commands.yaml (no feature gate — always on)
- Create start.md template in .agentkit/templates/claude/commands/
- Add /start to CLAUDE.md Quick Reference table template
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after adding /start command
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): make /start team routing dynamic instead of hardcoded
Replace the static team routing table with dynamic discovery:
1. Read AGENT_TEAMS.md (from /discover) at runtime
2. Fall back to .agentkit/spec/teams.yaml
3. Fall back to /team-* command frontmatter
This ensures /start always reflects the actual teams configured
in any repo, rather than a hardcoded list that could go stale.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after dynamic routing change
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add interactive TUI entry point with hybrid UI
Replace static markdown output with an ink-based terminal UI that
combines two modes: a guided conversation flow for first-run users
and a fuzzy-searchable command palette for returning users. A
persistent status bar shows repo state at a glance (branch, phase,
backlog count, working tree status).
- Context detection module mirrors /start Phase 1 signals
- ConversationFlow: branching dialogue tree (choose-your-own-adventure)
- CommandPalette: fuzzy search with context-ranked star recommendations
- StatusBar: tmux-style persistent strip with color-coded segments
- Supports --json flag for scripting/piping
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add test suite, error handling, and refactor for production readiness
- Add vitest test infrastructure with 102 tests across 7 files
- Coverage: 95.58% statements, 90.81% branches, 96.72% functions
- Extract conversation tree to separate config module for testability
- Add error boundary to App component for graceful error display
- Add --help flag with usage documentation
- Add TTY detection with JSON fallback for non-interactive environments
- Add SIGINT/SIGTERM signal handling for clean exit
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore: add coverage to gitignore, include plan and workspace config
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — unused code, git cwd, magic numbers
- Call exit() after command selection so Ink process terminates
- Remove unused ctx prop from Header component
- Fix git commands to use -C flag with root path parameter
- Extract dumpContextJson() helper to deduplicate JSON output logic
- Add comment explaining hardcoded team filter exclusion
- Replace magic numbers with named constants (FUSE_THRESHOLD,
RECOMMENDED_SCORE, MAX_BRANCH_LENGTH)
- Remove unused ink-spinner dependency
- Add test verifying git -C flag passes root correctly
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — security, correctness, test quality
- CRITICAL: Replace execSync shell interpolation with execFileSync to
prevent command injection via root parameter in detect.js
- CRITICAL: Remove phantom --external:ink-spinner from build script and
switch npx to direct esbuild invocation
- HIGH: Fix exit race condition — use useEffect instead of setTimeout
- HIGH: Wire up onSelect callback in ConversationFlow so Guide mode
triggers the result screen in App
- HIGH: Destructure and accept ctx prop in ConversationFlow
- HIGH: Add back-navigation (Escape) in ConversationFlow
- HIGH: Guard against undefined team.focus in commands.js tags
- MEDIUM: Use functional setCursor form to avoid stale closures
- MEDIUM: Key commandIndices Map by string id instead of object identity
- MEDIUM: Improve parseTeams header detection (drop first row approach)
- MEDIUM: Filter completed/done/closed items from backlogCount
- MEDIUM: Extract shared makeCtx test utility across all test files
- MEDIUM: Add null guard to StatusBar truncate helper
- LOW: Validate orchestratorPhase is a number in range 1-5
- LOW: Fix pnpm-workspace.yaml list syntax
- Replace all setTimeout in tests with vi.waitFor deterministic waits
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(engine): add pre-sync commit guard and interactive apply mode
Adds two safety features to the sync pipeline:
1. Pre-sync commit guard: Detects uncommitted changes in protected
directories (.agentkit/engines, spec, overlays) before sync runs.
In TTY mode, prompts to abort, stash, or continue. In non-TTY
mode (CI), prints a warning and proceeds.
2. Interactive apply mode: After rendering, shows a change summary
and prompts: apply all / skip all / prompt each file. Per-file
prompt supports show-diff and apply-all-remaining. Default in
TTY; bypassed with --yes, --no-prompt, or --force.
New module: sync-guard.mjs with 4 exported functions and 7 tests.
New CLI flags: --yes, --no-prompt for non-interactive sync.
* chore(sync): regenerate outputs after branch merges
* chore(sync): regenerate outputs after merge of new-user-entry-point
* feat(engine): add configurable package manager and fix review findings
- Add `stack.packageManager` field to project.yaml (pnpm | npm | yarn)
- Derive helper template vars (pmInstall, pmRun, pmExec, pmLockfile, etc.)
- Update CLAUDE.md template and hook/workflow templates to use {{packageManager}}
- Fix sync-guard to exclude .agentkit/spec from protected dirs and add try/catch
- Remove duplicate cost-ops team definition from teams.yaml
- Pin all dependency versions in package.json (remove ^ prefixes)
- Add vitest coverage thresholds (80% statements/branches/functions/lines)
- Fix src/start/ code quality: null guards, exit delay, error boundaries
- Harden consolidate-branches.sh: self-resolution guard, stash restore
- Regenerate all 533 output files via agentkit sync
* chore(engine): add brand color palette variables to sync vars
* fix(ci): fix test race condition, workspace config, and lockfile
- Fix ConversationFlow test: wait for 'Got it' before asserting hint text
- Add packages field to pnpm-workspace.yaml for proper workspace resolution
- Regenerate lockfile after version pinning (removed ^ prefixes)
- Remove accidental .agentkit/templates/src/ artifacts
* fix(start): add event loop yields to ConversationFlow tests
ink-select-input needs setImmediate yields after a new menu renders
before it can process ENTER keypresses. Without this, the second ENTER
in leaf-selection tests was swallowed, causing intermittent failures.
---------
* fix(spec): correct githubSlug to phoenixvc/agentkit-forge (#391)
* Add entry point for new framework users (#389)
* feat(commands): add /start command as new user entry point
Adds a context-aware triage command that detects repository state
(fresh clone, post-discovery, mid-session, uncommitted work) and
guides users to the right command or team for their goal.
Includes team routing table, 4 contextual flows, and decision
guidance for when users don't know which team to use.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* refactor(commands): add Arguments and State Management sections to /start
Addresses TEAMFORGE validation findings:
- Add dedicated Arguments section documenting $ARGUMENTS handling
- Add State Management section (reads/writes inventory)
- Fix frontmatter: remove misleading generated_by field
- Add explicit "manually authored" comment header
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): add /start to spec and template for cross-repo generation
Moves /start from a hand-authored command to a proper spec-driven,
sync-generated command available to any repo that adopts AgentKit Forge.
- Add start command definition to commands.yaml (no feature gate — always on)
- Create start.md template in .agentkit/templates/claude/commands/
- Add /start to CLAUDE.md Quick Reference table template
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after adding /start command
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(commands): make /start team routing dynamic instead of hardcoded
Replace the static team routing table with dynamic discovery:
1. Read AGENT_TEAMS.md (from /discover) at runtime
2. Fall back to .agentkit/spec/teams.yaml
3. Fall back to /team-* command frontmatter
This ensures /start always reflects the actual teams configured
in any repo, rather than a hardcoded list that could go stale.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore(sync): regenerate outputs after dynamic routing change
Generated by: pnpm -C .agentkit agentkit:sync
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add interactive TUI entry point with hybrid UI
Replace static markdown output with an ink-based terminal UI that
combines two modes: a guided conversation flow for first-run users
and a fuzzy-searchable command palette for returning users. A
persistent status bar shows repo state at a glance (branch, phase,
backlog count, working tree status).
- Context detection module mirrors /start Phase 1 signals
- ConversationFlow: branching dialogue tree (choose-your-own-adventure)
- CommandPalette: fuzzy search with context-ranked star recommendations
- StatusBar: tmux-style persistent strip with color-coded segments
- Supports --json flag for scripting/piping
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* feat(start): add test suite, error handling, and refactor for production readiness
- Add vitest test infrastructure with 102 tests across 7 files
- Coverage: 95.58% statements, 90.81% branches, 96.72% functions
- Extract conversation tree to separate config module for testability
- Add error boundary to App component for graceful error display
- Add --help flag with usage documentation
- Add TTY detection with JSON fallback for non-interactive environments
- Add SIGINT/SIGTERM signal handling for clean exit
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore: add coverage to gitignore, include plan and workspace config
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — unused code, git cwd, magic numbers
- Call exit() after command selection so Ink process terminates
- Remove unused ctx prop from Header component
- Fix git commands to use -C flag with root path parameter
- Extract dumpContextJson() helper to deduplicate JSON output logic
- Add comment explaining hardcoded team filter exclusion
- Replace magic numbers with named constants (FUSE_THRESHOLD,
RECOMMENDED_SCORE, MAX_BRANCH_LENGTH)
- Remove unused ink-spinner dependency
- Add test verifying git -C flag passes root correctly
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* fix(start): address review findings — security, correctness, test quality
- CRITICAL: Replace execSync shell interpolation with execFileSync to
prevent command injection via root parameter in detect.js
- CRITICAL: Remove phantom --external:ink-spinner from build script and
switch npx to direct esbuild invocation
- HIGH: Fix exit race condition — use useEffect instead of setTimeout
- HIGH: Wire up onSelect callback in ConversationFlow so Guide mode
triggers the result screen in App
- HIGH: Destructure and accept ctx prop in ConversationFlow
- HIGH: Add back-navigation (Escape) in ConversationFlow
- HIGH: Guard against undefined team.focus in commands.js tags
- MEDIUM: Use functional setCursor form to avoid stale closures
- MEDIUM: Key commandIndices Map by string id instead of object identity
- MEDIUM: Improve parseTeams header detection (drop first row approach)
- MEDIUM: Filter completed/done/closed items from backlogCount
- MEDIUM: Extract shared makeCtx test utility across all test files
- MEDIUM: Add null guard to StatusBar truncate helper
- LOW: Validate orchestratorPhase is a number in range 1-5
- LOW: Fix pnpm-workspace.yaml list syntax
- Replace all setTimeout in tests with vi.waitFor deterministic waits
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* test(start): add coverage for result screen exit path
Add App-level test that navigates through ConversationFlow to a leaf
node and verifies the result screen text is rendered before exit().
Confirms the synchronous useEffect exit is safe — React commits the
render (Ink captures the frame) before useEffect fires.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
* chore: update generated sync output timestamps
Generated files updated with current sync date from dev merge.
https://claude.ai/code/session_01Gy1HvvywVe6Z2iFJ2bHYCW
---------
* fix: caldues heuristics (#398)
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(quality): resolve all lint and format errors
- Fix Prettier formatting across engine src and start components
- Resolve 381 markdown lint errors (MD040, MD024, MD036, MD029, MD022, MD001)
- Add markdownlint config rules for intentional doc patterns
- Add .claude/worktrees to prettierignore to exclude external branches
- Enable markdownlint MD024/MD026 for duplicate headings and trailing colons
All quality checks now pass: Prettier (0 errors), Markdown lint (0 errors), Tests (111/111), Build (28.9kb)
* I'll update the last_updated field in all the files from '2026-03-12' to '2026-03-13'. This appears to be a routine timestamp update across all the AgentKit Forge generated files.
* docs: add AgentKit Forge sync feedback
Add detailed feedback on AgentKit Forge v3.1.0 integration, focusing on:
- Windows line-ending issues and multi-editor sync behavior
- Documentation scaffold-once limitations and override challenges
- Unresolved placeholder warnings lacking diagnostics
- Windows-specific pnpm execution problems
* docs: update CLAUDE.md with repository-specific editing guidelines
Clarified that modifications to `.agentkit` files are permitted in the agentkit-forge repository, while upstream directories remain protected. This ensures users understand the editing boundaries for project configuration and template files.
* docs(claude): allow .agentkit edits in this repo (NB for framework dev)
Made-with: Cursor
* chore(sync): regenerate outputs after agentkit:sync
Made-with: Cursor
* Fix/generated files and conflict markers (#427)
* fix(infra): resolve container app fqdn attribute and format code
* chore(sync): update AGENT_BACKLOG.md and other files for task management
- Enhanced AGENT_BACKLOG.md with detailed task scopes for CI pipeline configuration and test framework setup.
- Added new docker-compose.yml for local/staging validation of the framework.
- Updated CONTRIBUTING.md to include documentation hub link in the Discovery phase.
- Introduced README.md files in db, infra, and migrations directories to clarify their purpose for adopters.
- Added API conventions documentation to guide adopters on structuring their APIs.
- Created implementation plan for state management improvements and added relevant tests.
- Regenerated outputs across various files to reflect recent changes and ensure consistency.
* chore(ci): reduce CodeQL to weekly + manual only (#430)
* chore(ci): reduce CodeQL to weekly schedule + manual trigger
Removes push and pull_request triggers to reduce GitHub Actions costs.
Scans were running on every PR including Renovate dependency updates.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* docs(architecture): add tool-neutral agent hub findings, ADR-10, and adoption roadmap (#428)
* docs(architecture): add tool-neutral agent hub findings, ADR-10, and adoption roadmap
Comparative analysis of agentkit-forge sync engine vs Mystira.workspace
hand-authored .agents/ pattern. Documents 5-phase adoption roadmap to
converge both approaches: .agents/ as sync target, reflective guards,
.readme.yaml generation, cross-session traces, and schema formalisation.
Includes regenerated sync output (updated timestamps across all tools).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs(architecture): add competi…
|
Mention Blocks like a regular teammate with your question or request: @blocks review this pull request Run |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Important Review skippedToo many files! This PR contains 300 files, which is 150 over the limit of 150. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (300)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Retort Source Change DetectedThis PR modifies files in the Retort source directories:
These are the upstream source-of-truth for all generated AI tool configs. Review checklist
|
… scaffold policy enhancements
Describe how you tested these changes:
Validation Commands
# Commands to verify this change works correctlyChecklist
npm test/cargo test/ equivalent)Documentation
Change Impact
Documentation Checklist (required for High impact)
./scripts/create-doc.sh <type> "<title>" <pr>[bracketed]placeholder sections filled indocs/history/subdirectory.index.jsonCHANGELOG.mdupdated (auto-updated bycreate-doc.sh, or run./scripts/update-changelog.sh)