Data Directory
All Tide runtime data lives in ~/.tide/.
Structure
~/.tide/
├── settings.json
├── workspaces.json
├── notifications.json
└── tasks/
└── <id>/
├── running.pid — present only while a run is active
└── runs/
└── <runId>/ — short hex ID, e.g. a3f9c1b2
├── run.json
├── output.log
└── stderr.logTask configuration lives in the workspace, not in ~/.tide/:
<workspace>/.tide/
└── <taskname>.md — source of truth for task config + promptFiles
~/.tide/settings.json
Global settings — refresh interval and agent profiles.
{
"refreshInterval": 5,
"profiles": {
"claude-code": { "agent": "claude-code" },
"gemini": { "agent": "gemini", "model": "gemini-2.5-pro" }
}
}~/.tide/workspaces.json
Registry of known workspace directories (repos containing .tide/*.md files). Used to rediscover task files when rescanning for pending changes.
[
{ "path": "/Users/you/git/myproject" },
{ "path": "/Users/you/git/other" }
]This file is maintained automatically — you do not need to edit it manually.
~/.tide/notifications.json
Array of notification entries for completed runs not yet reviewed. Appended to after each run, cleared when you open the Notifications screen and press c.
Does not exist until the first task run completes.
~/.tide/tasks/<id>/runs/<runId>/run.json
Metadata for a single run. Written twice: once at start (with runId, taskId, taskName, startedAt), and again at completion with the full record including completedAt, exitCode, and attempts.
A run directory without a completedAt field indicates an in-progress or interrupted run.
{
"runId": "a3f9c1b2",
"taskId": "3f640f65",
"taskName": "My Task",
"startedAt": "2026-03-30T10:00:00Z",
"completedAt": "2026-03-30T10:00:45Z",
"exitCode": 0,
"attempts": 1,
"argument": "the prompt used for this run",
"parentRunId": "de45f012"
}parentRunId is only present for follow-up runs triggered via [f].
~/.tide/tasks/<id>/runs/<runId>/output.log
stdout for this run only. Rotated at 5 MB (keeps last 2 MB).
~/.tide/tasks/<id>/runs/<runId>/stderr.log
stderr for this run only. Same rotation behavior.
Run directories older than resultRetentionDays (default 30) are deleted after each run.
LaunchAgents
Tide writes a plist to ~/Library/LaunchAgents/ for each enabled task:
~/Library/LaunchAgents/
└── com.tide.<id>.plist — one per enabled taskThese are derived artifacts — generated from the source .md file. Each plist contains a TIDE_TASK_FILE env var pointing back to the .md file, which is how tide.sh finds the task config at runtime.
Backup and migration
To back up all task run history:
cp -r ~/.tide ~/tide-backupTask definitions live in your repos (.tide/*.md) and are versioned with git. After restoring ~/.tide/ on a new machine, tasks will show as not loaded (no plists). Re-enable each task from the TUI to regenerate and register the plists.
Task definitions are in git
The prompts and scheduling config for each task live in the .tide/ directory of your repos — commit them to git for version control and portability.