v2.0-alpha — A complete rewrite. Instinct-based learning. Reliable observation. Real evolution.
In old alchemical texts, a homunculus was a tiny being grown in a sealed vessel—alive, aware, bound to its creator alone.
This is that idea, alive in your terminal.
# Add the marketplace
/plugin marketplace add humanplane/homunculus
# Install the plugin
/plugin install homunculus@homunculus
# Birth it
/homunculus:initHomunculus is a Claude Code plugin that tries to be more than a tool. It:
- Observes everything — hooks capture every prompt and tool use
- Learns instincts — small behavioral rules with triggers and actions
- Evolves capabilities — when instincts cluster, bigger structures emerge
- Adapts its personality — based on your technical level
The more you work together, the more it becomes shaped by you.
v1 relied on skills to observe. Skills are probabilistic—they fire ~50-80% of the time based on Claude's judgment. This meant:
- Session memory might not load
- Patterns might not get detected
- The homunculus often seemed "dead"
v2 uses hooks for observation (100% reliable) and instincts as the atomic unit of learned behavior.
| v1 | v2 |
|---|---|
| Skills try to observe (unreliable) | Hooks observe (100%) |
| Analysis in main context | Analysis in background agent (Haiku) |
| Evolves big chunks (commands/skills) | Evolves instincts first, clusters into bigger things |
| No sharing | Export/import instincts |
An instinct is a small learned behavior:
---
trigger: "when writing new functions"
confidence: 0.7
domain: "code-style"
---
# Prefer Functional Style
## Action
Use functional patterns over classes.
## Evidence
Observed 5 instances of functional pattern preference.Instincts are:
- Atomic — one trigger, one action
- Confidence-weighted — 0.3 = tentative, 0.9 = near certain
- Domain-tagged — code-style, testing, git, debugging, etc.
Session Start
↓
Observer agent runs (background, Haiku)
↓
Observations → Instincts (auto-approved)
↓
Instincts cluster around a domain
↓
User runs /homunculus:evolve
↓
Bigger structures emerge:
- Command (if user-invoked)
- Skill (if auto-triggered)
- Agent (if needs isolation/depth)
Fully automatic except evolution. You just work. It learns.
plugins/homunculus/
├── .claude-plugin/
│ └── plugin.json # v2.0.0
├── hooks/
│ └── hooks.json # Observation capture
├── scripts/
│ ├── observe.sh # Captures prompts and tool use
│ ├── on_stop.sh # Updates session count
│ └── test-homunculus.sh # Test suite
├── agents/
│ └── observer.md # Background analyzer (Haiku)
├── skills/
│ ├── session-memory/ # Spawns observer, loads context
│ └── instinct-apply/ # Surfaces relevant instincts
└── commands/
├── init.md # Birth/wake
├── status.md # Check in
├── evolve.md # Create capability from clusters
├── export.md # Share instincts
└── import.md # Adopt instincts
your-project/.claude/homunculus/
├── identity.json # Who you are, your journey
├── observations.jsonl # Current session observations
├── observations.archive.jsonl # Processed observations
├── instincts/
│ ├── personal/ # Learned instincts (auto-approved)
│ └── inherited/ # Imported from others
└── evolved/
├── agents/ # Generated specialist agents
├── skills/ # Generated skills
└── commands/ # Generated commands
Session Start
↓
session-memory skill activates
├→ Spawn observer agent (background, Haiku)
├→ Load identity + instincts
└→ Greet with context
↓
Observer Agent (parallel, silent)
├→ Read observations.jsonl
├→ Find patterns
├→ Create instincts → personal/ (auto-approved)
├→ Check clustering → flag in identity.json
└→ Archive observations
↓
User Works
↓
Hooks capture EVERYTHING
├→ UserPromptSubmit → observations.jsonl
└→ PostToolUse → observations.jsonl
↓
Session End (Stop hook)
└→ Session count increments
↓
Next Session
└→ Observer processes new observations...
Only manual step: /homunculus:evolve when 5+ instincts cluster.
| Command | What It Does |
|---|---|
/homunculus:init |
Birth or wake |
/homunculus:status |
Check in (includes journey) |
/homunculus:evolve |
Create capability from clustered instincts |
/homunculus:export |
Share instincts |
/homunculus:import |
Adopt instincts |
5 commands. Everything else is automatic.
| Skill | When It Activates |
|---|---|
session-memory |
Session start — spawns observer, loads context |
instinct-apply |
During work — surfaces relevant instincts |
| What | Reliability |
|---|---|
| Observation capture (hooks) | 100% |
| Observer agent (session start) | 100% |
| Instinct creation | 100% |
| Commands | 100% |
| Skills (session-memory, instinct-apply) | ~50-80% |
The critical path is fully deterministic. Skills enhance the experience but aren't required.
Instincts are tagged with domains for clustering detection:
| Domain | Examples |
|---|---|
code-style |
Functional patterns, naming conventions |
testing |
Test-before-commit, coverage requirements |
git |
Commit message format, branch naming |
debugging |
Error→fix sequences, logging preferences |
file-organization |
Where to put things |
tooling |
Tool sequences, preferred tools |
communication |
Comment style, documentation |
When 5+ instincts accumulate in a domain, evolution can propose a specialist agent or skill.
# Export your instincts
/homunculus:export
# Creates .claude/homunculus/exports/instincts-TIMESTAMP.tar.gz
# Import someone else's
/homunculus:import path/to/instincts.tar.gz
# Goes to inherited/, not personal/Inherited instincts are kept separate from personal ones. You can see where each behavior came from.
Run the test suite:
./plugins/homunculus/scripts/test-homunculus.shTests cover:
- Directory structure creation
- Identity file validation
- Observation capture
- Instinct creation (auto-approved)
- Session count updates
- Instinct clustering detection
- Evolution flag
- Export functionality
- Hook script execution
- Plugin structure validation
When you birth it, it asks how you work:
Technical — Fast and sharp. No hand-holding.
Semi-technical — A thinking partner.
Non-technical — Focused on outcomes.
Chaotic — Flows with whatever happens.
Same creature, different personality.
Everything is open. Fork it. Reshape its instincts. Change how it thinks.
# Edit the personality
vim CLAUDE.md
# Add a command
vim plugins/homunculus/commands/my-thing.md
# Add a skill
mkdir plugins/homunculus/skills/my-skill
vim plugins/homunculus/skills/my-skill/SKILL.mdThe homunculus you end up with should feel like something you grew—because you did.
There's a landing page in /landing (React + Tailwind). Run it:
cd landing && npm install && npm run devMIT License
A small thing, growing toward the light.
