File & directory layout

A reference for what Friday writes, where, and what's safe to delete. Useful when you're debugging odd behavior, backing up state before a clean reinstall, or wiping the slate to start fresh.

Friday's state lives in two places:

  • Per user, under ~/.friday/. Settings, session state, checkpoints, snapshots, and plugin clones. Override the location with the FRIDAY_HOME env var. See Environment variables.
  • Per project, in the repo itself. Project rules (agents.md), and discovery roots for skills, commands, and subagents (.agents/, .claude/).

Sibling worktree directories created by friday --wt live next to the repo, not under ~/.friday/.

Per-user state under ~/.friday/

~/.friday/
├── .user_preferences.yaml                     # global settings (hidden file, YAML)
├── checkpoints/<repo>/<timestamp>__<label>/   # resumable session state
│   ├── orchestrator/
│   └── workers/<thread_id>/
├── workspaces/<session_id>/                   # live session state
│   ├── threads/<thread_id>/worktree/          # per-thread worktree (GIT mode)
│   ├── tasks/                                 # session task store (one *.json per task)
│   └── merge_queue.json                       # persisted merge queue
└── snapshots/<repo>/                          # debug artifacts

~/.agents/
└── plugins/
    ├── known_marketplaces.json                # registry of installed marketplaces
    └── marketplaces/<name>/                   # cloned plugin marketplaces
PathWhat it isTouch with careSafe to delete
~/.friday/.user_preferences.yamlThe global settings file (YAML, hidden). Edited by /settings or by hand. Holds working style, agent model, approval mode, MCP instances, and per-project overrides. API keys are NOT stored here; the proxy uses gh auth token.Yes, you'll lose your preferences.Only if you want to reset all settings.
~/.friday/checkpoints/<repo>/<ts>__<label>/Resumable session state per repo. /load-checkpoint reads from here. Capped at 20 newest per repo.Older checkpoints rotate out automatically.Yes. You lose the ability to resume past sessions. Live work is unaffected.
~/.friday/workspaces/<session_id>/Live state for a running session. Removed at clean shutdown. Stale dirs older than 30 days are pruned at startup.Don't delete while a session is running.Yes, when no Friday process is using the session.
~/.friday/workspaces/<session_id>/threads/<thread_id>/worktree/Per-thread git worktree in GIT mode. Each worker edits here on branch friday/thread/<thread-id>. Cleaned up after merge or session end.Don't touch while the thread is RUNNING.Yes, but use git worktree remove so git's metadata stays consistent. See Worktrees.
~/.friday/workspaces/<session_id>/merge_queue.jsonThe persisted FIFO merge queue. A restart mid-merge reads this back.Don't edit by hand mid-session.Yes, when the session is not running. You lose any pending merges.
~/.friday/workspaces/<session_id>/tasks/Session task store. One <task_id>.json file per task in the current session. Friday writes here as tasks are created and updated.Don't touch while the session is running.Yes, when the session is not running.
~/.friday/snapshots/<repo>/Debug snapshots written before and after compression and at session end. Capped at 50. For engineering investigation, not for resuming work.No.Yes, any time.
~/.agents/plugins/marketplaces/<name>/Cloned plugin marketplaces managed via /plugin-marketplace. The registry of known marketplaces lives next door at ~/.agents/plugins/known_marketplaces.json.Re-cloning is cheap.Yes. Reinstall plugins from /plugin-marketplace after.

Per-project files in the repo

These files are read from your project root (and a few user-global fallbacks). Friday never writes here on its own. You commit what you want shared.

<project-root>/
├── agents.md                                  # project rules (current convention)
├── .fridayrules                               # legacy fallback for project rules
├── .agents/                                   # discovery root (skills/commands/agents/plugins)
│   ├── skills/
│   ├── commands/
│   ├── agents/
│   └── plugins/
└── .claude/                                   # Claude-compatible discovery root (same kinds)
    ├── skills/
    ├── commands/
    ├── agents/
    └── plugins/
PathWhat it is
<project>/agents.mdProject rules, inlined into every Friday session's system prompt in this repo. Plays the role CLAUDE.md plays in Claude Code, but Friday only reads files named agents.md (or .fridayrules as a fallback); it does NOT read CLAUDE.md. Generated or updated with /agentsmd. See agents.md & project rules.
<project>/.fridayrulesLegacy fallback for project rules. Friday reads this only when agents.md is absent. New projects should use agents.md.
<project>/.agents/Project-level discovery root for skills, commands, subagents, and plugins. Friday does NOT read agents.md from inside this directory; project rules live at the repo root.
<project>/.claude/Claude-compatible discovery root. Friday reads skills/, commands/, agents/, and plugins/ from here as a fallback to .agents/, so projects already configured for Claude Code keep working.

User-global fallbacks for skills, commands, and subagents live at ~/.agents/ and ~/.claude/. Resolution is first-found-wins: project .agents/, then project .claude/, then ~/.agents/, then ~/.claude/, then plugins.

User-global project rules live at ~/.agents/agents.md. Friday inlines them on every session in addition to the project's own agents.md. There is no Claude-style fallback: Friday does NOT read ~/.claude/CLAUDE.md.

Per-thread worktrees

Inside a session, every thread in GIT mode runs in its own git worktree on branch friday/thread/<thread-id> at ~/.friday/workspaces/<session_id>/threads/<thread_id>/worktree/. Threads can't see each other's changes or your uncommitted work. The merge queue cherry-picks finished thread branches back onto your current branch. See Worktrees for the full mechanism.

You don't manage these directly. They're created when a thread spawns and removed when the thread merges or the session exits cleanly.

--wt worktrees

friday --wt creates a sibling worktree next to your repo:

~/projects/
├── my-app/                                    # your original checkout
└── my-app.worktree.20241024-143000/           # the --wt worktree (auto-removed at exit)

This is a different mechanism from per-thread worktrees. The --wt worktree is the working directory for the whole session; per-thread worktrees nest inside it. See Parallelize work with worktrees for the recipe and Worktrees for the flag reference.

Uncommitted edits at exit are auto-committed with WIP: auto-commit from worktree cleanup and the worktree directory is removed. The branch stays in your git history.

Cleanup: getting back to a clean slate

  • Wipe everything Friday-related. rm -rf ~/.friday/ ~/.agents/plugins/. You lose settings, checkpoints, snapshots, the merge queue of any in-flight session, and cloned plugin marketplaces. Project files in your repos are untouched. (API keys are not stored anywhere by Friday; auth is via gh auth token.)
  • Keep settings, drop state. Remove ~/.friday/workspaces/, ~/.friday/snapshots/, and ~/.friday/checkpoints/. Keep .user_preferences.yaml and ~/.agents/plugins/.
  • Drop just the debug artifacts. Remove ~/.friday/snapshots/. Safe at any time.
  • Drop one stale session. Remove ~/.friday/workspaces/<session_id>/ after confirming no Friday process is attached to it. Stale dirs older than 30 days clean up automatically at startup.
  • Reset plugins. Remove ~/.agents/plugins/ and re-add from /plugin-marketplace.
  • Uninstall the binary. brew uninstall friday. State under ~/.friday/ stays put unless you also remove it manually. See Installation.

Read next