Commit Graph

213 Commits

Author SHA1 Message Date
John Lamb
c3c0d2628b voice updates 2026-02-27 09:18:09 -06:00
John Lamb
442bdc45dd fix(excalidraw): resolve canvas module path and add canonical file location convention
Fix convert.mjs to resolve canvas from .export-runtime via createRequire
instead of bare import (which resolves relative to script location, not CWD).
Add File Location Convention section to SKILL.md — diagrams save .excalidraw
source alongside PNGs in the project's image directory for easy re-export.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 09:07:10 -06:00
John Lamb
f524c1b9d8 feat(excalidraw): improve diagram quality with canvas measurement, validation, and conventions
Replace the charCount * fontSize * 0.55 text sizing heuristic with canvas-based
measurement (graceful fallback when native deps unavailable). Add validate.mjs for
automated spatial checks (text overflow, arrow-text collisions, element overlap).
Update element format reference with sizing rules, label guidelines, and arrow routing
conventions. Add verification step to SKILL.md workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:19:14 -06:00
John Lamb
36ae861046 new jira ticket writing skill and details on paying attention to names
Some checks failed
CI / test (push) Has been cancelled
2026-02-25 08:47:48 -06:00
John Lamb
8dfcfcfb09 add personal voice skill
Some checks failed
CI / test (push) Has been cancelled
2026-02-24 22:56:38 -06:00
John Lamb
e092c9e5ad adds skill for handling upstream changes and merging to local
Some checks failed
CI / test (push) Has been cancelled
2026-02-17 10:48:20 -06:00
John Lamb
85f97affb5 Merge upstream v2.34.0 with FastAPI pivot (v2.35.0)
Some checks failed
CI / test (push) Has been cancelled
Incorporate 42 upstream commits while preserving the Ruby/Rails → Python/FastAPI
pivot. All 24 conflicting files individually triaged and resolved.

Key changes:
- Added tiangolo-fastapi-reviewer, python-package-readme-writer, fastapi-style,
  python-package-writer skills
- Removed Rails/Ruby agents and skills (DHH, Ankane, DSPy.rb, design agents)
- Merged pressure test into workflows/review, updated reviewer references
- Upstream additions: schema-drift-detector, slfg, setup skill, document-review,
  orchestrating-swarms, resolve-pr-parallel, new converter targets (cursor,
  gemini, droid, pi)
- Version 2.35.0: 25 agents, 23 commands, 18 skills

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:36:20 -06:00
John Lamb
d306c49179 Merge upstream v2.34.0 with FastAPI pivot (v2.35.0)
Incorporate 42 upstream commits while preserving the Ruby/Rails → Python/FastAPI
pivot. Each of the 24 conflicting files was individually triaged.

Added: tiangolo-fastapi-reviewer, python-package-readme-writer, lint (Python),
pr-comments-to-todos, fastapi-style skill, python-package-writer skill.

Removed: 3 design agents, ankane-readme-writer, dhh-rails-reviewer,
kieran-rails-reviewer, andrew-kane-gem-writer, dhh-rails-style, dspy-ruby.

Merged: best-practices-researcher, kieran-python-reviewer, resolve_todo_parallel,
file-todos, workflows/review (pressure test), workflows/plan (reviewer names).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:34:54 -06:00
John Lamb
b0755f4050 pressure test pr feedback
Some checks failed
CI / test (push) Has been cancelled
2026-02-16 15:59:42 -06:00
Kieran Klaassen
1a3e8e2b58 release: v0.7.0 / plugin v2.34.0 — add Gemini CLI target
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:50:46 -08:00
Kieran Klaassen
bbe4dfadc9 Merge pull request #190 from EveryInc/feat/gemini-target
feat: add Gemini CLI as sixth target provider
2026-02-14 22:49:35 -06:00
Kieran Klaassen
fb6a2a3d11 chore: add todos/ to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:49:05 -08:00
Kieran Klaassen
3e1d62d4c4 chore: remove todos from git tracking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:48:46 -08:00
Kieran Klaassen
552ebceb0b chore: mark review todos as complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:46:53 -08:00
Kieran Klaassen
d487915f0f fix: address code review findings for gemini target
- Extract named GeminiMcpServer type (eliminates NonNullable indexing)
- Deep-merge mcpServers in settings.json (preserves existing entries)
- Warn when existing settings.json cannot be parsed
- Add test for uniqueName dedup (agent/skill name collision)
- Add test for TOML triple-quote escaping

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:46:31 -08:00
Kieran Klaassen
e113d20126 docs: mark gemini target plan as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:35:09 -08:00
Kieran Klaassen
8351851a13 docs: add Gemini CLI spec and update README with gemini target
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:34:31 -08:00
Kieran Klaassen
201ad6d0fb feat(gemini): add Gemini CLI as sixth target provider
Add `--to gemini` support for both `convert` and `install` commands,
converting Claude Code plugins into Gemini CLI-compatible format.

