Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.
Claude Code plugin for learned work patterns
Homunculus is a Claude Code plugin that captures prompts and tool use, then turns repeated behavior into instincts. Those instincts can later cluster into bigger pieces like commands, skills, or agents, with hooks handling observation and a background agent handling analysis.
Builders who use Claude Code and want a plugin that remembers and reshapes how they work.
You can let your Claude Code setup learn from repeated actions instead of re-explaining your habits every session.
What it does
Hook-based observation
Uses hooks to capture prompts and tool use reliably on every session.
Instinct learning
Turns repeated behavior into small YAML-defined instincts with triggers, actions, confidence, and domain tags.
Background analysis
Runs an observer agent to scan observations, create instincts, and flag clustering.
Evolution commands
Provides `/homunculus:init`, `/homunculus:status`, `/homunculus:evolve`, `/homunculus:export`, and `/homunculus:import`.
Shared memory files
Stores identity, observations, instincts, and evolved outputs under `.claude/homunculus/`.
Personality modes
Adapts its tone and behavior after birth based on whether you want technical, semi-technical, non-technical, or chaotic handling.
How to get it
- 1Run
# Add the marketplace /plugin marketplace add humanplane/homunculus # Install the plugin /plugin install homunculus@homunculus # Birth it /homunculus:init
README
Homunculus

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.
Quick Start
# Add the marketplace
/plugin marketplace add humanplane/homunculus
# Install the plugin
/plugin install homunculus@homunculus
# Birth it
/homunculus:init
What Is This?
Homunculus 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 vs v2: What Changed and Why
The Problem with v1
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"
The v2 Solution
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 |
The Instinct Model
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.
The Growth Path
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.
Architecture
File Structure
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
Data Flow
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.
Commands
| 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.
Skills
| Skill | When It Activates |
|---|---|
session-memory | Session start — spawns observer, loads context |
instinct-apply | During work — surfaces relevant instincts |
Reliability
| 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.
Instinct Domains
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.
Sharing Instincts
# 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.
Testing
Run the test suite:
./plugins/homunculus/scripts/test-homunculus.sh
Tests 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
Adapts To You
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.
Make It Yours
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.md
The homunculus you end up with should feel like something you grew—because you did.
Landing Page
There's a landing page in /landing (React + Tailwind). Run it:
cd landing && npm install && npm run dev
MIT License
A small thing, growing toward the light.
Files in the repo
- .claude-plugin
- landing
- plugins
- scripts
- .gitignore
- .mcp.json
- CLAUDE.md
- cover.png
- demo-evolve.tape
- demo.tape
- evolve-v2.tape
- evolve-v3.tape
- evolve.tape
- README.md
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More plugins

Graphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.
Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns
Teams-first Multi-agent orchestration for Claude Code