Decisions
Decisions
Section titled “Decisions”Why launchd
Section titled “Why launchd”| Option | Verdict |
|---|---|
| launchd | Catches up after sleep, restarts on failure, native macOS |
| OpenClaw cron | Unreliable — silent timeouts, jobs die without logs |
| OpenClaw heartbeat | Non-deterministic — LLM decides what to run, bad for fixed logic |
| crontab | Legacy — misses jobs during sleep, TCC permission issues on macOS 13+ |
launchd is the only scheduler on macOS that compensates for missed runs after sleep. Since the machine is a laptop that sleeps regularly, this is non-negotiable.
Why zero framework
Section titled “Why zero framework”| Framework | Fit for autonomous bash daemons |
|---|---|
| No framework | Correct. Daemons are <200 lines each |
| PydanticAI | Only viable future upgrade — typed output validation |
| LangGraph | Overkill — state graphs for linear tasks is bureaucracy |
| CrewAI | Multi-agent by design — wrong paradigm |
| Mastra | TS-native, good for web apps — daemons aren’t web apps |
| Agno | Good single-agent support, but full SDK for 50-line scripts |
Community consensus (r/AI_Agents, r/LangChain, Langfuse, ZenML): “The ones reliable enough for production are dumb.” Over-abstraction is the #1 cause of failure in production agent systems.
The decision to stay framework-free is deliberate. Each daemon is simple enough to understand in one screen. When complexity grows beyond bash, the migration path is PydanticAI (typed Python) or Mastra (TypeScript, aligns with Next.js stack).
Why “pulse” not “orchestrator”
Section titled “Why “pulse” not “orchestrator””These daemons are autonomous, not orchestrated. The word matters:
- Orchestrator implies central control, multi-agent coordination, dependency management
- Pulse implies health check, heartbeat monitoring, preflight validation
brain-pulse validates conditions and liberates — it doesn’t control what daemons do or how they do it. Each daemon owns its behavior, learnings, and output.
Why read-only
Section titled “Why read-only”All collectors are strictly read-only. They never:
- Send emails
- Create tasks
- Modify external systems
- Execute actions on behalf of the user
Briefings are generated for human review, not auto-acted upon. This is a deliberate constraint based on the Least Agency principle.