- Agents convert to `.gemini/skills/*/SKILL.md` with description frontmatter
- Commands convert to `.gemini/commands/*.toml` with TOML prompt format
- Namespaced commands create directory structure (workflows:plan -> workflows/plan.toml)
- Skills pass through unchanged (identical SKILL.md standard)
- MCP servers written to `.gemini/settings.json` with merge support
- Content transforms: .claude/ paths, Task calls, @agent references
- Hooks emit warning (different format in Gemini)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:33:21 -08:00
Kieran Klaassen
134a994c08 [2.33.1] Add status frontmatter to plan templates
- Plan templates now include `status: active` in YAML frontmatter
- /workflows:work updates plan status to `completed` after shipping
- Agents can grep frontmatter to distinguish current vs historical plans

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 09:54:42 -08:00
Kieran Klaassen
b42163f1c0 Add CLI changelog with 0.6.0 release notes
Credits contributors @gvkhosla (Pi target) and @waltbeaman (model alias fix).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 20:38:22 -08:00
Kieran Klaassen
e41904a569 Add droid and cursor sync targets, extract shared path helpers
- Add sync --target droid (skills to ~/.factory/skills/)
- Add sync --target cursor (skills + MCP to .cursor/)
- Extract expandHome/resolveTargetHome to src/utils/resolve-home.ts
- Remove duplicated path helpers from convert.ts and install.ts
- Bump version to 0.6.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 20:37:25 -08:00
Kieran Klaassen
84af459c79 Merge pull request #182 from waltbeaman/fix/bare-model-alias-resolution
Fix bare Claude model alias resolution in OpenCode converter
2026-02-12 22:05:20 -06:00
Kieran Klaassen
25fa591559 Merge pull request #181 from gvkhosla/feat/pi-target
feat: add first-class Pi target with MCPorter + subagent compatibility
2026-02-12 22:04:02 -06:00
Walt Beaman
4132af155a Fix bare Claude model alias resolution in OpenCode converter
normalizeModel() turned bare aliases like 'haiku' into 'anthropic/haiku',
which is not a valid OpenCode model ID. This caused
ProviderModelNotFoundError when agents using model: haiku (e.g.
learnings-researcher, lint) were invoked during workflows like /plan.

