v0.9.3 — Async Daemon
What's new in v0.9.3
synlynk is now always-on. Agents can pull context without invoking the CLI each time.
synlynk daemon
synlynk daemon start # fork-daemonize, write .synlynk/daemon.pid
synlynk daemon stop
synlynk daemon status # running/stopped + queue depth + HTTP URL
synlynk daemon restart
synlynk daemon --install-service # register with launchd / systemd / crontab
synlynk daemon --uninstall-service
HTTP API — localhost:27471
| Method | Path | Description |
|---|---|---|
| GET | /context |
Current context.md |
| GET | /status |
Uptime, queue depth, pid |
| GET | /jobs |
All jobs (filter with ?status=) |
| GET | /jobs/<id> |
Single job + log tail |
| POST | /dispatch |
Enqueue a job |
| GET | /stories |
Story list |
| GET | /stories/<id> |
Single story |
| GET | /capability |
Capability ratings |
| GET | /sentinel |
Active sentinel alerts |
| POST | /checkpoint |
Force context regeneration |
Persistent job queue
daemon_jobstable instate.db— survives restarts- Priority 1–10, dependency chains via
depends_onJSON array - Zombie-safe process reaping via
os.waitpid(WNOHANG) - Per-job commit — crash mid-dispatch never produces duplicate runs
Service installation
- macOS: launchd plist →
~/Library/LaunchAgents/com.synlynk.daemon.plist - Linux: systemd user unit →
~/.config/systemd/user/synlynk-daemon.service - Fallback:
@rebootcrontab entry
432 tests passing. Full changelog: CHANGELOG.md