# Dotfiles > My dotfiles for cloud agent environments, starting with Claude Code cloud sessions. # Overview Source: https://cloud.dotfiles.timmo.dev/ The cloud build of my dotfiles, for agent sessions that run in a short-lived cloud VM rather than on one of my machines. It starts with [Claude Code cloud sessions](https://code.claude.com/docs/en/claude-code-on-the-web). It is the [Ubuntu server](https://ubuntu-server.dotfiles.timmo.dev/) build cut down to what a session uses: the compiled `dot` CLI, its pinned toolchain, my Claude Code settings and instructions, and the shared skills. Nothing is stowed and no services run. ```bash # The cloud environment's setup script curl -fsSL https://raw.githubusercontent.com/timmo001/dotfiles/distro/cloud/cloud/setup.sh | bash ``` :::caution[Personal setup] These docs and the public dotfiles are for reference. They are tuned for my own cloud environment and a private overlay that is not public, so pointing your setup script at them is not recommended. Have your agents borrow the ideas you want instead. ::: ## How a session gets set up | Stage | What happens | | --- | --- | | Setup script | Runs once per environment: clones this branch, installs mise and the toolchain, builds `dot` and runs `dot cloud setup`. The environment snapshots the result | | Session start | A Claude Code hook pulls the latest branch, clones the private overlay and adds the global agent instructions | | Session | `dot`, `mise`, the skills and the instructions are ready; repositories attached to the session are cloned under `/home/user` | ## Core | Page | Why | | --- | --- | | [Getting started](/getting-started/) | Create the cloud environment and check it works | | [Claude Code](/claude/overview/) | Settings, instructions, skills and the session start hook | | [Configuration](/configuration/) | What the private overlay provides in a session | | [Distros](/distros/) | The desktop and server builds, with their own docs sites | | [`dot` CLI](/dot/overview/) | The commands that are useful in a session ([command reference](/dot/commands/)) | ## Agents | Page | Why | | --- | --- | | [Overview](/agents/overview/) | How Claude Code, OpenCode and the skills fit together | | [Skills](/agents/skills/) | Shared catalogue and repo-local skills | | [OpenCode](/agents/opencode/overview/) | The OpenCode config this repo publishes | ## This branch | Page | Why | | --- | --- | | [Stow packages](/stow/) | The few packages kept, and why the rest are gone | | [Changes from the desktop](/changes/) | Every file this branch removes, changes or adds | ## Machine-readable docs Build-time [llms.txt](https://llmstxt.org) bundles and a read-only docs MCP, generated from the same source as the site. | URL | Use | | --- | --- | | https://cloud.dotfiles.timmo.dev/llms.txt | Compact page index | | https://cloud.dotfiles.timmo.dev/llms-full.txt | Full docs bundle | | https://cloud.dotfiles.timmo.dev/mcp | Hosted MCP (search, page and navigation) | | `/{route}.md` | One page as Markdown | Ask AI on the site is off. --- # Agents Source: https://cloud.dotfiles.timmo.dev/agents/opencode/agents Agents set the execution posture (permissions, tool access, delegation) for OpenCode sessions. They are loaded from `~/.config/opencode/agents/`. | Agent | Description | | --- | --- | | [`build-ask`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/build-ask.md) | Build agent that executes clear tasks and relies on permissions for write actions | | [`coordinator`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/coordinator.md) | Manages low-context delegated sessions through delivery | | [`general-readonly`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/general-readonly.md) | General-style parallel subagent that researches with read-only tools and a narrow shell inspection allowlist (for delegation from read-only primaries). | | [`grill`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/grill.md) | Read-only planning stress-test agent for light or full round-based grilling | | [`refactorer`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/refactorer.md) | Refactor code while preserving behavior and following local command and skill workflows | | [`researcher-readonly`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/researcher-readonly.md) | Primary-source research subagent that compares claim-specific evidence and cannot delegate further | | [`researcher`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/researcher.md) | Interactive primary-source research agent that compares claim-specific evidence | | [`reviewer`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/agents/reviewer.md) | Reviews code for quality, bugs, security, and best practices | --- # Commands Source: https://cloud.dotfiles.timmo.dev/agents/opencode/commands Commands are thin routing prompts: they name an agent, declare required skills or injected context, and define the output shape. They are loaded from `~/.config/opencode/commands/`. | Command | Description | Agent | | --- | --- | --- | | [`/code-review`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/commands/code-review.md) | Review current work or a pull request with the code-review skill in the read-only reviewer agent | `reviewer` | | [`/commit-push`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/commands/commit-push.md) | Split current changes into coherent commits and push | `default` | | [`/commit`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/commands/commit.md) | Split current changes into coherent commits via the dot git commit gateway | `default` | | [`/grill`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/commands/grill.md) | Stress-test a plan, decision, or idea with light or full question rounds | `grill` | | [`/plan`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/commands/plan.md) | Manual entrypoint to native plan mode from the current conversation context | `plan` | | [`/research`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/commands/research.md) | Research a topic from primary sources and compare evidence where judgement is involved | `researcher` | --- # OpenCode Source: https://cloud.dotfiles.timmo.dev/agents/opencode/overview [OpenCode](https://opencode.ai) is the main interactive agent UI on my machines: sessions, slash commands, plugins, and [Herdr](https://herdr.dev) panes. A cloud session runs [Claude Code](/claude/overview/) instead, but this repo still publishes the config, from `agents/.config/opencode/`. ## Layout | Piece | Why | | --- | --- | | `agents/.config/opencode/` | Agents, commands, `plugins/`, and shared `lib/` | | Shared [skills](/agents/skills/) | Skills repo `main` + repo-local skills (see Skills page) | | Private overlay | Machine-specific OpenCode packages, AGENTS source, and MCP wiring | ## Layers | Layer | Role | | --- | --- | | Agents | Execution posture (permissions, tools, plan mode, delegation) | | Commands | Thin routers: intent, arguments, required skills/context, output shape | | Skills | Reusable workflows and behavioural contracts ([Skills](/agents/skills/)) | | Plugins | Context injection and enforcement hooks (commit context, guards, workflows) | Commands do not own long workflows; skills and plugins do. AGENTS stays to cross-cutting policy that no skill description already carries. ## Sync and publish | Command / flow | Purpose | | --- | --- | | `dot agent sync` | Mirror global AGENTS into other harness instruction files (Cursor, Claude) | | `dot mcp sync` | Regenerate MCP configs from private `mcp.yml`; OpenCode repos opt in via `opencode_mcp` in private `dot-git.yml` | | `dot skills` | Check and apply skill updates from the skills repo | | `dot update` / `dot init` | Run agents-sync (and related refresh) as part of maintenance | ## Runtime Sessions often run inside Herdr panes (OpenCode integration checked by `dot doctor`). The public Zsh config aliases `opencode` to OpenCode 2 (`opencode2`). See [Agents](/agents/overview/) for how the harnesses fit together. ## Reference OpenCode-only generated catalogues (do not hand-edit): | Catalogue | Contents | | --- | --- | | [Agents](/agents/opencode/agents/) | Execution postures | | [Commands](/agents/opencode/commands/) | Slash-command routers | | [Plugins](/agents/opencode/plugins/) | Context and enforcement hooks | Skills: [Skills](/agents/skills/) (catalogue in the skills repo, plus local skills). Regenerate OpenCode catalogues with `mise run docs:gen` after the sources change. The [`dot` command reference](/dot/commands/) is separate (CLI, not OpenCode). --- # Plugins Source: https://cloud.dotfiles.timmo.dev/agents/opencode/plugins Plugins provide context, evidence, or enforcement hooks for OpenCode. Server plugins are loaded from `~/.config/opencode/plugins/`. | Plugin | Description | | --- | --- | | [`commit-context`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/commit-context.ts) | Injects session-attributed commit scope into commit command prompts | | [`context-capture`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/context-capture.ts) | Opt-in capture of the assembled starter context for token profiling | | [`env-protection`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/env-protection.ts) | Blocks direct access to .env files, and any extra secret files listed in env-protection.yml, to prevent leaking secrets | | [`generated-artifact-guard`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/generated-artifact-guard.ts) | Blocks direct mutation of generated dotfiles artefacts | | [`mcp-repo-gate`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/mcp-repo-gate.ts) | Per-repo MCP server gating for OpenCode | | [`notes-guard`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/notes-guard.ts) | Blocks direct file access to the repository notes vault | | [`notification`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/notification.ts) | Rings the terminal bell and plays a sound when an agent finishes or needs permission | | [`pitchfork-dev-server-guard`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/pitchfork-dev-server-guard.ts) | Enforces a project's declared pitchfork dev-server workflow for agents | | [`readonly-subagent-shell-guard`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/readonly-subagent-shell-guard.ts) | Rejects shell syntax that can turn read-only subagent commands into writes | | [`review-handoff-guard`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/review-handoff-guard.ts) | Nudges a session that goes idle with edited files and no change-review-handoff | | [`skill-updates`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/skill-updates/tui.tsx) | Shows the dotfiles, skills and package update counts in the prompt footer, from `dot updates status --json` | | [`subagent-chrome-devtools-guard`](https://github.com/timmo001/dotfiles/blob/distro/arch-omarchy-quattro/agents/.config/opencode/plugins/subagent-chrome-devtools-guard.ts) | Blocks Chrome DevTools tools from delegated subagent sessions | --- # Agents Source: https://cloud.dotfiles.timmo.dev/agents/overview [Claude Code](/claude/overview/) is the harness a cloud session runs. Shared skills live in a separate repo: `dot` keeps a checkout at `~/.local/share/dot/skills`, detached at the latest `main`, and links it into `~/.agents/skills/` and `~/.claude/skills/`. The [OpenCode](/agents/opencode/overview/) config is still published from this repo, though a session doesn't run OpenCode. | Piece | Why | | --- | --- | | [Claude Code](/claude/overview/) | Settings, instructions, skills and the session start hook | | [Skills](/agents/skills/) | Shared catalogue plus repo-local skills | | [OpenCode](/agents/opencode/overview/) | Published OpenCode agents, commands and plugins | --- # Skills Source: https://cloud.dotfiles.timmo.dev/agents/skills Reusable agent workflows live in [timmo001/skills](https://github.com/timmo001/skills). The generated catalogue is [SKILLS.md](https://github.com/timmo001/skills/blob/main/SKILLS.md#skills-catalogue) (name + description per skill). That repo is the source of truth; this docs site does not regenerate a full skills page. | Piece | Why | | --- | --- | | `~/.local/share/dot/skills` | dot-managed checkout of the skills repo, detached at the latest `main` and linked into `~/.agents/skills/` | | `.agents/skills/` | Repo-local skills for this checkout only | | `dotfiles-skills/` | Global skills tied to dotfiles paths or private overlays | | `dot skills` | Validate, import, and update skills from the standalone repo | Edit reusable skills in the skills repo and push to `main`; the next cloud environment build, or `dot update` on a machine, picks them up. In a session, `dot cloud setup` also links them into `~/.claude/skills/`. Do not edit the managed checkout or live `~/.agents/skills` directly. ## Local skills Repo-only skills under `.agents/skills/` (registered via `skills.paths` in `opencode.json`). Shared first-party skills stay in the skills repo catalogue above. | Skill | Role | | --- | --- | | `dotfiles-docs` | Author and maintain the Blume docs site (`docs/`, dotfiles.timmo.dev) | | `cloud-rebase` | Finish rebasing `distro/cloud` onto the server branch when the Cloud rebase workflow can't | | `server-rebase` | Inherited from the server branch, for rebasing it onto the desktop | Harness overview: [Agents](/agents/overview/). OpenCode layers and catalogues: [OpenCode](/agents/opencode/overview/). --- # Changes from the desktop Source: https://cloud.dotfiles.timmo.dev/changes This page compares `distro/cloud` with the default branch, `distro/arch-omarchy-quattro` ([Omarchy desktop](https://dotfiles.timmo.dev/)), from the commit they last shared: `13ddb38`. It moves when this branch changes or is rebased onto the default branch, not on every desktop commit. ## Removed folders Whole top-level folders (mostly stow packages) that this branch does not ship. | Folder | Files | | --- | --- | | [`btop/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/btop) | 2 | | [`chromium-extension/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/chromium-extension) | 7 | | [`cursor/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/cursor) | 2 | | [`editorconfig/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/editorconfig) | 1 | | [`fastfetch/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/fastfetch) | 1 | | [`ghostty/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/ghostty) | 6 | | [`herdr/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/herdr) | 6 | | [`hypr/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/hypr) | 30 | | [`lazygit/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/lazygit) | 1 | | [`neovim/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/neovim) | 3 | | [`omarchy/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/omarchy) | 44 | | [`pacman-hooks/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/pacman-hooks) | 1 | | [`pi/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/pi) | 1 | | [`plannotator/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/plannotator) | 1 | | [`ripgrep/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/ripgrep) | 1 | | [`scripts/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/scripts) | 58 | | [`scripts--laptop/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/scripts--laptop) | 3 | | [`starship/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/starship) | 1 | | [`systemd/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/systemd) | 25 | | [`systemd--laptop/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/systemd--laptop) | 2 | | [`tmux/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/tmux) | 1 | | [`topgrade/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/topgrade) | 1 | | [`uwsm/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/uwsm) | 1 | | [`yazi/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/yazi) | 3 | | [`zsh/`](https://github.com/timmo001/dotfiles/tree/13ddb38af149789c29f800b21e40f46bece4f0cb/zsh) | 2 | ## Removed files 55 files removed from folders that stay. | File | Was | | --- | --- | | `.github/workflows/mise-toolchain.yml` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.github/workflows/mise-toolchain.yml) | | `.github/workflows/quickshell-lint.yml` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.github/workflows/quickshell-lint.yml) | | `.gitmodules` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.gitmodules) | | `docs/public/illustrations/desktop.svg` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/public/illustrations/desktop.svg) | | `docs/src/content/docs/agents/cursor.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/agents/cursor.mdx) | | `docs/src/content/docs/agents/pi.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/agents/pi.mdx) | | `docs/src/content/docs/desktop/ghostty.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/desktop/ghostty.mdx) | | `docs/src/content/docs/desktop/herdr.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/desktop/herdr.mdx) | | `docs/src/content/docs/desktop/hyprland.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/desktop/hyprland.mdx) | | `docs/src/content/docs/desktop/omarchy-shell.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/desktop/omarchy-shell.mdx) | | `docs/src/content/docs/desktop/uwsm.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/desktop/uwsm.mdx) | | `docs/src/content/docs/development/home-assistant.mdx` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/development/home-assistant.mdx) | | `dot/src/commands/LaunchFloatingWebapp.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/LaunchFloatingWebapp.ts) | | `dot/src/commands/LinkGit.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/LinkGit.ts) | | `dot/src/commands/LinkNativeHost.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/LinkNativeHost.ts) | | `dot/src/commands/LinkOpen.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/LinkOpen.ts) | | `dot/src/commands/OmarchyComponents.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/OmarchyComponents.ts) | | `dot/src/commands/OmarchyPlugin.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/OmarchyPlugin.ts) | | `dot/src/commands/PlannotatorInbox.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/PlannotatorInbox.ts) | | `dot/src/commands/PrivatePkgPublish.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/PrivatePkgPublish.ts) | | `dot/src/commands/SetupPrivateRepo.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/SetupPrivateRepo.ts) | | `dot/src/commands/SetupPublicRepo.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/SetupPublicRepo.ts) | | `dot/src/commands/WorkspaceRelayout.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/WorkspaceRelayout.ts) | | `dot/src/commands/WorkspaceSetup.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/WorkspaceSetup.ts) | | `dot/src/doctor/checks/browserExtensions.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/browserExtensions.ts) | | `dot/src/doctor/checks/browserFlags.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/browserFlags.ts) | | `dot/src/doctor/checks/defaultBrowser.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/defaultBrowser.ts) | | `dot/src/doctor/checks/dotLinks.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/dotLinks.ts) | | `dot/src/doctor/checks/fileManager.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/fileManager.ts) | | `dot/src/doctor/checks/hardwareVideo.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/hardwareVideo.ts) | | `dot/src/doctor/checks/omarchy.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/omarchy.ts) | | `dot/src/doctor/checks/omarchyNvim.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/omarchyNvim.ts) | | `dot/src/doctor/checks/pacmanHooks.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/pacmanHooks.ts) | | `dot/src/doctor/checks/retiredApps.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/retiredApps.ts) | | `dot/src/git/commands/Releases.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/commands/Releases.ts) | | `dot/src/git/commands/Web.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/commands/Web.ts) | | `dot/src/git/itemLinks.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/itemLinks.ts) | | `dot/src/git/release/changes.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/release/changes.ts) | | `dot/src/git/release/policy.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/release/policy.ts) | | `dot/src/git/release/publish.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/release/publish.ts) | | `dot/src/git/release/recover.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/release/recover.ts) | | `dot/src/git/release/state.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/release/state.ts) | | `dot/src/git/services/GitReleases.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/services/GitReleases.ts) | | `dot/src/lib/dotLinksExtension.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/dotLinksExtension.ts) | | `dot/src/lib/omarchyCrashCapture.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/omarchyCrashCapture.ts) | | `dot/src/lib/omarchyHost.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/omarchyHost.ts) | | `dot/src/lib/omarchyNvim.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/omarchyNvim.ts) | | `dot/src/lib/omarchyPluginDeployment.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/omarchyPluginDeployment.ts) | | `dot/src/lib/omarchyShellConfig.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/omarchyShellConfig.ts) | | `dot/src/lib/workspaceMutationLock.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/workspaceMutationLock.ts) | | `dotfiles-skills/.agents/skills/omarchy-shell-quickshell/SKILL.md` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dotfiles-skills/.agents/skills/omarchy-shell-quickshell/SKILL.md) | | `omarchy-plugins.json` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/omarchy-plugins.json) | | `tests/dot/git-releases-contract.test.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/git-releases-contract.test.ts) | | `tests/dot/omarchy-plugin-deployment.test.ts` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/omarchy-plugin-deployment.test.ts) | | `tests/scripts/hypr-lua-dispatchers.test.sh` | [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/scripts/hypr-lua-dispatchers.test.sh) | ## Changed files 96 files in both branches with different contents. | File | Compare | | --- | --- | | `.agents/skills/dotfiles-docs/SKILL.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-47821917f2c4eefca26148d8a12cddfca6e0c99a8c341748c49f0778c56a4a26), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.agents/skills/dotfiles-docs/SKILL.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.agents/skills/dotfiles-docs/SKILL.md) | | `.dot-public-packages` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-8941c748d0c207bc289849fdae5a1451fa1f5f4a34f1600a2e5ed38d164a6f32), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.dot-public-packages), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.dot-public-packages) | | `.github/workflows/dot-build.yml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-5161b197a63fef75e726226433cb8dcbf106e484f42f7a64d650541a676e1e9a), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.github/workflows/dot-build.yml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.github/workflows/dot-build.yml) | | `.github/workflows/lint.yml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-107e910e9f2ebfb9a741fa10b2aa7100cc1fc4f5f3aca2dfe78b905cbd73c0d2), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.github/workflows/lint.yml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.github/workflows/lint.yml) | | `.github/workflows/tests.yml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-1db27d93186e46d3b441ece35801b244db8ee144ff1405ca27a163bfe878957f), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.github/workflows/tests.yml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.github/workflows/tests.yml) | | `.gitignore` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.gitignore), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.gitignore) | | `.stowrc` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-c683a06385785fe8ccba263b2d8c397072d5a7713f0ca9d152c7b115b9753e02), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/.stowrc), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/.stowrc) | | `AGENTS.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/AGENTS.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/AGENTS.md) | | `agents/.config/opencode/plugins/notification.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-b0d483ddb448fc8171ac06a96fe6ca0d099ce2b4f2a0b55fe8e4fbc4ba440e52), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/agents/.config/opencode/plugins/notification.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/agents/.config/opencode/plugins/notification.ts) | | `docs/AGENTS.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d00743dc4e878f258330deadcd4008e361276d760b58b672150c54bb1ac9758a), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/AGENTS.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/AGENTS.md) | | `docs/blume.config.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-cfecea3ded8435ff003b01347ba8cef7faf3214e2410d7e73565902a42486a39), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/blume.config.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/blume.config.ts) | | `docs/current-distro.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-836890b11bda0e921106dc12b30e50e335a15188c250c8d7956d5019f0474df7), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/current-distro.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/current-distro.ts) | | `docs/distros.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-53a34c77c3daabbbf3069a7dab2d5d8b1fa830125bc8454f112f1e67756f7fb2), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/distros.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/distros.ts) | | `docs/package.json` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-adfa337ce44dc2902621da20152a048dac41878cf3716dfc4cc56d03aa212a56), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/package.json), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/package.json) | | `docs/README.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-0b5ca119d2be595aa307d34512d9679e49186307ef94201e4b3dfa079aa89938), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/README.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/README.md) | | `docs/scripts/generate-og.mjs` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-9a92fad27ffa6fd09cd74abcc46484ca51f0560221c54342d9ede2d7f8b63313), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/scripts/generate-og.mjs), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/scripts/generate-og.mjs) | | `docs/src/content/docs/agents/opencode/overview.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-4aec8cdc7f6f6a4bd2a971e72f49aff55a3554393d3b4793a554f3cfb9d545e2), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/agents/opencode/overview.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/agents/opencode/overview.mdx) | | `docs/src/content/docs/agents/opencode/plugins.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-bf5bd8f7797f8569e89cf5b574063d63e272a3bb4c1b5620979cb3071568a5f6), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/agents/opencode/plugins.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/agents/opencode/plugins.md) | | `docs/src/content/docs/agents/overview.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-89a4f150193805859ff0c939eb92faab51a8710ca5934ca331158f7aa18fe0e6), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/agents/overview.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/agents/overview.mdx) | | `docs/src/content/docs/agents/skills.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d4e88b9fabaa7ec0a34fe6cf253e4aef48ccbd9a5dbf1769fa6c11689203971c), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/agents/skills.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/agents/skills.mdx) | | `docs/src/content/docs/configuration.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-759a344d87bf5050ab5150ae8c44ccbf21f4d6c6641cb1f2bddc4865dc2db81a), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/configuration.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/configuration.mdx) | | `docs/src/content/docs/distros.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-7a0d2246c1816cdf8345c80bc81b02ae973285d572623e212b6f6171c49a9db0), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/distros.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/distros.mdx) | | `docs/src/content/docs/dot/commands.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-2c25d597c9d7f966a26949d3ad9eee7308912fc51b09c0163adff83192f54f7b), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/dot/commands.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/dot/commands.md) | | `docs/src/content/docs/dot/overview.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d6595cf86c04f99fff3090576ec215daa2c1df8f0619fb41e298ef9c47d9f470), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/dot/overview.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/dot/overview.mdx) | | `docs/src/content/docs/getting-started.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-130a89ed8dd4068e1a366e0a6a31adb124cc60387ba42faadf457e83f9583948), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/getting-started.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/getting-started.mdx) | | `docs/src/content/docs/index.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-ae669176eb85e8e00b8a6b2541c7d55deba8790db6fba3384459244bc8c8e4f7), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/index.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/index.mdx) | | `docs/src/content/docs/stow.mdx` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-159750c1f8298d4995908c2873abd4f23e0fce5019a2042bb60891563386c200), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/src/content/docs/stow.mdx), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/stow.mdx) | | `docs/wrangler.jsonc` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-056b12b16ac353308f67febb92935d1ff90189af6c5fdbcde8edb30ee5181e4d), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/docs/wrangler.jsonc), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/wrangler.jsonc) | | `dot/schemas/dot-git.schema.yml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-846860af793a4f5e51264e0109d7a8ba4dd7551aa0c7d87eb520b52e167f5fc5), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/schemas/dot-git.schema.yml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/schemas/dot-git.schema.yml) | | `dot/src/brief/config.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-016458a8189a5b77328b7efffeeef085401ac5e67b974f268fe5ed52871be5fa), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/brief/config.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/brief/config.ts) | | `dot/src/cli/spec.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-f3fbf206b61561eae411b880c611fd986a8f36f1c23a92193156e4160bcd7f98), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/cli/spec.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/cli/spec.ts) | | `dot/src/commands/Brief.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-65d426fd802921abac678affaa6eb7aadec7243b01ada591f201693c869dca4f), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Brief.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Brief.ts) | | `dot/src/commands/Clean.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-51b21902547c6b30f52318ce3782577aa174a4ff430590089b502899d820bc76), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Clean.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Clean.ts) | | `dot/src/commands/Fans.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-e6a0e2100e9cdcf44e7fe2f5a4a55fd702c6268946f6f24f193a1eab720c81db), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Fans.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Fans.ts) | | `dot/src/commands/HerdrRepoOpen.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d5530c73940046a299fac27a1a0990dc9258ae8d366c11f809bfe0b260ffd675), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/HerdrRepoOpen.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/HerdrRepoOpen.ts) | | `dot/src/commands/HerdrServer.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-532e526e7f0a4449cc02f39c937e5c5169a38b1e316a03f4d85e353b3387e4af), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/HerdrServer.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/HerdrServer.ts) | | `dot/src/commands/Init.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-33f1c5e9c356bcf590fda5c6c3894b161936953d0093a5797e090951f6256d9e), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Init.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Init.ts) | | `dot/src/commands/Install.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a9ea6711c8fcac29338842ef900818f9803cb8c1089089e452ffbcf667ab1793), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Install.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Install.ts) | | `dot/src/commands/Reload.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-02de2b0ec04a19088910d99a73282acd267db878f11ca430d1c96e7cbc4e062e), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Reload.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Reload.ts) | | `dot/src/commands/Services.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-32d3c06067b0a2cd68dfb843b9aaf3822b2ba21af3955f278380ebfb8ea46f01), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Services.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Services.ts) | | `dot/src/commands/SessionQueue.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-4c4ad76407f079fe099f86c3c9c84e9b6305a99990d776be7069cdc7c6589489), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/SessionQueue.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/SessionQueue.ts) | | `dot/src/commands/Stow.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-c6cd27eb50556a19a7a5602d4e5898379da9c7ccfacc8b77e7d958b621b7fe19), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Stow.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Stow.ts) | | `dot/src/commands/SystemUpdate.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-266abd96dbf347f60a462f03073252713662969b109edf8be017a29a222d175c), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/SystemUpdate.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/SystemUpdate.ts) | | `dot/src/commands/Tunnel.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a1cdec9baeaa8397581d3e1a3dbabdf21b56566dec4f53965f9b7de73e87157b), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Tunnel.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Tunnel.ts) | | `dot/src/commands/Update.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-23b76ef1ea8ed1e689ae05780e93e0c0b0e6282d67616db9aec0c4dd98c21059), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Update.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Update.ts) | | `dot/src/commands/Updates.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-0e69ba27770c2b60115cfab343cfc82104d0ab007757537c6c66c961dc0cc3e1), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/commands/Updates.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/Updates.ts) | | `dot/src/doctor/checks/dependencies.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-718970d3f67a86476829dbbb38415ebdfafc2ad80293619c96344698ea5363de), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/dependencies.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/checks/dependencies.ts) | | `dot/src/doctor/checks/firewall.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d71b6e802d21906ef33d7138b61e031f6969766199a1193ce9164bb913cfa57c), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/firewall.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/checks/firewall.ts) | | `dot/src/doctor/checks/packages.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-1d380a1a2dca5e3c4418c3d70e7f960de57cbee45c2eb0f984a239a34d07a514), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/packages.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/checks/packages.ts) | | `dot/src/doctor/checks/pitchfork.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-7a20470e7d8922ea6716dcb7c2b80eba271fab5cbebf4cb655020151aee5bf02), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/pitchfork.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/checks/pitchfork.ts) | | `dot/src/doctor/checks/stow.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-08d72f1c2abf4107aa90b26cce0243d25041b690534af436d3a96120791db629), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/stow.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/checks/stow.ts) | | `dot/src/doctor/checks/systemd.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-6a6572b1b6eacc74cce64eec065bec04383529fc0b37af44f555f2cc4437965f), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/checks/systemd.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/checks/systemd.ts) | | `dot/src/doctor/runner.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-7c50f8fd4c55131b6dc6076557da25f94a01e8ae602ade4ebe6419e7eea663a0), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/doctor/runner.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/doctor/runner.ts) | | `dot/src/git/commands/Issues.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a2a2b08c91c9696343fbe55be40e42d4ceb456f72e3c6d07681940a8b606bb87), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/commands/Issues.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/commands/Issues.ts) | | `dot/src/git/commands/Log.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-e4031dd18bcc15992de40a42c184f397a540e1f5472f0863794ad0e5b068ce19), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/commands/Log.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/commands/Log.ts) | | `dot/src/git/commands/Notifications.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-e2378c535328f23758870446dd3a5c28d41da7ceb54a7e3445aa939e2ec4085b), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/commands/Notifications.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/commands/Notifications.ts) | | `dot/src/git/commands/PullRequests.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-8c53aacbc0d2d6d317a3c6696ba4c77caa532e79995f734720bc1c395117c4f6), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/commands/PullRequests.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/commands/PullRequests.ts) | | `dot/src/git/release/types.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a9e928e80d7bc79d21430640dc730dd41560824eba50f60003371d9cc0856c88), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/release/types.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/release/types.ts) | | `dot/src/git/services/DotDiff.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d142a64314cd2891ef4244666dcf819921f795dc1e8473dbea61c0095b343038), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/services/DotDiff.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/services/DotDiff.ts) | | `dot/src/git/services/GitPullRequests.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-054c9666a0bf8c7aeb202233f0fff17f93c7682294182376a4c8f4ec8273594e), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/git/services/GitPullRequests.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/services/GitPullRequests.ts) | | `dot/src/index.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-bc072944755f1740968a1c0fc0b1d9135f20b5bf1cf59fb2d233b3a913b7896c), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/index.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/index.ts) | | `dot/src/lib/aptPackages.ts` (was `dot/src/lib/archPackages.ts`) | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-ce4a8dde23f5abc5916440737fe5c0f8707a1731292660eeeda2ba35c509a107), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/archPackages.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/aptPackages.ts) | | `dot/src/lib/env.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a0574922bb080de9f606b225b2910eab1d1dcfd244ae35afdb36fc02cd1ccd66), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/env.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/env.ts) | | `dot/src/lib/externalSkills.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-e5e2642358129323d42bc8e99d2ec3748865f9236449b87d63d72e286b0cb2f4), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/externalSkills.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/externalSkills.ts) | | `dot/src/lib/firewallSetup.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-025aa00d5c978d36561681e300080c9b6f325845a19809a3cf54e55370b2d790), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/firewallSetup.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/firewallSetup.ts) | | `dot/src/lib/git.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-ab9155ee5ef178fd2f93aca9d1cf3ef5567a70007b989d76ed6782e3b29e2714), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/git.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/git.ts) | | `dot/src/lib/initState.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-776232c21b2f4ae5ea198b760a762474b1f55ac799af55f2e5f9a41008478265), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/initState.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/initState.ts) | | `dot/src/lib/linkBrowser.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-24927383655c04c921b542a3f8a31d7c6b9798b3cbf59c7348cba77cd167aa5d), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/linkBrowser.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/linkBrowser.ts) | | `dot/src/lib/miseTrust.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-c1431681c6272456105673af059a37bb5cd56b81bc978eef25b93eb787b44c5e), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/miseTrust.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/miseTrust.ts) | | `dot/src/lib/packageSetup.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-31509aea0bf8c8cb56a5a77925b2f047d7eec4280c5010ae9a1c7273dade3ab7), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/packageSetup.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/packageSetup.ts) | | `dot/src/lib/privateGitRepos.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-86a109aeb2cd5f096eb9277172847c8e1975d88d61a32a9178818f2c46bb1148), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/privateGitRepos.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/privateGitRepos.ts) | | `dot/src/lib/stowConflicts.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-35460722e4cb97231646b60b523f60a64e3497c4a383d3a6bc5445aea8119de7), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/stowConflicts.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/stowConflicts.ts) | | `dot/src/lib/stowFolders.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a2a0425b33e3c0dc596b9366930bd8718e76f21b7209a4fca488ea326fb74e7c), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/stowFolders.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/stowFolders.ts) | | `dot/src/lib/stowPackages.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-5440aa31f9a930d867fdbb8433f82b5f6a3bd99585e6fc2c9cacdb9d50a9f523), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/stowPackages.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/stowPackages.ts) | | `dot/src/lib/syncthing.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-1809fb177beae6b220f1397df0a907533af33d24a66dd5e7beb6ffb6a8bea370), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/syncthing.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/syncthing.ts) | | `dot/src/lib/updateMaintenance.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-3b36e56bf8a4e4845facf8a2149ede741bbb9dd88c4c114cb235b2feb637b266), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/lib/updateMaintenance.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/updateMaintenance.ts) | | `dot/src/mcp/commands/McpSync.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-427ebbc8ddb7c2c90405115d3b07ca7f287a272a52acfa6327044dd94527eb20), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/mcp/commands/McpSync.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/mcp/commands/McpSync.ts) | | `dot/src/services/Config.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-56ce6d19c4f2ff616156a3a10f5a466cdc769353812557f2d09dbefbe2dee71a), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/services/Config.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/services/Config.ts) | | `dot/src/services/GitConfig.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-9b81c9c836761105bf896532b42e46a305712303db983744fb0de221e5213d5a), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/services/GitConfig.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/services/GitConfig.ts) | | `dot/src/types.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d7f5e4f72d0652644c550ed48a4c5b0d14534399f6b90fdf622779bbac93a464), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dot/src/types.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/types.ts) | | `dotfiles-skills/.agents/skills/dot-git-commit/SKILL.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-e31d4aeedfadac5a5e9764da8c5557494547f40db8e78828b822a8a97d373ce6), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dotfiles-skills/.agents/skills/dot-git-commit/SKILL.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dotfiles-skills/.agents/skills/dot-git-commit/SKILL.md) | | `dotfiles-skills/.agents/skills/dot-repositories/SKILL.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-783f8ff87f76cedd9b9be46a7c63c5b9f7edc3456101168ccce43bd8f99e12ef), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dotfiles-skills/.agents/skills/dot-repositories/SKILL.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dotfiles-skills/.agents/skills/dot-repositories/SKILL.md) | | `dotfiles-skills/.agents/skills/dot-stow/SKILL.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-3a89ff989b725b75e927bad73f2235d652eb80b404be2f47cb0efed6dc9b2fc6), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/dotfiles-skills/.agents/skills/dot-stow/SKILL.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/dotfiles-skills/.agents/skills/dot-stow/SKILL.md) | | `mise.toml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-3c9056799ce8e353b18de841a8b9c8492d46cb096e063c86fb0ce54cfcd117c2), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/mise.toml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/mise.toml) | | `mise/.config/mise/config.toml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-d21ce4917a135596ad0d792dc1f613a1316ed373af791af2d1028ab90dd92556), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/mise/.config/mise/config.toml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/mise/.config/mise/config.toml) | | `opencode.json` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-33b8bb80766a21fd5894871ffb6e9be4bd034d870629e385cfeecc4589df3bf2), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/opencode.json), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/opencode.json) | | `oxlint.config.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-bb74d47b77763f955ac4f1aa50c369328c445a697494dd8abbeaa650907870ae), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/oxlint.config.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/oxlint.config.ts) | | `pitchfork.toml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-0d6652c3581bab18f35d27f420fa244e3441bf19a655fbbd72a6510d5207ddde), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/pitchfork.toml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/pitchfork.toml) | | `README.md` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/README.md), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/README.md) | | `renovate.json` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-7b5c8955fc544a11b4b74eddb4115f9cc51c9cf162dbffa60d37eeed82a55a57), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/renovate.json), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/renovate.json) | | `tests/dot/git-diff-index-lock.test.sh` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-7aac6566eb24ba24140386b03f4b59dbe92c46ebbc6f05b6395082b775abcbc4), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/git-diff-index-lock.test.sh), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/tests/dot/git-diff-index-lock.test.sh) | | `tests/dot/git-notification-dismissal.test.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-f9608ee1c13ac238b9792dbb38f2991f8e2aa1a7895b38ff5e500ae7ee99906b), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/git-notification-dismissal.test.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/tests/dot/git-notification-dismissal.test.ts) | | `tests/dot/herdr-launch-contract.test.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-f27633817b7015f74c9809cf065402a8aa32b85a97783566e779eafe9852fc7b), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/herdr-launch-contract.test.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/tests/dot/herdr-launch-contract.test.ts) | | `tests/dot/mcp-repositories.test.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-8d0ef969ac3a62ee988cd68338322f8eb4f3415a5546678512003db049ef537c), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/mcp-repositories.test.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/tests/dot/mcp-repositories.test.ts) | | `tests/dot/services-outcomes.test.ts` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-a17bb1fbd2735f3ab018bc20de61387f58ca391f47df66dfda7b639f96502de7), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tests/dot/services-outcomes.test.ts), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/tests/dot/services-outcomes.test.ts) | | `tooling.yml` | [diff](https://github.com/timmo001/dotfiles/compare/13ddb38af149789c29f800b21e40f46bece4f0cb...distro/cloud#diff-987469b4074efadfa7e48b1fefc79466fc6949c9ff90e1a7a544fd7160ba6c4b), [desktop](https://github.com/timmo001/dotfiles/blob/13ddb38af149789c29f800b21e40f46bece4f0cb/tooling.yml), [cloud](https://github.com/timmo001/dotfiles/blob/distro/cloud/tooling.yml) | ## Added files 35 files only on this branch. - [`.agents/skills/cloud-rebase/SKILL.md`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.agents/skills/cloud-rebase/SKILL.md) - [`.agents/skills/server-rebase/SKILL.md`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.agents/skills/server-rebase/SKILL.md) - [`.dot-private.yml`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.dot-private.yml) - [`.dot-public-deb-releases.yml`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.dot-public-deb-releases.yml) - [`.dot-skills.yml`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.dot-skills.yml) - [`.github/workflows/cloud-rebase.yml`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.github/workflows/cloud-rebase.yml) - [`.github/workflows/distro-diff.yml`](https://github.com/timmo001/dotfiles/blob/distro/cloud/.github/workflows/distro-diff.yml) - [`cloud/claude/CLAUDE.md`](https://github.com/timmo001/dotfiles/blob/distro/cloud/cloud/claude/CLAUDE.md) - [`cloud/claude/settings.json`](https://github.com/timmo001/dotfiles/blob/distro/cloud/cloud/claude/settings.json) - [`cloud/setup.sh`](https://github.com/timmo001/dotfiles/blob/distro/cloud/cloud/setup.sh) - [`docs/scripts/generate-distro-diff.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/scripts/generate-distro-diff.ts) - [`docs/src/content/docs/claude/overview.mdx`](https://github.com/timmo001/dotfiles/blob/distro/cloud/docs/src/content/docs/claude/overview.mdx) - [`dot/src/commands/CloudSetup.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/commands/CloudSetup.ts) - [`dot/src/git/services/restPullRequests.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/git/services/restPullRequests.ts) - [`dot/src/lib/cloudSession.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/cloudSession.ts) - [`dot/src/lib/debReleases.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/debReleases.ts) - [`dot/src/lib/notify.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/notify.ts) - [`dot/src/lib/privateSelection.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/lib/privateSelection.ts) - [`dot/src/server/api.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/server/api.ts) - [`dot/src/server/auth.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/server/auth.ts) - [`dot/src/server/Serve.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/dot/src/server/Serve.ts) - [`server/bun.lock`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/bun.lock) - [`server/index.html`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/index.html) - [`server/package.json`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/package.json) - [`server/src/app.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/app.ts) - [`server/src/components/ui/button.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/components/ui/button.ts) - [`server/src/components/ui/icon.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/components/ui/icon.ts) - [`server/src/controllers/atom-controller.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/controllers/atom-controller.ts) - [`server/src/lib/atoms.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/lib/atoms.ts) - [`server/src/lib/utils.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/lib/utils.ts) - [`server/src/mixins/light-dom.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/mixins/light-dom.ts) - [`server/src/pages/services.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/pages/services.ts) - [`server/src/styles/globals.css`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/src/styles/globals.css) - [`server/tsconfig.json`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/tsconfig.json) - [`server/vite.config.ts`](https://github.com/timmo001/dotfiles/blob/distro/cloud/server/vite.config.ts) --- # Claude Code Source: https://cloud.dotfiles.timmo.dev/claude/overview [Claude Code](https://code.claude.com/docs) reads user-level config from `~/.claude/` in a cloud session VM like anywhere else, so `dot cloud setup` puts mine there during the [setup script](/getting-started/). The desktop config lives in the private overlay and expects my machines, so the cloud build keeps its own. | Piece | Source | Why | | --- | --- | --- | | `~/.claude/settings.json` | Link to `cloud/claude/settings.json` | A few permission rules and the session start hook, without the desktop hooks that need stowed OpenCode config and [Plannotator](https://github.com/backnotprop/plannotator) | | `~/.claude/CLAUDE.md` | `cloud/claude/CLAUDE.md`, then the private global `AGENTS.md` | Notes on what the VM has and lacks, ahead of my usual instructions; the notes win where the two disagree | | `~/.claude/skills/` | Links into `~/.agents/skills/` | The shared [skills](/agents/skills/), minus `pkexec-root`, which needs PolicyKit | | `~/.config/dotfiles-private` | Clone, or link to the attached checkout | Private config `dot` reads, such as the tracked repositories | ## Session start The setup script runs before a session has GitHub access, so it can't clone the private overlay unless the session attaches it, and the snapshot it leaves can be days old. The settings run `dot cloud session-start` as a [SessionStart hook](https://code.claude.com/docs/en/hooks#sessionstart) once the session has access: | Step | Why | | --- | --- | | Reset `~/.config/dotfiles` to the latest `distro/cloud` | Picks up branch changes without rebuilding the environment; `dot` rebuilds in the background when commits arrived | | Clone the private overlay | Falls back to a link to the attached checkout | | Rewrite `CLAUDE.md` | So reloads such as compaction see the global instructions | | Pass the global instructions as additional context | Claude Code reads `CLAUDE.md` before hooks run, so a session that started without them gets them this way | The hook prints nothing else and never fails, so a problem can't stop a session starting. Outside a cloud session it does nothing. --- # Configuration Source: https://cloud.dotfiles.timmo.dev/configuration Behaviour prefers CLI flags. Environment variables cover process context and secrets. Private data stays in `~/.config/dotfiles-private`, which a session clones or links once it can reach it. | Piece | Why | | --- | --- | | `cloud/` | The setup script and the Claude Code settings and notes; see [Claude Code](/claude/overview/) | | `.dot-skills.yml` | Shared skills not linked in a session (only `pkexec-root`) | | `.dot-private.yml` | Which parts of the private overlay apply; this build drops the server's repository filter so every tracked repository can be looked up | | Private overlay | Global agent instructions and `dot-git.yml` | | Private file | Role in a session | | --- | --- | | `agents/.config/opencode/AGENTS.md` | Global agent instructions, added to `~/.claude/CLAUDE.md` | | `dot-git.yml` | Tracked repositories for `dot repo`, plus PR and issue tracking settings | Their paths follow my machines' layout, so a repository attached to a session is under `/home/user` instead, and the rest aren't cloned. Flags and env details live in `dot --help` and code. --- # Distros Source: https://cloud.dotfiles.timmo.dev/distros Each machine type lives on its own `distro/*` branch. The default branch is the full Omarchy desktop, and the others are cut-down copies for machines without that desktop. Every branch publishes its own copy of these docs, so each site describes only what that branch ships. The **Distro** switcher in the header moves between them. | Distro | Branch | Docs | | --- | --- | --- | | **Omarchy desktop**: Arch and Omarchy on the desktop and laptop | [`distro/arch-omarchy-quattro`](https://github.com/timmo001/dotfiles/tree/distro/arch-omarchy-quattro) | [dotfiles.timmo.dev](https://dotfiles.timmo.dev/) | | **Ubuntu server**: headless Ubuntu server and remote Herdr host | [`distro/ubuntu-server`](https://github.com/timmo001/dotfiles/tree/distro/ubuntu-server) | [ubuntu-server.dotfiles.timmo.dev](https://ubuntu-server.dotfiles.timmo.dev/) | | **Cloud**: cloud agent environments, starting with Claude Code | [`distro/cloud`](https://github.com/timmo001/dotfiles/tree/distro/cloud) | [cloud.dotfiles.timmo.dev](https://cloud.dotfiles.timmo.dev/) | :::caution[Personal setup] Like the rest of these docs, each distro is tuned for my own machines. Borrow the pieces you want rather than installing one wholesale. ::: ## How the sites publish | Piece | Why | | --- | --- | | `docs/distros.ts` | Shared list of distros for the header switcher, kept on the default branch and merged into the others | | `docs/current-distro.ts` | Which entry this branch is, setting its site and GitHub branch | | `docs/wrangler.jsonc` | Worker name and custom domain for this branch's site | | [Cloudflare Workers Builds](https://developers.cloudflare.com/workers/ci-cd/builds/) | One Worker per distro, each deploying from its own branch | --- # Command Reference Source: https://cloud.dotfiles.timmo.dev/dot/commands This page lists every `dot` command from the same Effect command tree that powers parsing, help, dispatch, and shell completions. ## `dot init` Run one-time first-use machine setup ```text dot init [flags] ``` Run the one-time first-use setup workflow for a fresh machine. Init prepares repos, stow links, mise tools, apt packages, the firewall and the login shell, and trusts mise configs in tracked repos. After init completes, enable lingering so user services run without a login, log in again, then run dot doctor. Before the bounded workflow starts, init updates or clones the optional private overlay according to DOT_ALLOW_PRIVATE. Use dot update for ongoing maintenance. **Options** | Option | Description | | --- | --- | | `--force` | Re-run init even if the machine looks initialised | | `--log` `` | Init log path (default: ~/.local/state/dot/init.log) | | `--help` `-h` | Show help information | **Examples** ```bash dot init dot init --force ``` ## `dot install` Ensure prerequisites, backup/adopt dotfiles and install the pinned OpenCode release ```text dot install [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ## `dot update` Aliases: `dot up` Self-update, pull repos, stow dotfiles, rebuild. Phase flags are inclusive: passing any of --pull, --stow, or --app runs only the selected phases. Internal --no-self-update, --post-hook-repo and --started-at flags support the active self-update handoff; internal --summary-file lets update system print the summary last. ```text dot update [flags] ``` A full update pulls the public dotfiles, installs Bun dependencies, rebuilds and relaunches dot, then scans and pulls tracked repositories, trusting mise configs only in repositories it freshly clones. It moves the dot-managed skills checkout to the latest skills main before rebuilding skill-maintenance. Pulls are fast-forward-only and never stash or rebase: Git refuses an update if local edits would be overwritten or histories have diverged. It regenerates completions, runs the required MCP sync, stows, installs mise tools, restarts pitchfork daemons still running an old mise binary, updates Pi extensions, rebuilds again, runs agents sync, backfills the init marker, reloads agents (as dot reload agents), and starts the doctor check. It finishes with a summary of updated repositories and every completed or skipped step, in order. Phase flags are inclusive: passing any of --pull, --stow, or --app runs only the selected phases. Scoped runs skip agents sync and init-marker backfill. Use --repo PATH (repeatable) to pull selected repositories, restore their pinned submodules and run configured post-update commands after HEAD changes. Changed public or private dotfiles also rebuild, stow and sync agent instructions once per batch. Add --pull to only pull and run post-update commands, skipping the dotfiles rebuild and stow. Herdr plugins are refreshed only inside Herdr. --no-reload skips the agent reload and doctor check. **Options** | Option | Description | | --- | --- | | `--repo` `` | Fast-forward this repository when local work can be preserved, then run its post-update command; repeat for a batch. Changed dotfiles also rebuild and stow | | `--pull` | Run the repository pull phase only | | `--stow` | Generate completions, sync MCP configs, and stow only | | `--app` | Install Bun dependencies and rebuild the dot binary only | | `--check` | Report dotfiles pulls, pending pins and stow changes, skipping local work | | `--check-all` | Also check development repos for pulls, skipping local work | | `--no-self-update` | Skip the internal self-update phase, which pulls the public and private dotfiles | | `--no-reload` | Skip agent reload and module refresh | | `--post-hook-repo` `` | Internal post-hook repository | | `--summary-file` `` | Internal: write the final summary to this file instead of printing it | | `--started-at` `` | Internal: epoch ms the run started, for the summary timing | | `--help` `-h` | Show help information | **Exit codes** ```text 0 Update completed, or no actionable updates were found 1 Fatal workflow failure 2 Update check could not finish 10 Update check found pulls, pending pins or stow changes ``` ### `dot update system` Select and run Dotfiles, apt, release package and Topgrade updates ```text dot update system [flags] ``` Select maintenance steps interactively, then run them in order: Dotfiles, apt packages, GitHub release packages, GitHub CLI extensions, and Topgrade. The release packages step installs the latest release .deb of each package in .dot-public-deb-releases.yml whose installed version differs. Interactive runs pre-select Dotfiles, apt packages, release packages, and GitHub CLI extensions; extra Topgrade steps start unselected. Non-interactive runs and --yes select every step, and --step runs only the steps given. Cancelling the prompt exits without running updates. **Options** | Option | Description | | --- | --- | | `--yes` | Select every update without prompting | | `--step` `` | Run only this step without prompting; repeat for several (choices: dotfiles, apt, releases, github-cli, yazi, rustup, tldr, vim, containers, claude_code, claude_code_plugins, uv) | | `--no-self-update` | Skip dot update's self-update pull when the dotfiles are already pulled | | `--help` `-h` | Show help information | **Examples** ```bash dot update system dot update system --yes dot update system --step dotfiles --step github-cli ``` ## `dot deps` Validate and publish grouped native dependency updates ```text dot deps [flags] [] ``` Read native policy and manifests from a pinned remote target, preserving the caller's checkout. Exclude whole groups covered by any open dependency PR, including failed, pending and draft PRs. --all bypasses only PR inventory and exclusion. --dry-run discovers updates without repository scripts, installs, checks or writes to Git. Bare dot deps starts groups by priority and prepares and validates them concurrently in isolated worktrees, bounded by --concurrency. Check commands share the same concurrency cap across groups; setup and shared Git operations are serialised. A command's optional skipFor exclusions apply only when every updated dependency matches; mixed or unknown groups retain checks. The first ready group takes the publication slot and publishes one checked commit without creating PRs or waiting for hosted CI. Host permissions are read from $XDG_CONFIG_HOME/dot/dependencies.yml (default ~/.config/dot/dependencies.yml), keyed by owner/repository with trusted and allowBypass booleans. Required hosted checks must have equivalent validation.checks mappings; protected direct pushes require explicit allowBypass permission and existing account rights. Workflow edits require a credential with workflow write access. Unsupported policy remains blocking. Git-backed claims serialise each repository/target across machines and service or manual runs. Publication atomically advances the ownership record and target; target movement rebuilds and revalidates, up to three attempts per group. Failed work and per-group logs remain under $XDG_STATE_HOME/dot/dependencies. Clean published worktrees are removed, including submodules. Setup/check mutations and commit-hook mutations prevent publication. Independent groups continue after failures, including groups sharing files; a partial run exits non-zero. A normal invocation authorises passing updates, regardless of Renovate automerge policy. **Options** | Option | Description | | --- | --- | | `--dry-run` | Discover updates without running scripts, installing packages or publishing | | `--all` | Bypass open-PR inventory and exclusion only; leave PRs untouched | | `--target` `` | Remote target branch (default: repository default branch) | | `--timeout` `` | Deadline per command/provider lookup (default: 30 seconds) | | `--concurrency` `` | Maximum concurrent groups, lookups, PR inspections or check commands, 1-16 (default: 4) | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | repository | **Examples** ```bash dot deps --dry-run dot deps owner/repository --dry-run dot deps --dry-run --all --target main ``` ### `dot deps service` Run one cross-machine dependency service interval ```text dot deps service [flags] ``` Run configured repositories sequentially under one Git-backed service claim. Configuration supplies coordinationRepository, repositories, intervalMinutes and concurrency. Every repository requires host trust. Shared state prevents overlapping machine runs and records the next eligible interval. Repository/target claims also cover manual dot deps runs. Claims renew every 30 seconds and expire after two minutes; a lost claim interrupts work, and dependency publication atomically checks its target claim. State is stored on dedicated dot-deps-state branches. The user timer runs hourly at ten past, except between 01:00 and 07:00. Exit status 2 means completed with unsuccessful update groups (warning); 3 means the shared interval was skipped. --no-cooldown ignores the shared interval and each repository's interval but never an active claim; `dot services start dot-deps.timer` applies it to that one start automatically. Startup, policy and service failures exit 1. Local configuration validation with --dry-run performs no remote writes. Policy is read from published target commits, so repository policies must be pushed before enabling the service. **Options** | Option | Description | | --- | --- | | `--config` `` | Service YAML config (default: $XDG_CONFIG_HOME/dot/dependency-service.yml) | | `--dry-run` | Validate local service configuration and trust without running updates or writing to Git | | `--no-cooldown` | Run even if the shared interval is not due; an active claim still blocks the run | | `--help` `-h` | Show help information | **Examples** ```bash dot deps service --dry-run dot deps service dot deps service --no-cooldown ``` ### `dot deps import` Import dependency policy from other tools ```text dot deps import [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot deps import renovate` Import Renovate policy into dot-deps.yml with an editor schema ```text dot deps import renovate [flags] [] ``` Create dot-deps.yml and its editor schema from a repository's JSON Renovate config, migrating an existing dot-deps.json policy. The first import resolves presets with an isolated, pinned Renovate runtime. Later imports replace explicit override sections, including edits within them, while preserving the native base policy and local check mappings. Unsupported settings are recorded as publication blockers. Importing creates no commits or PRs. Ordinary previews use the saved native policy without running Renovate or refreshing presets. **Options** | Option | Description | | --- | --- | | `--source` `` | Repository-relative Renovate JSON file (default: renovate.json) | | `--timeout` `` | Deadline per import pass (default: 5 minutes) | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | directory | **Examples** ```bash dot deps import renovate dot deps import renovate /path/to/repository ``` ## `dot run` Run a command with a deadline and process-group cleanup ```text dot run [flags] [] ``` Pass the executable and its arguments after --. Standard input, output and errors are inherited. Completion, timeout and SIGINT/SIGTERM/SIGHUP all release the owned process group, first with SIGTERM and then SIGKILL after the cleanup grace period. Use foreground commands: processes that deliberately leave the group or send work to an existing server are outside this ownership. For isolated OpenCode jobs, pass run --standalone. **Options** | Option | Description | | --- | --- | | `--timeout` `` | Execution deadline, for example '5 minutes' or '30 seconds' | | `--kill-after` `` | Cleanup grace period before SIGKILL (default: 5 seconds) | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Executable to run after -- | | `` | Arguments passed unchanged to the command | **Exit codes** ```text Child exit code on completion 124 Execution deadline exceeded 125 Process execution failed 128 + signal number on interruption ``` **Examples** ```bash dot run --timeout '5 minutes' -- opencode2 run --standalone 'Process this capture' ``` ## `dot http` Local HTTP helpers ```text dot http [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot http forward` Forward HTTP and websockets to another server without proxy headers ```text dot http forward [flags] ``` Listens on 127.0.0.1 and forwards HTTP requests and websockets to the target origin, dropping Host and X-Forwarded-* headers so a server that doesn't trust this machine as a proxy accepts them. Use it behind a local HTTPS proxy, such as a pitchfork daemon, to reach a plain HTTP server from an HTTPS page. **Options** | Option | Description | | --- | --- | | `--port` `` | Local port to listen on, bound to 127.0.0.1 | | `--target` `` | Origin to forward to, such as http://host:8123 | | `--help` `-h` | Show help information | **Examples** ```bash dot http forward --port 8126 --target http://homeassistant.local:8123 ``` ## `dot server` Headless server helpers ```text dot server [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot server serve` Serve the server dashboard ```text dot server serve [flags] ``` Serves the server dashboard and its API. The dashboard shows the registered user services from dot services status, with run or restart, stop and recent journal lines for each. It is built from the server/ package with mise run server:build, and pitchfork runs it through mise run serve:server. Everything except /api/health needs a login with the token in ~/.config/dot/server/token. It is plain HTTP, so only expose it on a trusted network. **Options** | Option | Description | | --- | --- | | `--host` `` | Address to listen on | | `--port` `` | Port to listen on | | `--dashboard` `` | Dashboard build to serve (default: server/dist in the public dotfiles) | | `--help` `-h` | Show help information | **Examples** ```bash dot server serve dot server serve --host 0.0.0.0 ``` ## `dot cloud` Cloud session VM helpers ```text dot cloud [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot cloud setup` Prepare Claude Code in a cloud session VM ```text dot cloud setup [flags] ``` Links ~/.claude/settings.json to cloud/claude/settings.json, writes ~/.claude/CLAUDE.md from cloud/claude/CLAUDE.md followed by the private global AGENTS.md when the private dotfiles are present, and links the shared skills into ~/.claude/skills. cloud/setup.sh runs it as the cloud environment's setup script, after installing mise and building dot. It refuses to run unless CLAUDE_CODE_REMOTE is true, since it replaces the user-level Claude Code settings and instructions. **Options** | Option | Description | | --- | --- | | `--force` | Set up Claude Code outside a Claude Code cloud session | | `--help` `-h` | Show help information | **Examples** ```bash dot cloud setup dot cloud setup --force ``` ### `dot cloud session-start` Add the global agent instructions when a cloud session starts ```text dot cloud session-start [flags] ``` Claude Code SessionStart hook in the cloud settings. The setup script runs before a session has GitHub access, so it usually can't clone the private dotfiles. This clones or refreshes them, rewrites ~/.claude/CLAUDE.md with the global AGENTS.md for later reloads, and prints it as additional context when the CLAUDE.md the session started with lacked it. Does nothing outside a cloud session, prints nothing else and never fails. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot cloud session-start ``` ## `dot status` Run work under a pinned terminal status header ```text dot status [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot status run` Run a command or pitchfork daemon under a pinned status header ```text dot status run [flags] [] ``` Pins a header to the top of the terminal with the state (Setting up, Starting, Running, Done, Stopped or Failed), the URL and the elapsed time, and keeps the terminal title in step with a spinner while work is in progress. --setup runs in an interactive zsh first. With --pitchfork, an already running daemon prompts before restarting (--attach follows it instead), its logs are followed once it is ready, and Ctrl+C stops it. --background returns once the daemon is ready. Without a TTY, state changes print as lines. **Options** | Option | Description | | --- | --- | | `--title` `` | Name shown in the header and terminal title | | `--url` `` | URL pinned in the header | | `--via` `` | What serves the URL when it is not this command, shown beside it | | `--setup` `` | zsh command run first, under the Setting up state | | `--pitchfork` `` | Pitchfork daemon to start and follow instead of a command | | `--conflicts` `` | Pitchfork daemon that cannot run alongside --pitchfork or the command; asks to stop it first. Repeat for more | | `--attach` | Follow an already running --pitchfork daemon instead of asking to restart it | | `--background` | Return once the pitchfork daemon is ready, leaving it running | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Command and arguments to run after -- | **Examples** ```bash dot status run --title 'Lint' -- pnpm lint dot status run --title 'Core' --url https://dev.example.localhost --setup 'script/bootstrap' --pitchfork core/dev ``` ## `dot updates` Check watched package, Dotfiles and skills updates ```text dot updates [flags] ``` Read cached status immediately and refresh it in the background after 15 minutes. Refresh checks watched apt packages, all dot-managed repositories and whether the managed skills checkout is behind timmo001/skills main, and writes the cache atomically under a shared lock. status --json prints the cached sections and the bar and footer output for other readers such as the OpenCode skill-updates plugin. Use --package-file, --cache-dir and --timeout to override defaults. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot updates status dot updates refresh ``` ### `dot updates status` Print cached status-bar JSON and refresh stale data in the background ```text dot updates status [flags] ``` **Options** | Option | Description | | --- | --- | | `--json` | Print cached dotfiles, skills and package sections, and the bar and footer output, as JSON | | `--help` `-h` | Show help information | **Examples** ```bash dot updates status dot updates status --json ``` ### `dot updates refresh` Refresh package, Dotfiles and skills status ```text dot updates refresh [flags] ``` **Options** | Option | Description | | --- | --- | | `--package-file` `` | Watched package list (default: public dotfiles manifest) | | `--cache-dir` `` | Status cache directory (default: XDG status-bar cache) | | `--timeout` `` | Maximum seconds for each external check | | `--dot-only` | Refresh only Dotfiles status, keeping cached package status | | `--help` `-h` | Show help information | **Examples** ```bash dot updates refresh dot updates refresh --dot-only ``` ## `dot services` Monitor registered systemd user services and timers ```text dot services [flags] ``` Each job registers itself with a YAML descriptor in ~/.config/dot/services.d/, shipped by the stow package that owns the unit. A descriptor names the unit and its monitoring policy: label, history, failAfter (consecutive failures before a job counts as failed), staleAfter (a duration such as "1 hour", counted from the latest of the last completed run, the last boot or resume, and one interval before the first calendar run due after those, so sleep, power off and gaps in the schedule are not missed runs), restartLimit ({ count, within }) for long-running services, notify, logs ({ dir, file }) for jobs that keep their own run logs, and repository (a GitHub owner/repo slug from dot-git.yml) naming the repository that logs and agents open in. A long-running service can add status ({ file }) pointing at a JSON file it writes with health ("ok", "warning", "degraded" or "failed"), summary and updated (epoch milliseconds); while systemd sees the service as healthy, a report from its current run replaces the health and summary. Without repository, the repository containing the unit's executable is used, falling back to the public dotfiles. Optional exitStatuses maps non-zero exit codes to "warning" or "skipped", for example { "2": "warning", "3": "skipped" }. Warnings break the failure streak and count as completed work for staleness; skipped invocations retain the last completed outcome. These are monitor classifications; systemd still records non-zero exits. Run history comes from the user journal. A job can summarise each run by printing a line containing "[RESULT] " followed by a short outcome; the last such line per invocation becomes that run's summary in status, run logs, notifications and the timmo.services panel. Units with OnFailure=dot-service-failed@%n.service call dot services notify, which raises a desktop notification once failAfter is reached and refreshes the timmo.services panel. Timer services with ExecCondition=dot services schedule check run only at their calendar times, or within --grace of one, not as later catch-up runs after boot or resume; those runs show as skipped. dot services start always runs them. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot services status dot services logs dot-deps.timer ``` ### `dot services status` Show the health of registered user services ```text dot services status [flags] ``` **Options** | Option | Description | | --- | --- | | `--json` | Print the full snapshot as JSON | | `--help` `-h` | Show help information | **Examples** ```bash dot services status dot services status --json ``` ### `dot services start` Run a registered job now, or restart a long-running service ```text dot services start [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Registered timer or service unit | **Examples** ```bash dot services start dot-deps.timer ``` ### `dot services stop` Stop a registered job's running service, leaving its timer scheduled ```text dot services stop [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Registered timer or service unit | **Examples** ```bash dot services stop notes-capture-daemon.service ``` ### `dot services logs` Open a registered job's logs in a Herdr tab for the repository that owns it ```text dot services logs [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Registered timer or service unit | **Examples** ```bash dot services logs notes-capture-daemon.service ``` ### `dot services run` Inspect a registered job's recent runs ```text dot services run [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot services run logs` Print the journal output of a registered job's most recent runs, newest first, with its latest run log ```text dot services run logs [flags] ``` **Options** | Option | Description | | --- | --- | | `--count` `` | Number of recent runs to include | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Registered timer or service unit | **Examples** ```bash dot services run logs dot-deps.timer dot services run logs skill-updates-agent.timer --count 5 | wl-copy ``` ### `dot services investigate` Open an agent in a registered job's repository, briefed with its recent runs, logs, file locations and commands to investigate them ```text dot services investigate [flags] ``` **Options** | Option | Description | | --- | --- | | `--agent` `` | Installed launcher from dot herdr agents, such as opencode2 | | `--modifiers` `` | Qt keyboard modifier bitmask, as for dot herdr repo open | | `--print` | Print the investigation brief instead of opening the agent | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Registered timer or service unit | **Examples** ```bash dot services investigate skill-updates-agent.timer --agent opencode2 ``` ### `dot services notify` Notify when a registered job has failed (used by OnFailure=) ```text dot services notify [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Registered timer or service unit | **Examples** ```bash dot services notify dot-deps.service ``` ### `dot services schedule` Timer schedule checks for registered jobs ```text dot services schedule [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot services schedule check` Skip a timer's catch-up run after boot or resume (used by ExecCondition=) ```text dot services schedule check [flags] ``` **Options** | Option | Description | | --- | --- | | `--grace` `` | How long after a calendar time a catch-up run still goes ahead (default: 5 minutes) | | `--help` `-h` | Show help information | **Examples** ```bash dot services schedule check dot services schedule check --grace '4 hours' ``` ## `dot fans` Control chassis fans from a Home Assistant temperature ```text dot fans [flags] ``` Reads ~/.config/dot/fans.yml: entity (a Home Assistant temperature sensor), device (a liquidctl --match string), channels (a list such as fan1 and fan2), ramp ({ from, to } in °C) and speed ({ min, max } in percent). Watches the entity through ha-bridge and ramps the channels linearly from speed.min at ramp.from to speed.max at ramp.to, in 5% steps. An unavailable or non-numeric reading, no reading within 30 seconds, or a stopped watcher sets speed.max until readings resume; the watcher restarts after 15 seconds. Health is written to $XDG_STATE_HOME/dot/fans/status.json for the status field of a dot services descriptor. Stopping hands the device back to motherboard control with liquidctl initialize. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot fans run ``` ### `dot fans run` Control chassis fans from a Home Assistant temperature (used by dot-fans.service) ```text dot fans run [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot fans run ``` ## `dot tunnel` Run shared Cloudflare tunnels on one machine at a time ```text dot tunnel [flags] ``` Runs cloudflared with the token in ~/.config/dot/tunnels/.token, checking every 15 seconds which connectors the tunnel has, through the Cloudflare API with the token in ~/.config/dot/tunnels/cloudflare-api-token (Account > Cloudflare Tunnel > Read). The connector whose live connections opened first keeps the tunnel. A machine that finds another connector stops its own cloudflared and waits until none is left, so a laptop that wakes from sleep after another machine took over gives the tunnel back. Health is written to $XDG_STATE_HOME/dot/tunnels//status.json for the status field of a dot services descriptor: ok while serving, warning while another machine holds the tunnel or the API can't be checked. Without an answer from the API it never starts cloudflared, and keeps a running one going. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot tunnel run timmo ``` ### `dot tunnel run` Run a Cloudflare tunnel on one machine at a time (used by dot-tunnel@.service) ```text dot tunnel run [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Tunnel name, matching ~/.config/dot/tunnels/.token | **Examples** ```bash dot tunnel run timmo ``` ## `dot stow` Re-stow public/private dotfiles ```text dot stow [flags] ``` **Options** | Option | Description | | --- | --- | | `--public` | Stow public dotfiles only | | `--private` | Stow private dotfiles only | | `--help` `-h` | Show help information | ## `dot session` Inspect and move agent sessions ```text dot session [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot session status` Query an OpenCode 2 session's model, variant and context pressure ```text dot session status [flags] ``` Read-only OpenCode 2 session inspection through the configured launcher. Pass the exact session ID supplied in the agent's environment context; it is not inferred from the focused pane, working directory or a guessed shell variable. Reports the selected model and variant, supported variants, model limits, latest completed assistant token measurement, its age, the latest completed compaction, and separately labelled cumulative usage and cost. Context tokens include non-cached input, cache reads and writes, output and reasoning, matching OpenCode's display. Input usage includes non-cached and cached input. Pressure uses whichever percentage is higher: context-window usage or input-limit usage. Current usage is unknown after compaction without a new measurement, after a model/variant switch, or with a staged revert. Later tool results and messages are not counted. Looks back through at most 20 messages per type and marks incomplete lookups. --warn-at defaults to 70 percent: a workflow heuristic, not a proven cognitive degradation threshold. The command does not change models, compact or open sessions. **Options** | Option | Description | | --- | --- | | `--warn-at` `` | Context or input percentage prompting a scope or handoff review (default: 70) | | `--json` | Print model, limits, context measurement and cumulative usage as JSON | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Exact OpenCode 2 session ID from the agent's injected context | **Examples** ```bash dot session status ses_example --json dot session status ses_example --warn-at 80 ``` ### `dot session send` Queue a session on the HA box to pick up on another machine ```text dot session send [flags] [] ``` Exports the session and its subagent sessions with opencode2 session export, adds a patch of uncommitted changes (untracked files included) and uploads them over SSH to the queue folder set in ~/.config/dot/session-queue.yml. Attachments are kept relative to the session's directory, then the home directory, so take restores them to the same place on the other machine without overwriting anything. The original session is left as it is. **Options** | Option | Description | | --- | --- | | `--attach` `-a` `` | Send this file or folder too, such as screenshots or a scratch folder; repeatable | | `--json` | Print the queued entry's metadata as JSON | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | OpenCode 2 session ID; without it, pick an OpenCode pane from Herdr, or under an agent use the agent's own pane | **Examples** ```bash dot session send dot session send ses_example --json dot session send -a /tmp/opencode/my-task -a screenshot.png ``` ### `dot session queue` List sessions waiting in the queue ```text dot session queue [flags] ``` **Options** | Option | Description | | --- | --- | | `--json` | Print pending entries as JSON | | `--help` `-h` | Show help information | **Examples** ```bash dot session queue dot session queue --json ``` ### `dot session take` Pick up a queued session on this machine ```text dot session take [flags] [] ``` Claims the entry so no other machine can take it, imports the sessions into this machine's checkout of the same repository, offers to apply the patch when HEAD matches and the tree is clean, then opens the session in its Herdr workspace with a draft prompt pasted in but not sent. **Options** | Option | Description | | --- | --- | | `--json` | Print the outcome as JSON | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Entry ID from dot session queue; without it, pick one | **Examples** ```bash dot session take ``` ## `dot snapshot` Save a CPU and memory snapshot with process rankings ```text dot snapshot [flags] ``` Print a Markdown CPU and memory summary with a usage-filtered process tree. --sort mem defaults to an 80 MiB measured subtree PSS cutoff; --sort cpu defaults to 1% of one core. Adjust these with --min-memory-mib and --min-cpu. Each tree row shows aligned memory and CPU totals beside the process name. Totals include hidden children, so small workers can qualify together; parent and child totals overlap. Expand the largest remaining qualifying branch until --limit visible processes are reached (default: 40, including ancestors). Zero-usage branches are omitted. The saved report adds CPU, memory and process-name rankings with the same cutoffs and per-table limit, plus pressure measurements. Interactive human runs open it in $EDITOR (vi if unset). The internal dot agent detect check automatically selects JSON. JSON retains all sampled processes and the complete processTree, and reportSelection identifies visible PIDs, cutoffs, the limit and omitted count. Missing measurements are null; unavailable parents are marked. CPU is sampled over approximately one second; 100% per process means one logical CPU. PSS divides shared pages between processes. Reports are saved in the system temporary directory ($TMPDIR, normally /tmp), named dot-snapshot-.md or .json. Existing output files are never overwritten. **Options** | Option | Description | | --- | --- | | `--sort` `` | Sort the process tree and JSON process list by CPU or memory (choices: cpu, mem) | | `--limit` `` | Maximum visible tree processes, including parents, and entries per ranking table | | `--min-memory-mib` `` | Minimum measured subtree PSS in MiB for memory sorting (default: 80) | | `--min-cpu` `` | Minimum measured subtree CPU percentage for CPU sorting (default: 1; 100% = one core) | | `--help` `-h` | Show help information | **Examples** ```bash dot snapshot dot snapshot --sort cpu dot snapshot --limit 40 dot snapshot --min-memory-mib 50 ``` ## `dot firewall` Reconcile managed ufw firewall rules ```text dot firewall [flags] ``` Ensure the managed ufw allow rules are present with their exact source, destination, interface/direction, and purpose comment. Missing rules are added, stale-comment rules are deleted and re-added, then ufw is reloaded once. A source-restricted rule does not satisfy a managed any-source rule. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot firewall ``` ## `dot doctor` Run parallel health checks for dependencies, repositories, stow integrity, services, apt packages, firewall rules, and OpenCode/Herdr integration. A timestamped report is always written under ~/.local/state/dot/logs/. ```text dot doctor [flags] ``` Run health checks on the dotfiles system. All checks run in parallel and each section streams to the terminal as it finishes, followed by a grouped summary. A timestamped log is always written under ~/.local/state/dot/logs/. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Checks performed** ```text Dependencies and configured gh extensions Repositories, origin HEAD, git config, and stow integrity OpenCode, Herdr, notifications, timers, and registered services Public/private apt packages, managed firewall rules, and Syncthing ``` **Exit codes** ```text 0 No critical errors (warnings may still be present) 1 One or more critical errors found ``` ## `dot clean` Unstow managed dotfiles ```text dot clean [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ## `dot agent` Agent harness tooling: instruction sync, linting and detection ```text dot agent [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot agent sync` Mirror AGENTS.md to agent harness instruction files ```text dot agent sync [flags] ``` Mirror ~/.config/opencode/AGENTS.md to each agent harness's instruction file, then trust each tracked repository from private dot-git.yml in Claude Code (~/.claude.json) so it opens without the workspace trust prompt. Each repository is trusted once, the first time its checkout exists; dot remembers it in its state directory, so untrusting it in Claude Code later sticks. Runs as part of dot update and dot init. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot agent sync ``` ### `dot agent lint` Run the repository's agent_lint commands from private dot-git.yml on changed files ```text dot agent lint [flags] [] ``` Collect files changed in the working tree against HEAD, plus untracked files that are not ignored, and run the configured agent_lint commands in parallel from the repository root under dot run --timeout, reporting results in config order. Deleted files and submodule changes are left out. Paths narrow the changed files. --all uses every tracked and untracked file that is not ignored instead, so commands run without changes. --only runs just the named commands and reports only those. A run argument of exactly {files} expands to the changed files matching the command's include globs; commands without it run as they are, but only when a changed file matches. Each result is passed, failed, timed-out or skipped, with the last lines of output for failures. Exits non-zero when any command fails or times out. Repositories without agent_lint print a notice and exit zero. **Options** | Option | Description | | --- | --- | | `--json` | Print one JSON report instead of log lines | | `--all` | Lint every file, not only changed ones | | `--only` `` | Run only the command with this name; repeatable | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | path | **Examples** ```bash dot agent lint dot agent lint --json dot agent lint src/one.ts src/two.ts --json dot agent lint --all --only Typecheck --json ``` ### `dot agent oxlint` Run the advisory generic Oxlint pass on JavaScript and TypeScript changes in an opted-in repository. Repository-owned Oxlint takes precedence. Use --changed normally, explicit paths to lint whole files, or --all when explicitly requested. Pass --force to run despite those skips. ```text dot agent oxlint [flags] [] ``` Run the generic @timmo001/oxlint-rules recommended config from a dot-managed cache without changing the target repository. The current repository must set agent_oxlint: true in private dot-git.yml. Repositories with their own Oxlint config, dependency, script, or local binary are skipped because their local setup takes precedence. Pass --force to run anyway. Diagnostics are advisory and do not make these personal rules authoritative for the host repository. --changed compares the working tree and untracked files with HEAD, prints only findings on added or modified lines, and exits non-zero when any remain. Paths with --changed limit that comparison to those files or directories. dot git commit runs the same check on the files it commits. **Modes** ```text --changed Lint uncommitted changes, reporting only changed lines; add paths to narrow ... Lint explicit files or directories in full --all Lint the complete repository tree --force Run even if opt-in or repository Oxlint would skip --opt-in Enable and commit the existing config entry; add paths or --all to also lint ``` **Options** | Option | Description | | --- | --- | | `--all` | Lint the complete repository tree | | `--changed` | Lint uncommitted changes and report only findings on changed lines; paths narrow the scope | | `--opt-in` | Enable the existing private config entry and commit the single-line change | | `--force` | Run even if the repository is not opted in or already has Oxlint | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | path | **Opt-in** ```text --opt-in adds or sets only agent_oxlint: true in an existing private repository entry, preserving all other bytes. If the entry is missing, it offers the repo induct wizard with agent Oxlint prefilled as enabled. Without a terminal it prints induction instructions. The config must be tracked and clean. Active commit hooks are refused rather than bypassed so formatters cannot expand the change. Commits through dot git commit without pushing; unrelated staged files are excluded. An existing opt-in creates no commit. ``` **Examples** ```bash dot agent oxlint --changed dot agent oxlint --changed src/example.ts dot agent oxlint src/example.ts dot agent oxlint src/one.ts src/two.ts dot agent oxlint --all dot agent oxlint --force src/example.ts dot agent oxlint --opt-in ``` ### `dot agent detect` Detect whether an AI coding agent is running dot ```text dot agent detect [flags] ``` Detect whether dot is running under an agent harness from agent environment variables, falling back to a Linux /proc process-ancestry check. Exits 0 when an agent is detected and 1 otherwise, so scripts can branch with `if dot agent detect`. Set DOT_AGENT=1 to force detection on or DOT_AGENT=0 to force it off. **Modes** ```text (default) Print the detected agent, or a no-agent message --quiet Print only the provider id (nothing when no agent) --json Print the detection result as JSON ``` **Options** | Option | Description | | --- | --- | | `--quiet` `-q` | | | `--json` | Print JSON | | `--help` `-h` | Show help information | **Examples** ```bash dot agent detect dot agent detect --quiet dot agent detect --json dot agent detect && echo running under an agent ``` ### `dot agent permission` Apply OpenCode permissions to other agent harnesses ```text dot agent permission [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot agent permission hook` Enforce OpenCode permission rules in Claude Code ```text dot agent permission hook [flags] ``` Claude Code PreToolUse hook. Reads the hook event from stdin, maps the tool call onto OpenCode actions (shell, read, edit, external_directory, MCP server tools, webfetch, websearch, todowrite), and evaluates the permissions in ~/.config/opencode/opencode.json, followed by any opencode.json in the directories from below home down to the session directory, with OpenCode's semantics: the last matching rule wins and each part of a compound shell command is checked. Prints allow, ask or deny for Claude Code, or nothing when no rule decides so Claude Code's own prompting applies. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot agent permission hook < event.json ``` ### `dot agent review` Hold agent harnesses to the change review handoff ```text dot agent review [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot agent review hook` Hold Claude Code to the change-review-handoff skill ```text dot agent review hook [flags] ``` Claude Code Stop hook. Reads the hook event from stdin and the session transcript it names. When the current turn edited files outside /tmp and ~/.claude, and nothing after the last edit opened a Plannotator review, loaded change-review-handoff or messaged the Plannotator Inbox, it blocks the stop once and tells the agent to hand the change off or say why it does not apply. A repeated stop in the same turn always goes through. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot agent review hook < event.json ``` ## `dot notes` Integrate with the notes tool ```text dot notes [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot notes capture` Manage the notes capture Worker ```text dot notes capture [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot notes capture sync` Sync watched repositories to the notes capture picker ```text dot notes capture sync [flags] ``` Regenerate the notes capture repository picker from repositories with GitHub notifications enabled in the private dot-git.yml configuration. Updates only CAPTURE_REPOSITORIES in the ignored capture/wrangler.local.jsonc file, creating it from the deploy template when needed. Mirrors non-secret settings from the active Worker, then deploys when the live picker differs. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot notes capture sync ``` ## `dot git` Work across tracked Git repositories ```text dot git [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot git diff` Show repository change state across all tracked repositories. ```text dot git diff [flags] ``` **Modes** ```text (default) Text summary of repos with changes --bar-json JSON output for status bars --panel-json Full JSON panel snapshot ``` **Options** | Option | Description | | --- | --- | | `--bar-json` | JSON output for status bars and shell modules | | `--panel-json` | Full JSON snapshot for the native shell panel | | `--help` `-h` | Show help information | **Examples** ```bash dot git diff dot git diff --bar-json dot git diff --panel-json ``` ### `dot git log` Show recent commits across managed repositories ```text dot git log [flags] ``` Lists the latest commits on each managed checkout's branch, including fetched upstream commits that are not pulled yet. Results are cached per repository and only re-read when HEAD or the upstream ref moves; --refresh re-reads everything. **Options** | Option | Description | | --- | --- | | `--refresh` | Re-read every repository, ignoring the cache | | `--panel-json` | Return managed repositories and their recent commits as JSON | | `--help` `-h` | Show help information | **Examples** ```bash dot git log dot git log --panel-json dot git log show --path ~/repos/example --sha abc1234 dot git log show --path ~/repos/example --from def5678 --sha abc1234 dot git log show --path ~/repos/example --changes uncommitted ``` #### `dot git log show` Return changed files and a diff preview as JSON for the Git panel, for one commit, a commit range or a repository's local changes ```text dot git log show [flags] ``` **Options** | Option | Description | | --- | --- | | `--path` `` | Managed repository checkout path | | `--sha` `` | Full or abbreviated commit SHA | | `--from` `` | Show the net changes to --sha from this earlier commit, or from the empty tree with root | | `--file` `` | Repository-relative file to limit the result to; repeatable | | `--changes` `` | Preview uncommitted changes including untracked files, commits not pushed upstream, or fetched commits not pulled yet (choices: uncommitted, unpushed, incoming) | | `--help` `-h` | Show help information | ### `dot git commit` Commit staged changes through the guarded gateway. Subjects must be one line, have no trailing full stop, and stay within the hard length limit. Explicit --path scopes never imply git add -A; --amend keeps the existing message unless --message is supplied. ```text dot git commit [flags] ``` Create a commit through dot's guarded gateway instead of raw git commit. The subject is validated as a single line with no trailing full stop and a length limit, then the staged set (or an explicit --path scope) is committed. It never runs git add -A. Pass --amend to rewrite the previous commit instead of creating a new one; it keeps the existing message unless you pass --message. With --push, an amend force-pushes with --force-with-lease, never a plain force. In repositories opted into agent Oxlint, the files being committed are linted and only findings on added or modified lines are reported. Warnings print and the commit continues; errors refuse the commit until they are fixed or --skip-agent-oxlint is passed. Agents are routed here by the dot-git-commit skill and blocked from raw git commit in the OpenCode permission config. **Modes** ```text (default) Commit the staged set --path Commit only named files --amend Rewrite the previous commit --dry-run Preview the plan without changes ``` **Options** | Option | Description | | --- | --- | | `--message` `-m` `` | Single-line commit subject | | `--path` `` | Commit only this file; repeatable | | `--amend` | Amend the previous commit | | `--push` | Push after committing | | `--dry-run` | Preview without changing anything | | `--skip-agent-oxlint` | Commit despite agent Oxlint errors on changed lines | | `--help` `-h` | Show help information | **Message guards** ```text Single line Rejects multi-line messages No em/en-dash Rejects em/en-dashes; use a hyphen No full stop Rejects a trailing full stop Warn over 60 Warns on stderr, still commits Reject over 120 Fails; shorten the subject ``` **Base branch guard** ```text Refuses commits to the base branch of a repo you do not own. Owners you control are listed in git config dot.owner. Work on a feature branch. For a maintained fork with an owned origin, opt in one exact branch with git config --local dot.maintainedForkBranch . The exception requires owned origin fetch and push targets; global settings are ignored. ``` **Examples** ```bash dot git commit -m "Add commit gateway" dot git commit -m "Scope to one file" --path src/git/commands/Status.ts dot git commit -m "Commit and push" --push dot git commit --amend dot git commit --amend -m "Reword the previous commit" dot git commit -m "Preview only" --dry-run ``` ### `dot git notifications` Read the authenticated GitHub notification inbox as JSON. --all and --participating filter it. ```text dot git notifications [flags] ``` **Modes** ```text (default) Open the shell notification panel --bar-json Status-bar JSON ``` **Options** | Option | Description | | --- | --- | | `--bar-json` | JSON output for status bars and shell modules | | `--all` | Include read notifications | | `--participating` | Only participating threads | | `--mark-read` `` | Mark a thread as read | | `--help` `-h` | Show help information | **Examples** ```bash dot git notifications dot git notifications --bar-json dot git notifications --participating dot git notifications dismiss --dry-run dot git notifications --mark-read 12345 ``` #### `dot git notifications dismiss` Show a coloured repository summary, then review merged dependencies followed by remaining unread notifications. Done queues work in the background while progress appears above the next choices. Every repository offers Done, Open on GitHub, Skip and Stop. Stop ends the questions and finishes queued work before a completion and issues summary. --repo selects a single notification stack. Bar hiding preferences do not restrict this inbox. ```text dot git notifications dismiss [flags] ``` **Options** | Option | Description | | --- | --- | | `--repo` `` | Configured repository name/path or GitHub owner/repository | | `--dry-run` | Print repository batches and reasons without changing notifications | | `--help` `-h` | Show help information | **Examples** ```bash dot git notifications dismiss dot git notifications dismiss --repo owner/repository dot git notifications dismiss --dry-run dot git notifications dismiss dependencies --mode all dot git notifications dismiss remaining ``` #### `dot git notifications dismiss dependencies` Review unread merged Renovate/Dependabot updates regardless of CI results. All-mode excludes unverifiable CI and exits 2 when some notifications could not be inspected but nothing failed. Opening GitHub returns to the review without dismissing anything. The dot-notifications-dismiss.timer user timer runs all-mode every 15 minutes; dot services start dot-notifications-dismiss.timer runs it now. ```text dot git notifications dismiss dependencies [flags] ``` **Options** | Option | Description | | --- | --- | | `--repo` `` | Configured repository name/path or GitHub owner/repository | | `--dry-run` | Print repository batches and reasons without changing notifications | | `--mode` `` | Mark all verified dependencies done, or prompt per repository; omit to choose (choices: all, repos) | | `--help` `-h` | Show help information | #### `dot git notifications dismiss remaining` Review all other unread notifications per repository, including PRs with unresolved CI and their reasons. This pass always requires a choice before dismissal. ```text dot git notifications dismiss remaining [flags] ``` **Options** | Option | Description | | --- | --- | | `--repo` `` | Configured repository name/path or GitHub owner/repository | | `--dry-run` | Print repository batches and reasons without changing notifications | | `--help` `-h` | Show help information | ### `dot git issues` Track open issues for enabled repositories, independently of GitHub notifications ```text dot git issues [flags] ``` Opt in with issues.enabled in private dot-git.yml. Open issues exclude pull requests and are ordered by latest update. Rules under the top-level issues.exclude list hide matching issues, such as a Dependency Dashboard; each rule matches when every field it sets (title, author, label and optional repo) matches, case-insensitively. Queries fetch at most every five minutes unless --refresh is supplied. Failed fetches retain the last successful list and report an error. **Options** | Option | Description | | --- | --- | | `--repo` `` | Select an enabled repository by name or GitHub slug | | `--refresh` | Fetch now instead of using the five-minute cache | | `--panel-json` | Return enabled repositories and their open issues as JSON | | `--help` `-h` | Show help information | **Examples** ```bash dot git issues --panel-json dot git issues --refresh ``` ## `dot mcp` Manage agent MCP server configs ```text dot mcp [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot mcp sync` Regenerate MCP configs for all harnesses from the spec ```text dot mcp sync [flags] ``` Regenerate each active harness's native MCP config from the private spec (mcp.yml). Repository opencode_mcp lists in dot-git.yml opt into named servers using generated, Git-ignored .opencode/opencode.jsonc files; removing an opt-in removes its generated config. Existing unowned or tracked configs are preserved and reported as conflicts. Global configs are written into the stowed private source tree; run dot stow after. Claude Code's user scope is updated through the claude CLI instead of a file. Some agent harnesses are documented stubs and are not written. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Examples** ```bash dot mcp sync ``` ## `dot skills` Maintain imported agent skills ```text dot skills [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot skills validate` Validate the standalone skills repository ```text dot skills validate [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot skills import` Import or refresh a reviewed skill snapshot ```text dot skills import [flags] ``` **Options** | Option | Description | | --- | --- | | `--apply` | Apply a clean imported snapshot | | `--metadata-only` | Materialise metadata only | | `--reviewed-sha` `` | Set the reviewed upstream SHA | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Imported skill name | ### `dot skills updates` Check/apply imported skill updates ```text dot skills updates [flags] ``` **Options** | Option | Description | | --- | --- | | `--check` | Check only | | `--update` | Apply clean updates | | `--json` | Report as JSON | | `--skill` `` | Limit to one skill | | `--no-commit` | Apply without committing | | `--skip-review` | Skip local-edit review | | `--help` `-h` | Show help information | **Examples** ```bash dot skills updates --json dot skills updates --update --skill agentic-workflows --no-commit ``` #### `dot skills updates agent` Run skill update automation ```text dot skills updates agent [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot skills updates agent github` Run GitHub skill update automation ```text dot skills updates agent github [flags] ``` **Options** | Option | Description | | --- | --- | | `--skills-dir` `` | Use this Skills checkout | | `--help` `-h` | Show help information | #### `dot skills updates agent device` Run local device skill update automation ```text dot skills updates agent device [flags] ``` **Options** | Option | Description | | --- | --- | | `--config` `` | Use this YAML config | | `--run-id` `` | Wait for this workflow run | | `--help` `-h` | Show help information | ### `dot skills check` Check adapted imports against upstream ```text dot skills check [flags] ``` **Options** | Option | Description | | --- | --- | | `--open-opencode` | Attempt OpenCode analysis | | `--diff-origin` | Diff against upstream origins | | `--skill` `` | Check one skill | | `--help` `-h` | Show help information | **Examples** ```bash dot skills check --skill agentic-workflows ``` ### `dot skills consumers` Manage repositories that receive shared skill copies ```text dot skills consumers [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | #### `dot skills consumers add` Share skills with a repository through consumers.yml, push the change and install them there straight away ```text dot skills consumers add [flags] ``` **Options** | Option | Description | | --- | --- | | `--repo` `` | owner/name of the consumer repository (default: the current directory's GitHub repository) | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Skills to share with the repository | **Examples** ```bash dot skills consumers add code-review testing dot skills consumers add --repo timmo001/ha-bridge writing-style ``` #### `dot skills consumers remove` Stop sharing skills with a repository through consumers.yml, push the change and remove the copies there straight away. Dropping the last skill, or --all, also drops its entry. ```text dot skills consumers remove [flags] [] ``` **Options** | Option | Description | | --- | --- | | `--repo` `` | owner/name of the consumer repository (default: the current directory's GitHub repository) | | `--all` | Stop sharing every skill, remove the copies now and drop the repository | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Skills to stop sharing with the repository | **Examples** ```bash dot skills consumers remove writing-style dot skills consumers remove --repo timmo001/ha-bridge --all ``` ## `dot completions` Generate shell completions ```text dot completions [flags] [] ``` Generate the managed dot and skill-maintenance completion files for the selected shell so the next dot stow installs them. **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Shell to generate completions for | **Examples** ```bash dot completions zsh dot completions bash dot completions fish ``` ## `dot repo` List and induct tracked repositories in private dot-git.yml ```text dot repo [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot repo list` List tracked repositories and shortcuts from private dot-git.yml ```text dot repo list [flags] [] ``` Read-only lookup of the repositories and path shortcuts configured in private dot-git.yml, the same list behind the prefix+s picker and repository shortcuts. Reads the config directly, so it does not depend on the generated picker cache. Each entry reports name, path, github (null for shortcuts), aliases, kind, whether the checkout exists and whether it is the deepest tracked path containing the working directory. Each entry also reports herdr: live state from the shared Herdr server (HERDR_SOCKET_PATH or the default socket), with open, the workspaces labelled with the repository name or inside its worktrees (id, label, focused, tabCount, paneCount, agentStatus, checkoutPath, linkedWorktree), and the agents running in them (name, agent, status, workspaceId, paneId, focused, cwd). herdr is null when the server cannot be reached; agent status is a snapshot. A query matches name, aliases, GitHub slug or repository name, and path, case-insensitively, with exact matches first. --open keeps only repositories with an open Herdr workspace, and fails when the Herdr server cannot be reached. Prints JSON with --json or when run under an AI agent, otherwise an aligned table. Exits 1 when a query matches nothing, and fails when private config is unavailable or invalid. **Options** | Option | Description | | --- | --- | | `--open` | Only list repositories open in Herdr | | `--json` | Print JSON (the default under an AI agent) | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Filter by name, alias, GitHub slug or path (exact matches first) | **Examples** ```bash dot repo list dot repo list notes dot repo list arch-repo --json dot repo list --open --json ``` ### `dot repo search` Fuzzy-search tracked repositories and shortcuts ```text dot repo search [flags] ``` Ranks tracked repositories from private dot-git.yml by fuzzy match on name, aliases, GitHub repository name, GitHub slug, directory name and path (path matches count for less). Each whitespace-separated term must match some field, with typo and partial-word tolerance loose enough for ambiguous queries, though a term found only inside other words (her in weather) scores lower; matches under 40 or more than 20 points below the best are dropped. Returns the top 5 by default; use --limit to change that or --all for every close match, such as a whole group of repositories. Results carry the same fields as dot repo list, including herdr, plus score (1 to 100) and matched (the fields that matched), highest score first. JSON is { results, hint }, where hint says how many more matches --limit or --all would show and is omitted when there are none; the table ends with the same hint. Prints JSON with --json or when run under an AI agent, otherwise an aligned table. Exits 1 when nothing matches. **Options** | Option | Description | | --- | --- | | `--limit` `` | Maximum results (default: 5) | | `--all` | Return every close match instead of the top 5 | | `--json` | Print JSON (the default under an AI agent) | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | Fuzzy terms matched against name, aliases, GitHub repository name and slug, directory and path | **Examples** ```bash dot repo search dotfiles dot repo search home assistant dot repo search notse --limit 3 --json dot repo search ha --all ``` ### `dot repo induct` Induct a local repository into private dot git config with a preview before committing ```text dot repo induct [flags] [] ``` The terminal wizard asks for Normal (first and default) or Home Assistant, then every repository field using private dot-git-presets.yml defaults and local Git identity, including an optional release watching template from its release_templates. Flags prefill the wizard. With --noninteractive, flags override preset defaults and the command only previews; repeat the reviewed options with --commit to save. Each run validates the complete config and shows the exact diff. The config must be tracked and clean; active commit hooks are refused. Existing entries and formatting are preserved. Commits through dot git commit without pushing or including unrelated staged files. Repositories already inducted are rejected; use dot agent oxlint --opt-in to enable their agent pass. **Options** | Option | Description | | --- | --- | | `--preset` `` | Private preset (default: normal) (choices: normal, home-assistant) | | `--name` `` | Friendly repository label | | `--github` `` | GitHub owner/repository (default: origin remote) | | `--aliases` `` | Space- or comma-separated aliases; empty for none | | `--post-update` `` | Post-update command; empty for none | | `--agent-oxlint` | Enable agent Oxlint; --no-agent-oxlint disables it | | `--activity-enabled` | Enable activity checks; --no-activity-enabled disables them | | `--activity-schedule` `` | Activity schedule: five-field cron or work | | `--notifications-enabled` | Enable notifications; --no-notifications-enabled disables them | | `--notifications-schedule` `` | Notification schedule: five-field cron or work | | `--ignore-bot-activity` | Filter bot-only activity; --no-ignore-bot-activity shows it | | `--pull-requests` | Show open pull requests in the Git panel; --no-pull-requests hides them | | `--issues` | Show open issues in the Git panel; --no-issues hides them (default: the preset, for repositories you own with GitHub issues enabled) | | `--browser` `` | Named browser from dot-git.yml; empty for the desktop default | | `--herdr-after` `` | Herdr workspace to open after; empty for none (default: last entry with the preset prefix) | | `--machines` `` | Space- or comma-separated machines that want the repository; empty for none (default: the preset's) | | `--notes-remote` `` | Git remote for notes; empty for none (default: upstream when present) | | `--agent-lint` `` | Agent lint command, split on spaces; empty for none | | `--opencode-mcp` `` | Space- or comma-separated OpenCode MCP servers; empty for none | | `--release-template` `` | Private release template name from dot-git-presets.yml, or none | | `--release-branch` `` | Branch compared with the published release (default: the template's branch, then origin's default branch) | | `--noninteractive` | Use flags and preset defaults without questions; preview by default | | `--commit` | Commit the proposed entry with --noninteractive after reviewing its preview | | `--help` `-h` | Show help information | **Arguments** | Argument | Description | | --- | --- | | `` | path | **Examples** ```bash dot repo induct dot repo induct ~/repos/example --noninteractive --preset normal --name Example --aliases example dot repo induct ~/repos/example --noninteractive --preset normal --name Example --aliases example --commit ``` ## `dot pr` Watch, list, read reviews on and queue pull requests ```text dot pr [flags] ``` **Options** | Option | Description | | --- | --- | | `--help` `-h` | Show help information | ### `dot pr watch` Watch pull request runs, checks and reviews, streaming progress and a full report ```text dot pr watch [flags] [] ``` Follow every GitHub Actions run on each pull request's head commit, including Copilot code review runs, plus external status checks. Superseded runs of the same workflow on the same commit are ignored, and a new push moves the watch to the new head. Progress streams to stdout one line per event; failed job logs and the final review dump go to a Markdown report whose path is printed first and last. Failed jobs are reported as soon as they finish, even while the rest of the run continues. The watch ends after two settled polls, waiting up to five more minutes for requested bot reviews. The review dump lists reviews newest first, unresolved threads with every comment in full, and resolved or minimized threads with only their replies. The command never changes the pull request. Designed for OpenCode 2 background shells: the completion notification carries the short summary and the report holds the detail. **Options** | Option | Description | | --- | --- | | `--repo` `` | Repository slug when the PRs are elsewhere | | `--stop-on` `` | Stop early on a failed job or check, or review feedback: a new review's open threads or review body findings, or unanswered threads already there at the start; repeatable (choices: failure, review) | | `--timeout` `` | Overall watch deadline (default: 60 minutes) | | `--interval` `` | Seconds between polls | | `--log-lines` `` | Trailing failed-log lines kept per job; 0 keeps everything | | `--output` `` | Report path (default: ~/.local/state/dot/pr-watch/--