Skip to main content

tale-daemon

Run task work on your own machines with local coding-agent CLIs (Claude Code, Codex) — setup, pacing, isolation, permissions, and failure handling.

2 min read

tale-daemon executes Tale board tasks on a machine you control, using the coding-agent CLIs you already have: Claude Code (claude) and Codex (codex). Bind an agent to a runtime in its configuration and its assigned tasks are dispatched to the daemon instead of Tale's internal model loop; the result lands back on the task as a comment (with a diff stat) and the task parks at In review like any other agent work.

Setup

sh
tale daemon setup    # base URL, API key, workspace, permission ceiling
tale daemon start    # register + claim loop (Ctrl-C drains the run)
tale daemon status   # config, detected CLIs, server connectivity

setup generates a stable daemon identity and stores configuration at ~/.tale-daemon/config.json (mode 600). Use a normal Tale API key (Settings → API → REST); set TALE_DAEMON_API_KEY to keep the key out of the file. Connected daemons appear under Settings → API → Runtimes with live status.

Privacy & permissions

  • Local workspace paths never leave the machine — only the workspace keys you choose are advertised to the server.
  • The effective permission of a run is min(server-configured, daemon ceiling). full_auto (skip-permissions / full sandbox access) therefore requires opting in on both sides. The default is safe.

How runs execute

  • Pacing: the daemon polls for work with server-driven backoff (3 s after work, 15 s idle, capped at 60 s after ten idle minutes — an idle daemon costs about one request per minute). A 15 s heartbeat during runs renews the server lease and picks up cancellations (SIGTERM).
  • Isolation: every run executes in its own git worktree on a tale/run-… branch. Nothing is pushed; the diff stat rides along with the report.
  • Sessions: revision runs (review feedback) resume the previous CLI session where the adapter supports it.

Failure handling

SituationBehavior
No daemon claims a run within 2 minutesRun fails (runtime_offline), task rolls back to To do with a comment
Daemon dies mid-run (lease lost)One retry from a clean worktree, then failure
Run exceeds 30 minutesHard timeout, failure handling as above
CLI exits non-zeroOne retry, then failure with the error excerpt

All external runs share the internal run record, so budgets, concurrency caps, and metrics apply identically.

© 2026 Tale by Ruler GmbH — ISO 27001 & SOC 2 certified.

Tale is MIT licensed — free to use, modify, and distribute.