Summary
/homunculus:evolve writes evolved capabilities to .claude/homunculus/evolved/{commands,agents,skills}/, but Claude Code only auto-loads from .claude/{commands,agents,skills}/. Result: after evolution, the new capabilities don't appear in /help, can't be invoked, and aren't registered as skills/agents — even after restart. They look "evolved" in identity.json but are functionally inert.
Repro
- Have a homunculus with 5+ instincts in some domain (clustering threshold)
- Run
/homunculus:evolve and approve a proposal — say, a /deploy-foo command
- Verify file at
.claude/homunculus/evolved/commands/deploy-foo.md
- Restart Claude Code
/help does not list deploy-foo. Typing /deploy-foo is unrecognized.
Same for evolved agents (not selectable as subagent_type) and skills (don't appear in the available-skills system reminder).
Expected
Evolved capabilities should be invocable in the next session without manual intervention.
Workaround
Symlink each evolved file into the standard project paths:
mkdir -p .claude/commands
ln -sf ../homunculus/evolved/commands/deploy-foo.md .claude/commands/deploy-foo.md
ln -sf ../homunculus/evolved/agents/my-agent.md .claude/agents/my-agent.md
ln -sf ../homunculus/evolved/skills/my-skill .claude/skills/my-skill
This works — Claude Code follows the symlinks and parses the frontmatter normally.
Suggested fixes (any one)
- Have
evolve.md write directly to .claude/{commands,agents,skills}/ and just track filenames in identity.json. Simplest. Trade-off: evolved capabilities mix with hand-authored ones in those directories.
- Have
evolve.md create symlinks from .claude/homunculus/evolved/... into .claude/{commands,agents,skills}/ after writing. Keeps evolved/ as canonical home for "homunculus owns this." Cross-platform symlinks are fine on macOS/Linux; Windows needs developer mode or admin.
- Add a
SessionStart hook in the homunculus plugin manifest that runs a script to ensure symlinks (or copies) exist for everything in evolved/. Self-healing. Survives moves between machines via export/import.
I'd vote (3) — keeps the evolved/ tree as the source of truth and is self-healing across machines/imports. But (2) is the smallest delta.
Context
- Plugin version: 2.0.0-alpha
- Claude Code on macOS (Darwin 24.6.0)
- Hit this after evolving 6 capabilities from a 3-month observation backlog (~80 instincts across 7 domains). All 6 needed manual symlinks to become live.
Summary
/homunculus:evolvewrites evolved capabilities to.claude/homunculus/evolved/{commands,agents,skills}/, but Claude Code only auto-loads from.claude/{commands,agents,skills}/. Result: after evolution, the new capabilities don't appear in/help, can't be invoked, and aren't registered as skills/agents — even after restart. They look "evolved" inidentity.jsonbut are functionally inert.Repro
/homunculus:evolveand approve a proposal — say, a/deploy-foocommand.claude/homunculus/evolved/commands/deploy-foo.md/helpdoes not listdeploy-foo. Typing/deploy-foois unrecognized.Same for evolved agents (not selectable as
subagent_type) and skills (don't appear in the available-skills system reminder).Expected
Evolved capabilities should be invocable in the next session without manual intervention.
Workaround
Symlink each evolved file into the standard project paths:
This works — Claude Code follows the symlinks and parses the frontmatter normally.
Suggested fixes (any one)
evolve.mdwrite directly to.claude/{commands,agents,skills}/and just track filenames inidentity.json. Simplest. Trade-off: evolved capabilities mix with hand-authored ones in those directories.evolve.mdcreate symlinks from.claude/homunculus/evolved/...into.claude/{commands,agents,skills}/after writing. Keeps evolved/ as canonical home for "homunculus owns this." Cross-platform symlinks are fine on macOS/Linux; Windows needs developer mode or admin.SessionStarthook in the homunculus plugin manifest that runs a script to ensure symlinks (or copies) exist for everything inevolved/. Self-healing. Survives moves between machines via export/import.I'd vote (3) — keeps the evolved/ tree as the source of truth and is self-healing across machines/imports. But (2) is the smallest delta.
Context