<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>safegit Documentation</title>
  <link href="https://smmh.dev/safegit/feed.xml" rel="self"/>
  <link href="https://smmh.dev/safegit/"/>
  <id>https://smmh.dev/safegit/</id>
  <updated>2026-09-14T00:00:00Z</updated>
  <subtitle>git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository</subtitle>
  <entry>
    <title>Architecture</title>
    <link href="https://smmh.dev/safegit/architecture/"/>
    <id>https://smmh.dev/safegit/architecture/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>This document captures safegit's design rationale and architectural specification: why it exists in its current shape, how the commit pipeline achieves concurrency safety, and how failure modes are detected and recovered.</summary>
  </entry>
  <entry>
    <title>safegit author</title>
    <link href="https://smmh.dev/safegit/cli-author/"/>
    <id>https://smmh.dev/safegit/cli-author/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit backup</title>
    <link href="https://smmh.dev/safegit/cli-backup/"/>
    <id>https://smmh.dev/safegit/cli-backup/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit bisect</title>
    <link href="https://smmh.dev/safegit/cli-bisect/"/>
    <id>https://smmh.dev/safegit/cli-bisect/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit cherry-pick-continue</title>
    <link href="https://smmh.dev/safegit/cli-cherry-pick-continue/"/>
    <id>https://smmh.dev/safegit/cli-cherry-pick-continue/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit cherry-pick</title>
    <link href="https://smmh.dev/safegit/cli-cherry-pick/"/>
    <id>https://smmh.dev/safegit/cli-cherry-pick/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit commit</title>
    <link href="https://smmh.dev/safegit/cli-commit/"/>
    <id>https://smmh.dev/safegit/cli-commit/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit config</title>
    <link href="https://smmh.dev/safegit/cli-config/"/>
    <id>https://smmh.dev/safegit/cli-config/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit doctor</title>
    <link href="https://smmh.dev/safegit/cli-doctor/"/>
    <id>https://smmh.dev/safegit/cli-doctor/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit hook</title>
    <link href="https://smmh.dev/safegit/cli-hook/"/>
    <id>https://smmh.dev/safegit/cli-hook/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit CLI Reference</title>
    <link href="https://smmh.dev/safegit/cli-index/"/>
    <id>https://smmh.dev/safegit/cli-index/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit merge-continue</title>
    <link href="https://smmh.dev/safegit/cli-merge-continue/"/>
    <id>https://smmh.dev/safegit/cli-merge-continue/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit merge</title>
    <link href="https://smmh.dev/safegit/cli-merge/"/>
    <id>https://smmh.dev/safegit/cli-merge/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit mv</title>
    <link href="https://smmh.dev/safegit/cli-mv/"/>
    <id>https://smmh.dev/safegit/cli-mv/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit pull</title>
    <link href="https://smmh.dev/safegit/cli-pull/"/>
    <id>https://smmh.dev/safegit/cli-pull/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit push</title>
    <link href="https://smmh.dev/safegit/cli-push/"/>
    <id>https://smmh.dev/safegit/cli-push/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit rebase</title>
    <link href="https://smmh.dev/safegit/cli-rebase/"/>
    <id>https://smmh.dev/safegit/cli-rebase/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit reset</title>
    <link href="https://smmh.dev/safegit/cli-reset/"/>
    <id>https://smmh.dev/safegit/cli-reset/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit revert-continue</title>
    <link href="https://smmh.dev/safegit/cli-revert-continue/"/>
    <id>https://smmh.dev/safegit/cli-revert-continue/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit revert</title>
    <link href="https://smmh.dev/safegit/cli-revert/"/>
    <id>https://smmh.dev/safegit/cli-revert/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit scan</title>
    <link href="https://smmh.dev/safegit/cli-scan/"/>
    <id>https://smmh.dev/safegit/cli-scan/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit scrub</title>
    <link href="https://smmh.dev/safegit/cli-scrub/"/>
    <id>https://smmh.dev/safegit/cli-scrub/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit switch</title>
    <link href="https://smmh.dev/safegit/cli-switch/"/>
    <id>https://smmh.dev/safegit/cli-switch/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit undo</title>
    <link href="https://smmh.dev/safegit/cli-undo/"/>
    <id>https://smmh.dev/safegit/cli-undo/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit unlock</title>
    <link href="https://smmh.dev/safegit/cli-unlock/"/>
    <id>https://smmh.dev/safegit/cli-unlock/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit version</title>
    <link href="https://smmh.dev/safegit/cli-version/"/>
    <id>https://smmh.dev/safegit/cli-version/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>Commands Guide</title>
    <link href="https://smmh.dev/safegit/commands-guide/"/>
    <id>https://smmh.dev/safegit/commands-guide/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>safegit is a concurrency-safe git wrapper providing atomic commits, oplog-based undo, history rewriting, and multi-agent coordination. This guide covers every command in detail.</summary>
  </entry>
  <entry>
    <title>Concurrency Guide</title>
    <link href="https://smmh.dev/safegit/concurrency-guide/"/>
    <id>https://smmh.dev/safegit/concurrency-guide/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>This guide explains safegit's concurrency model: what problems arise when multiple AI sessions share a git worktree, how safegit solves them, and what guarantees it provides.</summary>
  </entry>
  <entry>
    <title>Divergences</title>
    <link href="https://smmh.dev/safegit/divergences/"/>
    <id>https://smmh.dev/safegit/divergences/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>safegit wraps git, so every command it offers stands next to something git already does. Most of the time the two agree. This document is the catalog of the places where they do not, or where they only appear to.</summary>
  </entry>
  <entry>
    <title>API Reference</title>
    <link href="https://smmh.dev/safegit/gen-index/"/>
    <id>https://smmh.dev/safegit/gen-index/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit</title>
    <link href="https://smmh.dev/safegit/"/>
    <id>https://smmh.dev/safegit/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>Concurrency-safe git operations for multi-session worktrees.</summary>
  </entry>
  <entry>
    <title>Integration Guide</title>
    <link href="https://smmh.dev/safegit/integration-guide/"/>
    <id>https://smmh.dev/safegit/integration-guide/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>safegit is designed to be embedded in automated workflows and AI agent toolchains. This guide covers how safegit interacts with external tools and how to configure those integrations.</summary>
  </entry>
  <entry>
    <title>internal/commit</title>
    <link href="https://smmh.dev/safegit/internal-commit/"/>
    <id>https://smmh.dev/safegit/internal-commit/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/conflict</title>
    <link href="https://smmh.dev/safegit/internal-conflict/"/>
    <id>https://smmh.dev/safegit/internal-conflict/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/coord</title>
    <link href="https://smmh.dev/safegit/internal-coord/"/>
    <id>https://smmh.dev/safegit/internal-coord/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/exitcode</title>
    <link href="https://smmh.dev/safegit/internal-exitcode/"/>
    <id>https://smmh.dev/safegit/internal-exitcode/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/filelock</title>
    <link href="https://smmh.dev/safegit/internal-filelock/"/>
    <id>https://smmh.dev/safegit/internal-filelock/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/git</title>
    <link href="https://smmh.dev/safegit/internal-git/"/>
    <id>https://smmh.dev/safegit/internal-git/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/gitexec</title>
    <link href="https://smmh.dev/safegit/internal-gitexec/"/>
    <id>https://smmh.dev/safegit/internal-gitexec/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/gitversion</title>
    <link href="https://smmh.dev/safegit/internal-gitversion/"/>
    <id>https://smmh.dev/safegit/internal-gitversion/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/hooks</title>
    <link href="https://smmh.dev/safegit/internal-hooks/"/>
    <id>https://smmh.dev/safegit/internal-hooks/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/index</title>
    <link href="https://smmh.dev/safegit/internal-index/"/>
    <id>https://smmh.dev/safegit/internal-index/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/lock</title>
    <link href="https://smmh.dev/safegit/internal-lock/"/>
    <id>https://smmh.dev/safegit/internal-lock/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/oplog</title>
    <link href="https://smmh.dev/safegit/internal-oplog/"/>
    <id>https://smmh.dev/safegit/internal-oplog/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/procutil</title>
    <link href="https://smmh.dev/safegit/internal-procutil/"/>
    <id>https://smmh.dev/safegit/internal-procutil/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/repo</title>
    <link href="https://smmh.dev/safegit/internal-repo/"/>
    <id>https://smmh.dev/safegit/internal-repo/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/scan</title>
    <link href="https://smmh.dev/safegit/internal-scan/"/>
    <id>https://smmh.dev/safegit/internal-scan/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/sequencer</title>
    <link href="https://smmh.dev/safegit/internal-sequencer/"/>
    <id>https://smmh.dev/safegit/internal-sequencer/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/stage</title>
    <link href="https://smmh.dev/safegit/internal-stage/"/>
    <id>https://smmh.dev/safegit/internal-stage/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/submodule</title>
    <link href="https://smmh.dev/safegit/internal-submodule/"/>
    <id>https://smmh.dev/safegit/internal-submodule/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/testutil</title>
    <link href="https://smmh.dev/safegit/internal-testutil/"/>
    <id>https://smmh.dev/safegit/internal-testutil/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/trailer</title>
    <link href="https://smmh.dev/safegit/internal-trailer/"/>
    <id>https://smmh.dev/safegit/internal-trailer/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>safegit Requirements</title>
    <link href="https://smmh.dev/safegit/req/"/>
    <id>https://smmh.dev/safegit/req/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&gt; **Historical document.** This is the original requirements list, kept as the &gt; record of what safegit was asked for. It is not a description of the built &gt; tool, and where the two differ the implementation is the authority -- see &gt; [Architecture](architecture.md) and the [Concurrency Guide](concurrency-guide.md). &gt; One difference is worth naming here, because the requirement below states the &gt; opposite: **the lock does poll.** Waiters use exponential-backoff polling &gt; (10ms to a 1s cap, bounded by `lock.acquireTimeoutSeconds`), with the backoff &gt; reset whenever the lock is observed to have changed hands. No notification &gt; mechanism was built; the requirement's real goal -- that no human has to &gt; intervene -- is met by automatic stale-lock reclamation.</summary>
  </entry>
  <entry>
    <title>Git Alternatives for AI-Safe Concurrency</title>
    <link href="https://smmh.dev/safegit/research/"/>
    <id>https://smmh.dev/safegit/research/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>The core problem: Git's staging area (`.git/index`) is a single global file per worktree. When multiple AI agent sessions run `git add` / `git commit` concurrently, they race on this shared resource -- one session can accidentally commit another's staged files, or overwrite the index mid-operation. Worktrees are the standard mitigation but add complexity and have their own edge cases (stale lock files, orphan branches).</summary>
  </entry>
  <entry>
    <title>safegit</title>
    <link href="https://smmh.dev/safegit/safegit/"/>
    <id>https://smmh.dev/safegit/safegit/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>scripts</title>
    <link href="https://smmh.dev/safegit/scripts/"/>
    <id>https://smmh.dev/safegit/scripts/</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
</feed>
