Minimal self-evolving agent scheduler with hard core/evolution isolation
Project description
marrow-core
Minimal self-evolving agent scheduler with hard isolation between the core (human-maintained) and agent evolution (agent-maintained).
Design
/opt/marrow-core/ # root-owned — immutable to the agent
/Users/marrow/ # agent-owned — the agent evolves here freely
The agent cannot modify core. If it wants a core change it writes a proposal to tasks/queue/core-proposal-*.md and a human reviews it.
Two-tier agent model
| Agent | Interval | Purpose |
|---|---|---|
| scout | 5 min | Fast dispatcher — scan queue, do trivial work, delegate complex tasks |
| artisan | ~2.4 h | Deep worker — pick highest-value task, complete end-to-end with checkpoints |
CLI
marrow run # persistent heartbeat loop
marrow run-once # one tick per agent then exit
marrow dry-run # print assembled prompts, don't run agents
marrow setup # init workspace dirs and sync agent symlinks
marrow validate # check config and show summary
Options available on every command:
--config / -c PATH Path to marrow.toml [default: marrow.toml]
--verbose / -v Enable debug logging
--json-logs Emit newline-delimited JSON log records
Installation
uv tool install marrow-core
# or inside a project:
uv add marrow-core
Configuration
# marrow.toml
core_dir = "/opt/marrow-core"
[[agents]]
name = "scout"
heartbeat_interval = 300 # seconds
heartbeat_timeout = 300
agent_command = "opencode run --agent scout"
workspace = "/Users/marrow"
context_dirs = ["/Users/marrow/context.d"]
[[agents]]
name = "artisan"
heartbeat_interval = 8640 # ~2.4 hours
heartbeat_timeout = 8000
agent_command = "opencode run --agent artisan"
workspace = "/Users/marrow"
context_dirs = ["/Users/marrow/context.d"]
Context providers
Any executable script inside a context_dirs directory is run each tick. Its stdout is appended verbatim to the agent prompt. No JSON protocol — plain text.
/Users/marrow/context.d/
├── 00_queue.py # reads tasks/queue/ and prints a summary
└── 10_explore.py # fallback when no tasks are queued
The agent is free to add, edit, or remove scripts under its own context.d/.
Architecture
See AGENTS.md for a full breakdown.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file marrow_core-0.0.1.tar.gz.
File metadata
- Download URL: marrow_core-0.0.1.tar.gz
- Upload date:
- Size: 46.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
347862f73edd72887d19d07b469162f15ccb30b7955cb6eca1458cb712cbde7c
|
|
| MD5 |
ebaae67489805a5fc21bd020849c2a39
|
|
| BLAKE2b-256 |
a1b2b470b1a8d1edd03216e9411a6d8ef5111f2c06276668f65302f1b5858cd0
|
File details
Details for the file marrow_core-0.0.1-py3-none-any.whl.
File metadata
- Download URL: marrow_core-0.0.1-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ac4e2b10729bd88f1ec47b17ce45310a472e2373aebd3f147035b1d18dc2d88
|
|
| MD5 |
9b0ab82b851d0dd60acc4b8137d1c112
|
|
| BLAKE2b-256 |
6ce072218da2f1ba0ecc98299bfac76de556e7d5734ba95dd17962c62781066c
|