This repository contains a reusable agent runtime plus its own method memory for a shared daily-notes -> doc -> sop promotion chain.
Each run serves one active memory_root.
- repo-local runs default to this repository's own
memory/ - external
agent-runtime.*overlays may point the runtime at another workspace memory tree
main.py- unified scheduler entrypoint and the only poller in the formal system
config.yaml- repository-default scheduler settings
memory/doc/- design docs and methodology docs for the runtime
memory/daily-notes/- ongoing evolution notes for this repository
- filename format:
YYYY-MM-DD-<index>-<title>.md
memory/.agents/- repo-local runtime artifacts when the active
memory_rootis this repository's ownmemory/
- repo-local runtime artifacts when the active
<agent-name>/- one self-contained agent workspace with
agent.jsonandsystem.md
- one self-contained agent workspace with
runners/- launcher adapters such as
codex
- launcher adapters such as
lib/- shared runner-side utilities
main.py coordinates the full notes -> doc -> sop chain. Agents do not poll on their own.
note-relationreads the shared daily-notes layer and writes machine-readable work orders into<memory_root>/.agents/note-relation/work-orders/doc-maintenanceconsumes upstream note-relation work orders and writes downstream work orders into<memory_root>/.agents/doc-maintenance/work-orders/sop-promotionconsumes upstream doc-maintenance work orders and writes promotion results into<memory_root>/.agents/sop-promotion/work-orders/
The scheduler handles polling, wakeup, and dependency-aware execution order. Agents exchange data through runtime work-order files instead of introducing a new long-term memory layer.
main.py only wakes agents and passes context. Each agent still inspects its own scope and decides the concrete processing set.
Agent launch is runner-agnostic.
agent.jsondeclareslauncher.kindandlauncher.configmain.pyresolves the launcher adapter underrunners/- launcher-private files live under
<memory_root>/.agents/<agent-id>/launchers/<launcher-kind>/
Current implementation includes the codex launcher as one adapter, not as the system architecture itself.
config.yaml contains repository-default runtime settings:
watchsleep_secondsmemory_rootdefault_modelagent_modelsshared_memory_pathsagent_task_overrides
The scheduler derives agent runtime state from that active memory root:
<memory_root>/.agents/<agent-id>/state/<memory_root>/.agents/<agent-id>/work-orders/<memory_root>/.agents/<agent-id>/reports/<memory_root>/.agents/<agent-id>/launchers/<launcher-kind>/
When --config is omitted, main.py first looks for an external agent-runtime.yaml, agent-runtime.yml, or agent-runtime.json deployment overlay and otherwise falls back to config.yaml. The active workspace root is derived from the config file location.
python main.py- auto-discovers an external
agent-runtimeconfig first
- auto-discovers an external
python main.py --config path/to/config.yaml- runs with an explicit JSON/YAML config file
- Keep long-term knowledge in
memory/, not in runner-private folders. - Keep durable runtime coordination under the active memory root's
.agents/namespace. - Keep the scheduler decoupled from any one launcher implementation.
- Keep
main.pyresponsible for wakeup and orchestration, not domain judgment. - Keep the
daily-notes -> doc -> sopchain explicit without adding a new long-term memory tier. - Keep repository-local daily notes under
memory/daily-notes/with zero-padded per-day numbering and a short kebab-case title slug.