| Crates.io | raskell-kage |
| lib.rs | raskell-kage |
| version | 0.1.4 |
| created_at | 2026-01-03 16:20:13.316886+00 |
| updated_at | 2026-01-03 16:20:13.316886+00 |
| description | Shadow agents for autonomous code work - a local-first agentic work orchestrator |
| homepage | |
| repository | https://github.com/raskell-io/kage |
| max_upload_size | |
| id | 2020417 |
| size | 1,665,573 |
A local-first agentic work orchestrator.
Shadow agents working invisibly, executing with precision.
Kage enables Claude Code agents to work autonomously while you're away, share context with each other, and scale across multiple repositories.
# Install via script
curl -fsSL https://kage.raskell.io/install.sh | sh
# Or via Cargo
cargo install kage
# Or via Docker
docker pull ghcr.io/raskell-io/kage:latest
# Run
kage daemon start
kage agent spawn --repo ~/code/myproject
| Feature | Description |
|---|---|
| Supervisor Pattern | Spawn agents with goals, monitor progress, enforce limits |
| Event Sourcing | Immutable audit trails, replay, time-travel queries |
| Namespace Organization | Group repos, share context across agents |
| Two-Tier Memory | Working memory + persistent long-term storage |
| Multi-Subscription | Pool multiple Claude subscriptions for parallel scaling |
| Single Binary | Zero dependencies, just download and run |
Running a single Claude Code session is straightforward. But what happens when you need agents working across multiple repositories? When you want to step away and let them work autonomously? When they need to share what they've learned?
Kage solves these problems with a supervisor architecture:
┌─────────────────────────────────────────────────────┐
│ Kage Daemon │
├─────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Agent 1 │ │ Agent 2 │ │ Agent 3 │ │
│ │ (Claude) │ │ (Claude) │ │ (Claude) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Memory Store │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Working │ │ Long-term │ │ │
│ │ │ Memory │ │ Memory │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Subscription Pool │ │
│ │ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ │
│ │ │ S1 │ │ S2 │ │ S3 │ │ S4 │ ... │ │
│ │ └────┘ └────┘ └────┘ └────┘ │ │
│ └───────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
Kage uses TOML for configuration with layered precedence:
CLI flags > Environment > Task-specific > Namespace > Global
# ~/.config/kage/config.toml
[daemon]
socket = "/tmp/kage.sock"
log_level = "info"
[defaults]
max_iterations = 50
checkpoint_interval = 10
[namespaces.backend]
repos = [
"~/code/api-server",
"~/code/auth-service",
]
memory_sharing = "full"
kage daemon start # Start the daemon
kage daemon stop # Stop the daemon
kage daemon status # Check daemon status
kage agent spawn # Spawn a new agent
kage agent list # List active agents
kage agent attach <id> # Attach to an agent
kage agent kill <id> # Kill an agent
kage task add "<goal>" # Add a new task
kage task list # List tasks
kage task status <id> # Check task status
kage task resume <id> # Resume a paused task
kage memory search "<query>" # Search memories
kage memory list # List recent memories
kage memory inject <target> --from <source> # Share context
| Purpose | Path |
|---|---|
| Global config | ~/.config/kage/config.toml |
| State directory | ~/.local/share/kage/state/ |
| Daemon logs | ~/.local/share/kage/logs/ |
| Unix socket | /tmp/kage.sock |
| Per-project config | .kage/config.toml |
Secrets (API keys) are stored in your OS keychain, never in plaintext files.
Full documentation is available at kage.raskell.io/docs.
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Apache 2.0 — see LICENSE for details.