Add CLAUDE_FAMILY_ALIASES map to resolve haiku, sonnet, and opus to their
full model IDs (e.g. anthropic/claude-haiku-4-5). A console.warn alerts
during conversion so the map can be updated when new versions release.
2026-02-12 21:01:51 -06:00
Geet Khosla
e84fef7a56 feat: add first-class pi target with mcporter/subagent compatibility 2026-02-12 23:07:34 +01:00
Kieran Klaassen
87e98b24d3 Bump version to 0.5.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:32:15 -08:00
Kieran Klaassen
d929b8f091 Fix cursor install defaulting to cwd instead of opencode config dir
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:32:06 -08:00
Kieran Klaassen
7232f26e0e Bump version to 0.5.1 for npm publish
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:29:55 -08:00
Kieran Klaassen
20446e9add Fix: install by name always fetches from GitHub (#180)
* feat(cursor): add Cursor CLI as target provider

Add converter, writer, types, and tests for converting Claude Code
plugins to Cursor-compatible format (.mdc rules, commands, skills,
mcp.json). Agents become Agent Requested rules (alwaysApply: false),
commands are plain markdown, skills copy directly, MCP is 1:1 JSON.

* docs: add Cursor spec and update README with cursor target

* chore: bump CLI version to 0.5.0 for cursor target

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: note Cursor IDE + CLI compatibility in README

* fix: install by name always fetches from GitHub

Previously, `install compound-engineering` would resolve to any local
directory named `compound-engineering` in the current working directory
before trying GitHub. This broke installs when users had a same-named
directory that wasn't a valid plugin.

Now bare names always go to GitHub. Only explicit paths (starting with
./ or / or ~) are treated as local paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:24:58 -06:00
Kieran Klaassen
0aaca5a7a7 Add Cursor CLI as target provider (#179)
* feat(cursor): add Cursor CLI as target provider

Add converter, writer, types, and tests for converting Claude Code
plugins to Cursor-compatible format (.mdc rules, commands, skills,
mcp.json). Agents become Agent Requested rules (alwaysApply: false),
commands are plain markdown, skills copy directly, MCP is 1:1 JSON.

* docs: add Cursor spec and update README with cursor target

* chore: bump CLI version to 0.5.0 for cursor target

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: note Cursor IDE + CLI compatibility in README

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:16:43 -06:00
Kieran Klaassen
56b174a056 Add configurable review agents via setup skill and compound-engineering.local.md (#124)
* feat(commands): add /compound-engineering-setup for configurable agents

Adds a new setup command that allows users to configure which review
agents to use instead of hardcoding them in workflows. This enables:

- Multi-step onboarding with AskUserQuestion for easy setup
- Auto-detection of project type (Rails, Python, TypeScript, etc.)
- Three setup modes: Quick (smart defaults), Advanced, and Minimal
- Configuration stored in .claude/compound-engineering.json
- Support for both global (~/.claude/) and project-specific config

Updated workflows to read from config:
- /workflows:review - reads reviewAgents from config
- /plan_review - reads planReviewAgents from config
- /workflows:work - references config for reviewer agents
- /workflows:compound - references config for specialized agents

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: auto-trigger setup when no config exists

Workflows now detect missing config and offer inline quick setup:
- "Quick Setup" - auto-detect project type, create config, continue
- "Full Setup" - run /compound-engineering-setup for customization
- "Skip" - use defaults just this once

This ensures users get onboarded automatically when running any
workflow for the first time, without needing to know about the
setup command beforehand.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(review): wire all conditionalAgents categories

Extended /workflows:review to invoke conditional agents for:
- migrations (existing)
- frontend (new): JS/TS/Stimulus changes
- architecture (new): structural changes, 10+ files
- data (new): model/ActiveRecord changes

Each category reads from conditionalAgents.* config key and
runs appropriate specialized agents when file patterns match.

Resolves: todos/001-ready-p2-conditional-agents-not-invoked.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: mark todo #001 as complete

* feat(setup): add custom agent discovery and modify flow

- Auto-detect custom agents in .claude/agents/ and ~/.claude/agents/
- Add modify existing config flow (add/remove agents, view config)
- Include guide for creating custom review agents
- Add customAgents mapping in config to track agent file paths
- Update changelog with new config schema including customAgents

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: remove completed todos directory

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* [2.29.1] Improve /workflows:brainstorm question flow

- Add "Ask more questions" option at handoff phase
- Clarify that Claude should ask the user questions (not wait for user)
- Require resolving ALL open questions before offering to proceed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Simplify plugin settings: replace 486-line wizard with .local.md pattern

- Rewrite setup.md (486 → 95 lines): detect project type, create
  .claude/compound-engineering.local.md with smart defaults
- Make review.md and work.md config-aware: read agents from .local.md
  frontmatter, fall back to auto-detected defaults
- Wire schema-drift-detector into review.md migrations conditional block
- Delete technical_review.md (duplicated /plan_review)
- Add disable-model-invocation to setup.md
- Bump to v2.32.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Rewrite .claude/ paths for OpenCode/Codex targets, add npm publish workflow

- Converters now rewrite .claude/ → .opencode/ (OpenCode) and .codex/ (Codex)
  in command bodies and agent bodies so .local.md settings work cross-platform
- Apply transformContentForCodex to agent bodies (was only commands before)
- Add GitHub Action to auto-publish to npm on version bump merge to main
- Bump to v0.4.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(workflows-work): require post-deploy monitoring section

Add a mandatory Post-Deploy Monitoring & Validation section to the /workflows:work PR template, include no-impact fallback guidance, and enforce it in the quality checklist.

* Add learnings-researcher to review workflow, fix docs site counts

- Add learnings-researcher as parallel agent #14 in /workflows:review
  so past solutions from docs/solutions/ are surfaced during code review
- Make /release-docs command invocable (remove disable-model-invocation)
- Fix stale counts across docs site (agents 28→29, commands 19→24,
  skills 15→18, MCP servers 2→1)
- Bump version to 2.32.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Move /release-docs to local .claude/commands/, bump to 2.32.2

Repo maintenance command doesn't need to be distributed to plugin users.
Update command count 24 → 23 across plugin.json, marketplace.json, and docs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Move settings to project root: compound-engineering.local.md

Tool-agnostic location — works for Claude, Codex, OpenCode without
path rewriting. No global fallback, just project root.

Update commands (setup, review, work) and converter tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Make /compound-engineering-setup interactive with auto-detect fast path

Two paths: "Auto-configure" (one click, smart defaults) or "Customize"
(pick stack, focus areas, review depth). Uses AskUserQuestion throughout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Replace /compound-engineering-setup command with setup skill

Setup is now a skill invoked on-demand when compound-engineering.local.md
doesn't exist. Review and work commands just say "invoke the setup skill"
instead of inlining the full setup flow.

- Remove commands/setup.md (command)
- Add skills/setup/SKILL.md (skill with interactive AskUserQuestion flow)
- Simplify review.md and work.md to reference the skill
- Counts: 29 agents, 22 commands, 19 skills

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Prepare v2.33.0 release: setup skill, configurable review agents

- Bump version to 2.33.0
- Consolidate CHANGELOG entries for this branch
- Fix README: update counts (29/22/19), add setup + resolve-pr-parallel skills
- Remove stale /compound-engineering-setup command reference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-12 11:43:16 -06:00
Salman Chishti
fbae146ba9 Upgrade GitHub Actions to latest versions (#168)
Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com>
2026-02-11 12:28:08 -06:00
Kieran Klaassen
a32aceec87 Update publish.yml to actions/checkout@v6 to match #167
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:27:24 -08:00
Salman Chishti
0aba65018a Upgrade GitHub Actions for Node 24 compatibility (#167)
Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com>
2026-02-11 12:27:06 -06:00
Kieran Klaassen
ebf387d093 Add Factory Droid to README, bump to 0.4.0, add npm publish workflow
- Document Droid as third converter target alongside OpenCode and Codex
- Bump package version 0.3.0 → 0.4.0 for new target feature
- Add CHANGELOG entry for 2.32.0 with Droid details
- Add GitHub Actions workflow to publish to npm on release

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:14:16 -08:00
Adam Tervort
4ab08dce78 Add Factory Droid as a converter target (#174)
Adds a new 'droid' target to the converter that outputs Claude Code plugins
in Factory Droid's format:

- Commands flattened to ~/.factory/commands/ (strips namespace prefixes)
- Agents converted to droids in ~/.factory/droids/ with proper frontmatter
- Skills copied to ~/.factory/skills/
- Content transforms: Task calls, slash commands, and @agent references
  adapted to Droid conventions

This resolves the manual workaround described in issue #31 by automating
the conversion from Claude Code plugin format to Factory Droid's expected
directory structure.

Includes 13 tests covering converter logic and file writer behavior.

Co-authored-by: adamprime <adamprime@hey.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-02-11 11:48:13 -06:00
Vicente Reig Rincón de Arellano
e8f3bbcb35 refactor(skills): update dspy-ruby skill to DSPy.rb v0.34.3 API (#162)
Rewrite all reference files, asset templates, and SKILL.md to use
current API patterns (.call(), result.field, T::Enum classes,
Tools::Base). Add two new reference files (toolsets, observability)
covering tools DSL, event system, and Langfuse integration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 12:01:43 -06:00
Kieran Klaassen
f3b7d111f1 Merge branch 'main' of https://github.com/EveryInc/compound-engineering-plugin
# Conflicts:
#	plugins/compound-engineering/skills/create-agent-skills/SKILL.md
2026-02-08 20:30:49 -08:00
Kieran Klaassen
f744b797ef Reduce context token usage by 79% — fix silent component exclusion (#161)
* Update create-agent-skills to match 2026 official docs, add /triage-prs command

- Rewrite SKILL.md to document that commands and skills are now merged
- Add new frontmatter fields: disable-model-invocation, user-invocable, context, agent
- Add invocation control table and dynamic context injection docs
- Fix skill-structure.md: was incorrectly recommending XML tags over markdown headings
- Update official-spec.md with complete 2026 specification
- Add local /triage-prs command for PR triage workflow
- Add PR triage plan document

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* [2.31.0] Reduce context token usage by 79%, include recent community contributions

The plugin was consuming 316% of Claude Code's description character budget
(~50,500 chars vs 16,000 limit), causing components to be silently excluded.
Now at 65% (~10,400 chars) with all components visible.

Changes:
- Trim all 29 agent descriptions (move examples to body)
- Add disable-model-invocation to 18 manual commands
- Add disable-model-invocation to 6 manual skills
- Include recent community contributions in changelog
- Fix component counts (29 agents, 24 commands, 18 skills)

Contributors: @trevin, @terryli, @robertomello, @zacwilliams,
@aarnikoskela, @samxie, @davidalley

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix: keep disable-model-invocation off commands called by /lfg, rename xcode-test

- Remove disable-model-invocation from test-browser, feature-video,
  resolve_todo_parallel — these are called programmatically by /lfg and /slfg
- Rename xcode-test to test-xcode to match test-browser naming convention

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix: keep git-worktree skill auto-invocable (used by /workflows:work)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(converter): support disable-model-invocation frontmatter

Parse disable-model-invocation from command and skill frontmatter.
Commands/skills with this flag are excluded from OpenCode command maps
and Codex prompt/skill generation, matching Claude Code behavior where
these components are user-only invocable.

Bump converter version to 0.3.0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:28:51 -06:00
Kieran Klaassen
4f4873f8c0 Update create-agent-skills to match 2026 official docs, add /triage-prs command
- Rewrite SKILL.md to document that commands and skills are now merged
- Add new frontmatter fields: disable-model-invocation, user-invocable, context, agent
- Add invocation control table and dynamic context injection docs
- Fix skill-structure.md: was incorrectly recommending XML tags over markdown headings
- Update official-spec.md with complete 2026 specification
- Add local /triage-prs command for PR triage workflow
- Add PR triage plan document

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 15:11:32 -08:00
Trevin Chow
04ee7e4506 fix(compound): prevent subagents from writing intermediary files (#150)
The /workflows:compound command was inconsistently creating intermediary
files during research phase instead of having subagents return text data
to the orchestrator.

Changes:
- Add <critical_requirement> block explicitly forbidding subagent file writes
- Restructure into clear two-phase orchestration (research → assembly)
- Remove Documentation Writer as parallel subagent (was incorrectly parallel)
- Add Phase 3 for optional enhancement agents with proper sequencing
- Add Common Mistakes table for quick reference
- Update success output to reflect new structure

Co-authored-by: Kieran Klaassen <kieranklaassen@users.noreply.github.com>
2026-02-08 17:08:59 -06:00
Trevin Chow
a5bba3dc54 feat(skills): add document-review skill for brainstorm/plan refinement (#112)
Add optional review and refine step to workflows:brainstorm and workflows:plan
that checks documents for clarity, completeness, user intent, and YAGNI.

- New document-review skill with review questions and evaluation criteria
- Brainstorm Phase 4 offers "Review and refine" option
- Plan post-generation offers "Review and refine" after technical review
- Includes YAGNI-based simplification guidance
- Max 2 iteration rounds before suggesting to proceed

Co-authored-by: Kieran Klaassen <kieranklaassen@users.noreply.github.com>
2026-02-08 17:04:45 -06:00
Terry Li
1bdd1030f5 feat: Add sync command for Claude Code personal config (#123)
* feat: Add sync command for Claude Code personal config

Add `compound-plugin sync` command to sync ~/.claude/ personal config
(skills and MCP servers) to OpenCode or Codex.

Features:
- Parses ~/.claude/skills/ for personal skills (supports symlinks)
- Parses ~/.claude/settings.json for MCP servers
- Syncs skills as symlinks (single source of truth)
- Converts MCP to JSON (OpenCode) or TOML (Codex)
- Dedicated sync functions bypass existing converter architecture

Usage:
  compound-plugin sync --target opencode
  compound-plugin sync --target codex

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: address security and quality review issues

Security fixes:
- Add path traversal validation with isValidSkillName()
- Warn when MCP servers contain potential secrets (API keys, tokens)
- Set restrictive file permissions (600) on config files
- Safe forceSymlink refuses to delete real directories
- Proper TOML escaping for quotes/backslashes/control chars

Code quality fixes:
- Extract shared symlink utils to src/utils/symlink.ts
- Replace process.exit(1) with thrown error
- Distinguish ENOENT from other errors in catch blocks
- Remove unused `root` field from ClaudeHomeConfig
- Make Codex sync idempotent (remove+rewrite managed section)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: revert version bump (leave to maintainers)

* feat: bump root version to 0.2.0 for sync command

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-08 17:00:48 -06:00
Roberto Mello
f7cab16b06 Fix crash when hook entries have no matcher (#160)
Claude Code allows hook entries without a `matcher` field (e.g.,
SessionStart and SubagentStop hooks don't need one). The OpenCode
converter assumed `matcher.matcher` was always present, causing
"undefined is not an object (evaluating 'matcher.matcher.split')"
when converting plugins with matcher-less hooks.

Make `matcher` optional in the type and guard all accesses.
2026-02-08 16:59:57 -06:00
Zac Williams
c69c47fe9b fix: backup existing config files before overwriting (#119)
Before writing config.toml (Codex) or opencode.json (OpenCode), the CLI
attempts to create a timestamped backup of any existing config file.
This prevents accidental data loss when users have customized configs.

Backup is best-effort - if it fails (e.g., unusual permissions), the
install continues without blocking.

Backup files are named: config.toml.bak.2026-01-23T21-16-40-065Z
2026-02-08 16:58:51 -06:00
Aarni Koskela
895d340dd4 Note new repository URL (#108) 2026-02-08 16:53:47 -06:00
Sam Xie
c40eb2eaa2 Remove the confirmation of worktree creation (#144) 2026-02-08 16:43:47 -06:00
David Alley
0c404f9544 fix(git-worktree): detect worktrees where .git is a file, not a directory (#159)
In git worktrees, .git is a regular file containing a gitdir: pointer
back to the main repository — not a directory. The -d check caused
list and cleanup to silently skip all worktrees, reporting "No
worktrees found". Changed to -e (exists) which handles both cases.

Fixes #158

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 16:41:44 -06:00
Kieran Klaassen
e4ff6a874c [2.30.0] Add orchestrating-swarms skill, /slfg command, and swarm mode (#151)
- New skill: orchestrating-swarms — comprehensive guide to multi-agent
  swarm orchestration with TeammateTool operations, spawn backends,
  task dependencies, and orchestration patterns
- New command: /slfg — swarm-enabled variant of /lfg that parallelizes
  review + browser tests after work phase, then resolves and records video
- Updated /workflows:work with optional Swarm Mode section
- Added missing skills (brainstorming, orchestrating-swarms) to README
- Added missing commands (/lfg, /slfg) to README

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 12:25:50 -06:00
Kieran Klaassen
2429f59529 [2.29.0] Add schema-drift-detector agent
- New agent: schema-drift-detector for catching unrelated schema.rb changes in PRs
- Compares schema.rb diff against migrations in the PR
- Detects columns, indexes, tables from other branches
- Provides clear fix instructions
- Essential pre-merge check for database changes

Also updates component counts in README (were outdated)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 21:17:06 -08:00