Skip to content

Evolved capabilities not auto-loaded by Claude Code #14

Description

@proofoftom

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

  1. Have a homunculus with 5+ instincts in some domain (clustering threshold)
  2. Run /homunculus:evolve and approve a proposal — say, a /deploy-foo command
  3. Verify file at .claude/homunculus/evolved/commands/deploy-foo.md
  4. Restart Claude Code
  5. /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)

  1. 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.
  2. 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.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions