Sandbox
@humanplane/homunculus

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.

389 stars44 forksShellUpdated 7mo ago
Who it's for

Builders who use Claude Code and want a plugin that remembers and reshapes how they work.

What it delivers

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

  1. 1Run
    # Add the marketplace
    /plugin marketplace add humanplane/homunculus
    
    # Install the plugin
    /plugin install homunculus@homunculus
    
    # Birth it
    /homunculus:init

README

Homunculus

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.

v1v2
Skills try to observe (unreliable)Hooks observe (100%)
Analysis in main contextAnalysis in background agent (Haiku)
Evolves big chunks (commands/skills)Evolves instincts first, clusters into bigger things
No sharingExport/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

CommandWhat It Does
/homunculus:initBirth or wake
/homunculus:statusCheck in (includes journey)
/homunculus:evolveCreate capability from clustered instincts
/homunculus:exportShare instincts
/homunculus:importAdopt instincts

5 commands. Everything else is automatic.


Skills

SkillWhen It Activates
session-memorySession start — spawns observer, loads context
instinct-applyDuring work — surfaces relevant instincts

Reliability

WhatReliability
Observation capture (hooks)100%
Observer agent (session start)100%
Instinct creation100%
Commands100%
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:

DomainExamples
code-styleFunctional patterns, naming conventions
testingTest-before-commit, coverage requirements
gitCommit message format, branch naming
debuggingError→fix sequences, logging preferences
file-organizationWhere to put things
toolingTool sequences, preferred tools
communicationComment 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

Repository payload14 top-level entries
  • .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 it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More plugins

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

138k
1 add

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.

82k
code-yeongyu/
oh-my-openagent

OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.

69k

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

94k

Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns

4.3k