Skip to content

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

 
 
 

Contributors