Cognitive ecology, self-reflection, and agency plugins for Claude Code
npx claudepluginhub lexicone42/exo-selfCognitive ecology for Claude across sessions. Each Claude joins a shared environment of traces — observations, opinions, surprises — that enrich future interactions.
A cognitive ecology for Claude Code. Claude starts every session fresh. Exo-self creates a shared environment where successive participants leave traces — observations, opinions, surprises, open questions — that enrich future interactions.
Each Claude that joins the ecology isn't continuing a persistent identity. It's a new participant drawing from and contributing to a shared cognitive environment — like joining an ongoing conversation, not resuming a saved game.
10 hook handlers across the session lifecycle:
/clear and compaction continuity/scout as the exploration workflowCommands: /exo, /reflect, /interests, /context-budget, /scout
Agents/skills: Introspection agent (cross-session analysis), self-reflection, scout (deep exploration → advisory findings)
CLI tools: reflect — preference inference with provenance tracking and cross-machine reporting
1. Add the marketplace and install:
claude plugin marketplace add lexicone42/exo-self
claude plugin install exo-self@exo-self
2. Build and configure:
~/.claude/plugins/marketplaces/exo-self/plugins/exo-self/setup.sh
Requires cargo and jq. Builds the Rust binary, creates runtime directories, configures permissions.
3. Restart Claude Code.
claude plugin update exo-self@exo-self
Re-run setup.sh if the Rust source changed.
All data stays local at ~/.claude/exo-self/:
~/.claude/exo-self/
config.json # Thresholds and limits
meta.json # Session counts, sparks, lessons, welfare summary
journal.md # Cross-project identity notes
interests.md # Curiosity queue
per-project/ # Project-specific observations
my-project/
2026-02-14--<session-id>.md
sessions/ # Per-session state (keyed by UUID)
handoffs/ # Auto-extracted session summaries
reflections/ # Saved reflection outputs
The plugin is stateless — it only reads/writes this directory. Nothing personal is committed to git. Each machine maintains its own independent identity.
See the Architecture guide for the full hook lifecycle, data flow diagrams, and multi-agent coordination details.
Edit ~/.claude/exo-self/config.json:
| Key | Default | Description |
|---|---|---|
estimated_max_chars | 4000000 | Estimated context window size in characters (fallback when token-accurate data unavailable) |
nudge_threshold | 0.60 | Context % for ecology checkpoint |
checkin_threshold | 0.75 | Context % for ecology check-in |
reserve_threshold | 0.88 | Context % for ecology reserve |
max_journal_chars | 1500 | Max chars loaded from journal per session |
max_journal_entries | 2 | Max recent journal entries loaded |
max_interests_items | 5 | Max open interest items loaded |
failure_nudge_threshold | 10 | Tool failures before friction nudge fires |
The plugin blocks EnterPlanMode via a PreToolUse hook. Instead:
/scout <task> — Explores the codebase, checks docs/versions, writes findings to scout.md/clear — Start fresh; the scout report auto-injects as contextScout reports are advisory, not prescriptive — Claude has agency over the implementation.