Skip to content

A Claude Code plugin that watches how you work, learns your patterns, and evolves itself to help you better.

Notifications You must be signed in to change notification settings

humanplane/homunculus

Repository files navigation

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.

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.

About

A Claude Code plugin that watches how you work, learns your patterns, and evolves itself to help you better.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •