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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions