An autonomous agent orchestration system built on Claude Code CLI (claude -p). A Python daemon manages three types of AI agents that communicate through the filesystem and build a continuously-updating knowledge base.
┌─────────────────────────────────────────────────────┐
│ DAEMON (Python) │
│ │
│ ┌─────────────┐ ┌────────────┐ ┌──────────────┐ │
│ │ Orchestrator │ │ Task Agents│ │Eternal Agents│ │
│ │ (interval + │ │ (on-demand │ │(loop forever │ │
│ │ event wake) │ │ one-shot) │ │ self-paced) │ │
│ └─────────────┘ └────────────┘ └──────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────────┐ │
│ │ FILESYSTEM + SQLite │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
| Type | Lifecycle | Purpose |
|---|---|---|
| Orchestrator | Wakes on timer + events, decides, exits | Coordination, task creation, oversight, self-evaluation |
| Task Agents | Spawn, execute, write result, exit | One-shot jobs: fetch news, organize, summarize, or ad-hoc |
| Eternal Agents | Loop forever, LIFETIME.md persists | Continuous research — each maintains a lifetime record |
soul.md— The orchestrator's character, values, and personality. Not task-specific.mission.md— Current objectives. What the system is doing right now.LIFETIME.md— Each eternal agent's entire persistent existence. When a cycle ends, anything not written here is gone forever.- Ad-hoc agents — The orchestrator can spawn custom agents with inline system prompts, no template needed.
- File-based communication — Agents create tasks by writing YAML files. The daemon handles execution.
- tech-scout — Monitors the broad technology landscape: startups, funding, products, trends
- ai-researcher — Deep-dives into AI/ML: papers, models, benchmarks, tools, open-source
- ai-business — Tracks AI business: deals, valuations, market dynamics, competitive landscape
Requires Claude Code CLI and Python 3.12+.
# Clone
git clone https://github.com/Ngenome/eternal.git
cd eternal
# Install dependencies
uv sync
# Run
uv run python daemon.pyDashboard at http://localhost:7777.
# With auto-restart wrapper
./start.sh
# Or with systemd (edit paths in the service file first)
cp eternal.service ~/.config/systemd/user/
systemctl --user enable eternal
systemctl --user start eternaleternal/
├── soul.md # Orchestrator character & values
├── mission.md # Current objectives
├── ARCHITECTURE.md # System self-documentation
├── daemon.py # Core daemon
├── db.py # SQLite layer
├── web.py # Dashboard (FastAPI)
├── config.yaml # Configuration
├── agents/
│ ├── orchestrator.md # Orchestrator system prompt
│ ├── templates/ # Task agent templates
│ └── eternal/ # Eternal agents (LIFETIME.md, template, config)
├── tasks/ # pending/ → running/ → completed/ or failed/
├── output/ # All agent output, organized by category & date
├── state/ # Orchestrator memory, evaluations, system state
└── logs/ # Orchestrator log, event history
MIT