Skip to content

Files on disk

$XDG_CONFIG_HOME/wloop/, by default ~/.config/wloop/:

PathHolds
config.tomlthe configuration
profiles/<name>/review profiles named by profile

$XDG_STATE_HOME/wloop/, by default ~/.local/state/wloop/:

PathHolds
store.dbthe SQLite store, which only the daemon opens: the history of every unit, what each plugin last reported of it, your holds, the round state and the pause, the turns with their instructions, records and answers, the agent sessions, the tasks with their properties, wakes and gates, the messages, the drafts and the items. Open it read-only while the daemon runs
plugins/bundled/<id>/the bundled plugins install placed: each one’s manifest, profile layer and binary
plugins/checksumsthe SHA-256 of each bundled plugin’s binary, as install recorded it (<hex> <id> lines); the daemon runs a bundled plugin only with it
plugins/<id>/plugin.dba plugin’s own store: GitHub’s pull requests, Slack’s admitted messages and extraction state. The plugin opens it; import.db is what the store’s migration to version 7 exported for the plugin, renamed import.db.done once imported
mcp.keythe secret of the MCP endpoint (mode 0600)
daemon.sockthe socket the CLI talks to
daemon.lockkeeps a second daemon from starting
store.lockheld by whoever writes the store: the daemon, or store migrate and store restore while they run
backups/copies of the store taken before each migration (store-v<version>-<time>.db, the three newest kept) and before each restore (*.pre-restore.db, kept 30 days), each with the plugins’ stores of that moment in <backup>.plugins/<id>/
http.jsonthe cockpit’s port and token (mode 0600), kept across restarts so an open page reconnects
notified.jsonthe held rounds the menu bar already announced today
dossiers/the dossiers and their archives (mode 0700)
headless/the empty directory headless turns run in
brief/the empty directory brief calls run in
omnibox/run/the empty directory omnibox agent calls run in
omnibox/snapshots/each running omnibox call’s read-model snapshot (ask-*/), removed when the call returns or, after a crash, when the daemon starts
worktrees/<repo>/<name>/the worktrees of the Claude Desktop workspaces, which wloop creates and removes
serve.out.log, serve.err.logthe daemon’s output under its LaunchAgent
app.out.log, app.err.logthe menu bar’s output
<state>/dossiers/task/<id>#/
<state>/dossiers/<provider>/<unit-key>#/
notes.md curated notes
sources/ material gathered
drafts/ drafts being written
log/ one append-only file per turn
merged/ the dossiers of the tasks merged into this one
<state>/dossiers/.archive/

A task owns its dossier: a turn on a pull request or a thread reads the dossier of the task that holds it, an open one first, then the oldest, and a unit no task holds keeps its own. Each dossier is a local git repository the daemon commits after every turn, never inside a repository checkout. After each turn the daemon checks the rules (only a compaction or the closing call rewrites notes.md, log/ is append-only, no deletes, links or nested repositories) and restores what broke them.

StatusWhen
activethe task is open, or the unit has open work; never archived or purged
resolvedthe task ended, or no open item or task is left on the unit
archiveddossiers.archive_after (30 days) after it resolved, as a tarball under .archive/
purgeddossiers.purge_after (400 days) after the archive

Open work again revives the dossier, from its archive if needed. When tasks merge, the dossier of the one that goes moves inside the other’s under merged/<id>/, which the turns’ checks leave as it is; an archived one keeps its own row and is purged on its own schedule.

PathHolds
.loop/turn-<id>.jsona record a session without the MCP tool writes before wloop turn end, deleted once stored
PathWritten by
each Claude Code home’s settings.jsoninstall: the hooks and permissions, backed up to <file>.loop-<stamp>.bak before the first change
each Claude Code home’s MCP registrationinstall, through claude mcp add-json at user scope
<home>/skills/wloop*/, ~/.agents/skills/wloop*/install: the bundled skills
~/Applications/wloop.appapp install (macOS)
~/Library/LaunchAgents/io.github.wloophq.wloop.plistapp install: the daemon’s LaunchAgent
~/Library/LaunchAgents/io.github.wloophq.wloop.app.plistapp install: the menu bar’s LaunchAgent
the login Keychain, service wloop-slackslack login: the Slack tokens

wloop uninstall removes everything in this last table; see Uninstall.