Commit Graph

92 Commits

  • feat: add PRP workflow commands adapted from PRPs-agentic-eng (#848)
    * feat: add PRP workflow commands adapted from PRPs-agentic-eng
    
    Add 5 new PRP workflow commands and extend 2 existing commands:
    
    New commands:
    - prp-prd.md: Interactive PRD generator with 8 phases
    - prp-plan.md: Deep implementation planning with codebase analysis
    - prp-implement.md: Plan executor with rigorous validation loops
    - prp-commit.md: Quick commit with natural language file targeting
    - prp-pr.md: GitHub PR creation from current branch
    
    Extended commands:
    - code-review.md: Added GitHub PR review mode alongside local review
    - plan.md: Added cross-reference to /prp-plan for deeper planning
    
    Adapted from PRPs-agentic-eng by Wirasm. Sub-agents remapped to
    inline Claude instructions. ECC conventions applied throughout
    (YAML frontmatter, Phase headings, tables, no XML tags).
    
    Artifacts stored in .claude/PRPs/{prds,plans,reports,reviews}/.
    
    * fix: address PR #848 review feedback
    
    - Remove external URLs from all 6 command files (keep attribution text)
    - Quote $ARGUMENTS in prp-implement.md to handle paths with spaces
    - Fix empty git add expansion in prp-commit.md (use xargs -r)
    - Rewrite sub-agent language in prp-prd.md as direct instructions
    - Fix code-review.md: add full-file fetch for PR reviews, replace
      || fallback chains with project-type detection, use proper GitHub
      API for inline review comments
    - Fix nested backticks in prp-plan.md Plan Template (use 4-backtick fence)
    - Clarify $ARGUMENTS parsing in prp-pr.md for base branch + flags
    - Fix fragile integration test pattern in prp-implement.md (proper
      PID tracking, wait-for-ready loop, clean shutdown)
    
    * fix: address second-pass review feedback on PR #848
    
    - Add required 'side' field to GitHub review comments API call (code-review.md)
    - Replace GNU-only xargs -r with portable alternative (prp-commit.md)
    - Add failure check after server readiness timeout (prp-implement.md)
    - Fix unsafe word-splitting in file-fetch loop using read -r (code-review.md)
    - Make git reset pathspec tolerant of zero matches (prp-commit.md)
    - Quote PRD file path in cat command (prp-plan.md)
    - Fix plan filename placeholder inconsistency (prp-plan.md)
    - Add PR template directory scan before fixed-path fallbacks (prp-pr.md)
  • feat: add GAN-style generator-evaluator harness (#1029)
    Implements Anthropic's March 2026 harness design pattern — a multi-agent
    architecture that separates generation from evaluation, creating an
    adversarial feedback loop that produces production-quality applications.
    
    Components:
    - 3 agent definitions (planner, generator, evaluator)
    - 1 skill with full documentation (skills/gan-style-harness/)
    - 2 commands (gan-build for full apps, gan-design for frontend)
    - 1 shell orchestrator (scripts/gan-harness.sh)
    - Examples and configuration reference
    
    Based on: https://www.anthropic.com/engineering/harness-design-long-running-apps
    
    Co-authored-by: Hao Chen <haochen806@gmail.com>
  • feat(commands): add santa-loop adversarial review command (#1052)
    * feat(commands): add santa-loop adversarial review command
    
    Adds /santa-loop, a convergence loop command built on the santa-method
    skill. Two independent reviewers (Claude Opus + external model) must
    both return NICE before code ships. Supports Codex CLI (GPT-5.4),
    Gemini CLI (3.1 Pro), or Claude-only fallback. Fixes are committed
    per round and the loop repeats until convergence or escalation.
    
    * fix: address all PR review findings for santa-loop command
    
    - Add YAML frontmatter with description (coderabbit)
    - Add Purpose, Usage, Output sections per CONTRIBUTING.md template (coderabbit)
    - Fix literal <prompt> placeholder in Gemini CLI invocation (greptile P1)
    - Use mktemp for unique temp file instead of fixed /tmp path (greptile P1, cubic P1)
    - Use --sandbox read-only instead of --full-auto to prevent repo mutation (cubic P1)
    - Use git push -u origin HEAD instead of bare git push (greptile P2, cubic P1)
    - Clarify verdict protocol: reviewers return PASS/FAIL, gate maps to NICE/NAUGHTY (greptile P2, coderabbit)
    - Specify parallel execution mechanism via Agent tool (coderabbit nitpick)
    - Add escalation format for max-iterations case (coderabbit nitpick)
    - Fix model IDs: gpt-5.4 for Codex, gemini-2.5-pro for Gemini
  • fix: audit consumer projects from cwd (#1014)
    * fix: audit consumer projects from cwd
    
    * fix: unblock unicode safety CI lint
    
    * fix: unblock shared CI regressions
    
    * test: isolate package-manager dependent hooks and formatter tests
  • fix: unblock unicode safety CI lint (#1017)
    * fix: unblock unicode safety CI lint
    
    * fix: unblock shared CI regressions
  • fix(commands): replace py_compile with compileall in build-fix (#804)
    py_compile requires explicit filenames and exits with status 2 when
    invoked without them. compileall -q . recursively validates Python
    syntax across the entire project, which is what the build-fix
    command actually needs.
    
    Fixes #759
  • feat: pending instinct TTL pruning and /prune command (#725)
    * feat: add pending instinct TTL pruning and /prune command
    
    Pending instincts generated by the observer accumulate indefinitely
    with no cleanup mechanism. This adds lifecycle management:
    
    - `instinct-cli.py prune` — delete pending instincts older than 30 days
      (configurable via --max-age). Supports --dry-run and --quiet flags.
    - Enhanced `status` command — shows pending count, warns at 5+,
      highlights instincts expiring within 7 days.
    - `observer-loop.sh` — runs prune before each analysis cycle.
    - `/prune` slash command — user-facing command for manual pruning.
    
    Design rationale: council consensus (4/4) rejected auto-promote in
    favor of TTL-based garbage collection. Frequency of observation does
    not establish correctness. Unreviewed pending instincts auto-delete
    after 30 days; if the pattern is real, the observer will regenerate it.
    
    Generated with [Claude Code](https://claude.ai/code)
    via [Happy](https://happy.engineering)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    Co-Authored-By: Happy <yesreply@happy.engineering>
    
    * fix: remove duplicate functions, broaden extension filter, fix prune output
    
    - Remove duplicate _collect_pending_dirs and _parse_created_date defs
    - Use ALLOWED_INSTINCT_EXTENSIONS (.md/.yaml/.yml) instead of .md-only
    - Track actually-deleted items separately from expired for accurate output
    - Update README.md and AGENTS.md command counts: 59 → 60
    
    Generated with [Claude Code](https://claude.ai/code)
    via [Happy](https://happy.engineering)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    Co-Authored-By: Happy <yesreply@happy.engineering>
    
    * fix: address Copilot and CodeRabbit review findings
    
    - Use is_dir() instead of exists() for pending path checks
    - Change > to >= for --max-age boundary (--max-age 0 now prunes all)
    - Use CLV2_PYTHON_CMD env var in observer-loop.sh prune call
    - Remove unused source_dupes variable
    - Remove extraneous f-string prefix on static string
    
    Generated with [Claude Code](https://claude.ai/code)
    via [Happy](https://happy.engineering)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    Co-Authored-By: Happy <yesreply@happy.engineering>
    
    * fix: update AGENTS.md project structure command count 59 → 60
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * fix: address cubic and coderabbit review findings
    
    - Fix status early return skipping pending instinct warnings (cubic #1)
    - Exclude already-expired items from expiring-soon filter (cubic #2)
    - Warn on unparseable pending instinct age instead of silent skip (cubic #4)
    - Log prune failures to observer.log instead of silencing (cubic #5)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * fix: YAML single-quote unescaping, f-string cleanup, add /prune to README
    
    - Fix single-quoted YAML unescaping: use '' doubling (YAML spec) not
      backslash escaping which only applies to double-quoted strings (greptile P1)
    - Remove extraneous f-string prefix on static string (coderabbit)
    - Add /prune to README command catalog and file tree (cubic)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude <noreply@anthropic.com>
    Co-authored-by: Happy <yesreply@happy.engineering>
  • feat(skills): add rules-distill skill (rebased #561) (#678)
    * feat(skills): add rules-distill — extract cross-cutting principles from skills into rules
    
    Applies the skill-stocktake pattern to rules maintenance:
    scan skills → extract shared principles → propose rule changes.
    
    Key design decisions:
    - Deterministic collection (scan scripts) + LLM judgment (cross-read & verdict)
    - 6 verdict types: Append, Revise, New Section, New File, Already Covered, Too Specific
    - Anti-abstraction safeguard: 2+ skills evidence, actionable behavior test, violation risk
    - Rules full text passed to LLM (no grep pre-filter) for accurate matching
    - Never modifies rules automatically — always requires user approval
    
    * fix(skills): address review feedback for rules-distill
    
    Fixes raised by CodeRabbit, Greptile, and cubic:
    
    - Add Prerequisites section documenting skill-stocktake dependency
    - Add fallback command when skill-stocktake is not installed
    - Fix shell quoting: add IFS= and -r to while-read loops
    - Replace hardcoded paths with env var placeholders ($CLAUDE_RULES_DIR, $SKILL_STOCKTAKE_DIR)
    - Add json language identifier to code blocks
    - Add "How It Works" parent heading for Phase 1/2/3
    - Add "Example" section with end-to-end run output
    - Add revision.reason/before/after fields to output schema for Revise verdict
    - Document timestamp format (date -u +%Y-%m-%dT%H:%M:%SZ)
    - Document candidate-id format (kebab-case from principle)
    - Use concrete examples in results.json schema
    
    * fix(skills): remove skill-stocktake dependency, add self-contained scripts
    
    Address P1 review feedback:
    - Add scan-skills.sh and scan-rules.sh directly in rules-distill/scripts/
      (no external dependency on skill-stocktake)
    - Remove Prerequisites section (no longer needed)
    - Add cross-batch merge step to prevent 2+ skills requirement
      from being silently broken across batch boundaries
    - Fix nested triple-backtick fences (use quadruple backticks)
    - Remove head -100 cap (silent truncation)
    - Rename "When to Activate" → "When to Use" (ECC standard)
    - Remove unnecessary env var placeholders (SKILL.md is a prompt, not a script)
    
    * fix: update skill/command counts in README.md and AGENTS.md
    
    rules-distill added 1 skill + 1 command:
    - skills: 108 → 109
    - commands: 57 → 58
    
    Updates all count references to pass CI catalog validation.
    
    * fix(skills): address Servitor review feedback for rules-distill
    
    1. Rename SKILL_STOCKTAKE_* env vars to RULES_DISTILL_* for consistency
    2. Remove unnecessary observation counting (use_7d/use_30d) from scan-skills.sh
    3. Fix header comment: scan.sh → scan-skills.sh
    4. Use jq for JSON construction in scan-rules.sh to properly escape
       headings containing special characters (", \)
    
    * fix(skills): address CodeRabbit review — portability and scan scope
    
    1. scan-rules.sh: use jq for error JSON output (proper escaping)
    2. scan-rules.sh: replace GNU-only sort -z with portable sort (BSD compat)
    3. scan-rules.sh: fix pipefail crash on files without H2 headings
    4. scan-skills.sh: scan only SKILL.md files (skip learned/*.md and
       auxiliary docs that lack frontmatter)
    5. scan-skills.sh: add portable get_mtime helper (GNU stat/date
       fallback to BSD stat/date)
    
    * fix: sync catalog counts with filesystem (27 agents, 114 skills, 59 commands)
    
    ---------
    
    Co-authored-by: Tatsuya Shimomoto <shimo4228@gmail.com>
  • fix: auto-detect ECC root from plugin cache when CLAUDE_PLUGIN_ROOT is unset (#547) (#691)
    When ECC is installed as a Claude Code plugin via the marketplace,
    scripts live in the plugin cache (~/.claude/plugins/cache/...) but
    commands fallback to ~/.claude/ which doesn't have the scripts.
    
    Add resolve-ecc-root.js with a 3-step fallback chain:
      1. CLAUDE_PLUGIN_ROOT env var (existing)
      2. Standard install at ~/.claude/ (existing)
      3. NEW: auto-scan the plugin cache directory
    
    Update sessions.md and skill-health.md commands to use the new
    inline resolver. Includes 15 tests covering all fallback paths
    including env var priority, standard install, cache discovery,
    and the compact INLINE_RESOLVE used in command .md files.
  • feat(commands): add /context-budget optimizer command (#554)
    * feat(commands): add /context-budget optimizer command
    
    Adds a command that audits context window token consumption across
    agents, skills, rules, MCP servers, and CLAUDE.md files.
    
    Detects bloated agent descriptions, redundant components, MCP
    over-subscription, and CLAUDE.md bloat. Produces a prioritized
    report with specific token savings per optimization.
    
    Directly relevant to #434 (agent descriptions too verbose, ~26k
    tokens causing performance warnings).
    
    * fix: address review feedback on context-budget command
    
    - Add $ARGUMENTS to enable --verbose flag passthrough
    - Fix MCP token estimate: 45 tools × ~500 tokens = ~22,500 (was ~2,200)
    - Fix heavy agents example: all 3 now exceed 200-line threshold
    - Fix description threshold: warning at >30 words, fail at >50 words
    - Add Step 4 instructions (was empty)
    - Fix audit cadence: "quarterly" → "regularly" + "monthly" consistently
    - Fix Output Format heading level under Step 4
    - Replace "Antigravity" with generic "harness versions"
    - Recalculate total overhead to match corrected MCP numbers
    
    * fix: correct MCP tool count and savings percentage in sample output
    
    - Fix MCP tool count: table now shows 87 tools matching the issues
      section (was 45 in table vs 87 in issues)
    - Fix savings percentage: 5,100 / 66,400 = 7.7% (was 20.6%)
    - Recalculate total overhead and effective context to match
    
    * fix: correct sample output arithmetic
    
    - Fix total overhead: 66,400 → 66,100 to match component table sum
      (12,400 + 6,200 + 2,800 + 43,500 + 1,200 = 66,100)
    - Fix MCP savings: ~1,500 → ~27,500 tokens (55 tools × 500 tokens/tool)
      to match the per-tool formula defined in Step 1
    - Reorder optimizations by savings (MCP removal is now #1)
    - Fix total savings and percentage (31,100 / 66,100 = 47.0%)
    
    * fix: distinguish always-on vs on-demand agent overhead
    
    Agent descriptions are always loaded into Task tool routing context,
    but the full agent body is only loaded when invoked. The audit now
    measures both: description-only tokens as always-on overhead and
    full-file tokens as worst-case overhead. This resolves the
    contradiction between Step 1 (counting full files) and Tip 1 (saying
    only descriptions are loaded per session).
    
    * fix: simplify agent accounting and resolve inconsistencies
    
    - Revert to single agent overhead metric (full file tokens) — simpler
      and matches what the report actually displays
    - Add back 200-line threshold for heavy agents in Step 1
    - Fix heavy agents action to match issue type (split/trim, not
      description-only)
    - Remove .agents/skills/ scan path (doesn't exist in ECC repo)
    - Consolidate description threshold to single 30-word check
    
    * fix: add model assumption and verbose mode activation
    
    - Step 4: assume 200K context window by default (Claude has no way to
      introspect its model at runtime)
    - Step 4: add explicit instruction to check $ARGUMENTS for --verbose
      flag and include additional output when present
    
    * fix: handle .agents/skills/ duplicates in skill scan
    
    Skills scan now checks .agents/skills/ for Codex harness copies and
    skips identical duplicates to avoid double-counting overhead.
    
    * fix: add savings estimate to heavy agents action for consistency
    
    * feat(skills): add context-budget backing skill, slim command to delegator
    
    * fix: use structurally detectable classification criteria instead of session frequency
    
    ---------
    
    Co-authored-by: vazidmansuri005 <vazidmansuri005@users.noreply.github.com>
  • feat: add C++ language support and hook tests (#539)
    - agents: cpp-build-resolver, cpp-reviewer
    - commands: cpp-build, cpp-review, cpp-test
    - rules: cpp/ (coding-style, hooks, patterns, security, testing)
    - tests: 9 new hook test files with comprehensive coverage
    
    Cherry-picked from PR #436.
  • feat(design): skill health dashboard mockup (#518)
    * feat(Design): skill health dashboard mockup
    
    * fix(comments): code according to comments
  • Add Claude DevFleet multi-agent orchestration skill (#505)
    * Add Claude DevFleet multi-agent orchestration skill
    
    Adds a skill for Claude DevFleet — a multi-agent coding platform that dispatches
    Claude Code agents to work on missions in parallel, each in an isolated git worktree.
    
    The skill teaches Claude Code how to use DevFleet's 11 MCP tools to plan projects,
    dispatch agents, monitor progress, and read structured reports.
    
    Setup: claude mcp add devfleet --transport sse http://localhost:18801/mcp/sse
    Repo: https://github.com/LEC-AI/claude-devfleet
    
    * Add DevFleet MCP config and /devfleet command
    
    - Add devfleet entry to mcp-configs/mcp-servers.json for discovery
    - Add /devfleet slash command for multi-agent orchestration workflow
    
    * Add orchestration flow diagrams to skill and command
    
    - Add visual flow to SKILL.md showing plan → dispatch → auto-chain → report
    - Add flow to /devfleet command showing the trigger sequence
    
    * Fix review feedback: frontmatter, workflow docs, HTTP transport
    
    - Add YAML description frontmatter to commands/devfleet.md
    - Fix manual workflow in SKILL.md to capture project_id from create_project
    - Change mcp-servers.json from deprecated SSE to Streamable HTTP transport
    
    * Address all review comments
    
    * Add monitoring/reporting steps to full auto pattern
    
    Addresses review feedback: the full auto example now includes polling
    for completion and retrieving reports, matching the other patterns.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    
    * Update skills/claude-devfleet/SKILL.md
    
    Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
    
    * Update skills/claude-devfleet/SKILL.md
    
    Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
    
    * Update commands/devfleet.md
    
    Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
    
    * Fix review feedback
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Avdhesh Singh Chouhan <avdhesh.acro@gmail.com>
    Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
    Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
    Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
  • feat(commands): add /docs; feat(mcp-configs): document Context7 (#530)
    * feat(commands): add /docs; feat(agents): add docs-lookup; feat(mcp-configs): document Context7; docs: add MCP subsection to CONTRIBUTING
    
    Made-with: Cursor
    
    * fix: address PR review — use Context7 MCP tool names in docs-lookup agent; CONTRIBUTING Agent Fields + MCP wording; mcp-config description; /docs quoted example; treat fetched docs as untrusted
    
    Made-with: Cursor
    
    * docs-lookup: note that harness may expose Context7 tools under prefixed names
    
    Made-with: Cursor
    
    * docs-lookup: examples use prefixed tool names (mcp__context7__*) for resolution
    
    Made-with: Cursor
  • feat(agents): add Rust language support (#523)
    * feat(agents): add Rust language support — reviewer, build resolver, patterns, and testing
    
    Add Rust-specific agents and skills following the established Go/Kotlin pattern:
    - agents/rust-reviewer.md: ownership, lifetimes, unsafe audit, clippy, error handling
    - agents/rust-build-resolver.md: cargo build errors, borrow checker, dependency resolution
    - skills/rust-patterns/SKILL.md: idiomatic Rust patterns and best practices
    - skills/rust-testing/SKILL.md: TDD, unit/integration/async/property-based testing
    
    * fix(agents): correct Rust examples for accuracy and consistency
    
    - unsafe fn: add inner unsafe {} block for Rust 2024 edition compliance
    - edition: update from 2021 to 2024 as current default
    - rstest: add missing fixture import
    - mockall: add missing predicate::eq import
    - concurrency: use sync_channel (bounded) and expect() over unwrap()
      to align with rust-reviewer's HIGH-priority review checks
    
    * fix(skills): correct compilation issues in Rust code examples
    
    - collect: add .copied() for &str iterator into String
    - tokio import: remove unused sleep, keep Duration
    - async test: add missing Duration import
    
    * fix(skills): move --no-fail-fast before test-binary args
    
    --no-fail-fast is a Cargo option, not a test binary flag.
    Placing it after -- forwards it to the test harness where it is
    unrecognized.
    
    * fix(agents): distinguish missing cargo-audit from real audit failures
    
    Check if cargo-audit is installed before running it, so actual
    vulnerability findings are not suppressed by the fallback message.
    
    * fix: address automated review findings across all Rust files
    
    - build-resolver: prefer scoped cargo update over full refresh
    - testing: add Cargo.toml bench config with harness = false for criterion
    - testing: condense TDD example to stay under 500-line limit
    - patterns: use expect() over unwrap() on JoinHandle for consistency
    - patterns: add explicit lifetime to unsafe FFI return reference
    - reviewer: replace misleading "string interpolation" with concrete alternatives
    
    * fix: align with CONTRIBUTING.md conventions
    
    - skills: rename "When to Activate" to "When to Use" per template
    - reviewer: add cargo check gate before starting review
    
    * fix(agents): guard cargo-audit and cargo-deny with availability checks
    
    Match the pattern used in rust-build-resolver to avoid command-not-found
    errors when optional tools are not installed.
    
    * fix: address second round of automated review findings
    
    - testing: split TDD example into separate code blocks to avoid
      duplicate fn definition in single block
    - build-resolver/reviewer: use if/then/else instead of && ... ||
      chaining for cargo-audit/deny to avoid masking real failures
    - build-resolver: add MSRV caveat to edition upgrade guidance
    
    * feat: add Rust slash commands for build, review, and test
    
    Add commands/rust-build.md, commands/rust-review.md, and
    commands/rust-test.md to provide consistent user entrypoints
    matching the existing Go and Kotlin command patterns.
    
    * fix(commands): improve rust-build accuracy and tone
    
    - Restructure-first borrow fix example instead of clone-first
    - Realistic cargo test output format (per-test lines, not per-file)
    - Align "Parse Errors" step with actual resolver behavior
    - Prefer restructuring over cloning in common errors table
    
    * fix: address cubic-dev-ai review findings on commands
    
    - Gate review on all automated checks, not just cargo check
    - Use git diff HEAD~1 / git diff main...HEAD for PR file selection
    - Fix #[must_use] guidance: Result is already must_use by type
    - Remove error-masking fallback on cargo tree --duplicates
    
    * fix: address remaining review findings across all bots
    
    - Add rust-reviewer and rust-build-resolver to AGENTS.md registry
    - Update agent count from 16 to 18
    - Mark parse_config doctest as no_run (body is todo!())
    - Add "How It Works" section to both Rust skills
    - Replace cargo install with taiki-e/install-action in CI snippet
    - Trim tarpaulin section to stay under 500-line limit
    
    * fix(agents): align rust-reviewer invocation with command spec
    
    - Use git diff HEAD~1 / main...HEAD instead of bare git diff
    - Add cargo test as explicit step before review begins
    
    * fix(skills): address cubic review on patterns and testing
    
    - Remove Tokio-specific language from How It Works summary
    - Add cargo-llvm-cov install note in coverage section
    - Revert no_run on doctest examples (illustrative code, not compiled)
    
    * fix(skills): use expect on thread join for consistency
    
    Replace handle.join().unwrap() with .expect("worker thread panicked")
    to match the .expect("mutex poisoned") pattern used above.
    
    * fix(agents): gate review on all automated checks, not just cargo check
    
    Consolidate check/clippy/fmt/test into a single gate step that
    stops and reports if any fail, matching the command spec.
    
    * fix(skills): replace unwrap with expect in channel example
    
    Use .expect("receiver disconnected") on tx.send() for consistency
    with the .expect() convention used in all other concurrency examples.
    
    * fix: address final review round — OpenCode mirrors, counts, examples
    
    - Add .opencode/commands/rust-{build,review,test}.md mirrors
    - Add .opencode/prompts/agents/rust-{build-resolver,reviewer}.txt mirrors
    - Fix AGENTS.md count to 20 (add missing kotlin agents to table)
    - Fix review example: all checks pass (consistent with gate policy)
    - Replace should_panic doctest with is_err() (consistent with best practices)
    - Trim testing commands to stay at 500-line limit
    
    * fix: address cubic and greptile review on OpenCode files and agents
    
    - Fix crate::module import guidance (internal path, not Cargo.toml)
    - Add cargo fmt --check to verification steps
    - Fix TDD GREEN example to handle error path (validate(input)?)
    - Scope .context() guidance to anyhow/eyre application code
    - Update command count from 40 to 51
    - Add tokio channel variants to unbounded channel warning
    - Preserve JoinError context in spawned task panic message
    
    * fix: stale command count, channel guidance, cargo tree fallback
    
    - Fix stale command count in Project Structure section (40→51)
    - Clarify unbounded channel rule: context-appropriate bounded alternatives
    - Remove dead cargo tree fallback (exits 0 even with no duplicates)
    - Sync OpenCode reviewer mirror with tokio channel coverage
  • Merge pull request #309 from cookiee339/feat/kotlin-ecosystem
    feat(kotlin): add Kotlin/Ktor/Exposed ecosystem
  • feat: add /aside command (#407)
    * Introduces /aside — a mid-task side conversation command inspired by
      Claude Code's native /btw feature. Allows users to ask a question while
      Claude is actively working without losing task context or touching any files.
    
      Key behaviors:
      - Freezes current task state before answering (read-only during aside)
      - Delivers answers in a consistent ASIDE / Back to task format
      - Auto-resumes the active task after answering
      - Handles edge cases: no question given, answer reveals a blocker,
        question implies a task redirect, chained asides, ambiguous questions,
        and answers that suggest code changes without making them
    
    * Two documentation inconsistencies fixed:
    
    * Fixed 4 pre-existing lint errors in skills/videodb/ that were causing  CI to fail across all PR checks:  - api-reference.md: add blockquote continuation line to fix MD028  - capture-reference.md: wrap bare URL to fix MD034  - SKILL.md: wrap bare URL to fix MD034
  • feat(skills): add prompt-optimizer skill and /prompt-optimize command (#418)
    * feat(skills): add prompt-optimizer skill and /prompt-optimize command
    
    Adds a prompt-optimizer skill that analyzes draft prompts, matches them
    to ECC components (skills/commands/agents), and outputs a ready-to-paste
    optimized prompt. Advisory role only — never executes the task.
    
    Features:
    - 6-phase analysis pipeline (project detection, intent, scope, component
      matching, missing context, workflow + model recommendation)
    - Auto-detects project tech stack from package.json, go.mod, etc.
    - Maps intents to ECC commands, skills, and agents by type and tech stack
    - Recommends correct model tier (Sonnet vs Opus) based on task complexity
    - Outputs Full + Quick versions of the optimized prompt
    - Hard gate: never executes the task, only produces advisory output
    - AskUserQuestion trigger when 3+ critical context items are missing
    - Multi-prompt splitting guidance for HIGH/EPIC scope tasks
    - Feedback footer for iterative refinement
    
    Also adds /prompt-optimize command as an explicit invocation entry point.
    
    * fix: keep prompt optimizer advisory-only
    
    * fix: refine prompt optimizer guidance
    
    ---------
    
    Co-authored-by: Affaan Mustafa <affaan@dcube.ai>