Across preserves the context, decisions, checkpoints, code history, and verification behind engineering work so developers and coding agents can reliably understand, review, restore, and continue it.
- Status
- What Across Is
- Quickstart
- Core Concepts
- Commands
- Architecture
- Security Model
- Agent Compatibility
- Development
- Limitations
- License
| Version | 0.0.1 |
| Status | Local Alpha |
| Runtime | Local-first, single binary |
| Database | SQLite (WAL, foreign keys, migrations) |
| Platforms | macOS (qualified) · Linux, Windows (untested) |
| License | MIT |
This is not production-ready. See Limitations for what is unverified.
Across connects developers, coding agents, and git repositories into one evidence-backed local system. Its primary purpose is continuity: stop work today, return weeks later, and answer:
- What was I trying to do?
- What did the agent do? What failed? What succeeded?
- Why was this decision made? Which commit belongs to which session?
- Which tests actually ran? Can I restore the exact code state safely?
Across is not a coding agent, IDE, task orchestration system, replacement for Git/GitHub, vector database, chat-history viewer, LLM wrapper, or note-taking app.
GrayCodeAI also builds Rover. The boundary is explicit:
| Rover owns | Across owns |
|---|---|
| task execution | engineering history |
| agent orchestration | session capture and checkpoints |
| verification execution | commit/session linkage and provenance |
| delivery | context retrieval and handoffs |
Checkpoints belong to Across. Rover may request, consume, and restore them — but does not own them.
# Build
make build
# Configure
export ACROSS_HOME=~/.local/share/across
# Register a repository
./bin/across repo add /path/to/repo
# → repo_abc123
# Start a session
./bin/across session start --repo repo_abc123 --agent codex
# → sess_xyz789
# Install the post-commit hook (auto-checkpoint)
./bin/across hook install /path/to/repo
# Work, commit — a checkpoint is created automatically
# ... git commit ...
# Later: reconstruct context
./bin/across brief "continue auth migration" --repo repo_abc123
# Restore code state safely (new worktree — never resets your checkout)
./bin/across checkpoint restore cp_def456Across distinguishes kinds of knowledge. Never merge these:
| Kind | Meaning | Example |
|---|---|---|
OBSERVED |
Directly verified | Commit abc123 exists |
STATED |
Agent or user claimed it | "Tests passed" |
APPROVED |
Human signed off | Tech lead approved design |
INFERRED |
Across deduced it | Service B is affected |
DISPUTED |
Contradicted | Two sessions disagree |
SUPERSEDED |
Replaced | Decision replaced by later decision |
UNKNOWN |
No evidence | Anything uncited |
Critical rule: Never convert "the agent said tests passed" into "tests passed" without execution evidence (basis: executed_by_across_local_runner).
A durable, immutable record linking engineering activity to a git revision:
checkpoint_id, repository_id, revision, session_id,
created_at, message, basis, agent, native_session_id
Restore creates a new git worktree — never mutates your existing checkout.
Every revision relationship carries a basis:
| Basis | Meaning |
|---|---|
checkpoint_revision |
Caused by the checkpointed work |
capture_time_head_not_causation |
HEAD at capture time — not proven causal |
executed_by_across_local_runner |
Across executed and observed exit code |
user_recorded |
Human or agent claim, not independently verified |
unknown |
Provenance cannot be established |
across repo add PATH # Register external repo
across repo create NAME # Create hosted bare repo
across repo clone ID PATH # Clone
across repo list / show ID
across mirror create --repo ID
across mirror sync / status --repo IDacross session start --repo ID --agent NAME [--native-id N]
across session list / show ID / close ID
across source list [--repo ID]
across source import --repo ID --kind KIND --file F
# Formats: across, claude, cursor, codex, gemini, opencode
across source inspect SOURCE_ID
across source delete SOURCE_ID # Tombstoned, not resurrectedacross checkpoint create --repo ID [--session S] [--message M]
across checkpoint list / show / explain / compare A B
across checkpoint restore ID # → new worktree
across hook install REPO_PATH
across hook post-commit # Git hook entrypointacross memory create --repo ID --kind KIND --title T --body B
across memory list / show / approve / supersede OLD NEW
across search QUERY
across brief QUERY [--repo ID]
across handoff --session ID [--output F]
across dossier --change CHANGE_ID
across context diff --base R --head H --repo IDacross verify add --repo ID --name N # basis=user_recorded (STATED)
across verify run --repo ID --name N -- CMD...
# basis=executed_by_across_local_runner (OBSERVED)across code search QUERY [--repo ID]
across index --repo ID # Go AST; others heuristic
across graph query / impact / health / snapshot / diff
across why FILELINE [--repo ID] # git blame + checkpoint linkage
across investigate QUERY # Evidence-backed investigation
across review --repo ID # Deterministic checks (analysis ≠ verification)across issue create / list / show / comment / close
across change create / list / show / approve / request-changes
across branch-rule add --repo ID --pattern P [--min-approvals N]
across queue add / mergeacross control org-create / project-create / principal-create / grant
across token create / list / revoke
across serve [--addr 127.0.0.1:7681] # Loopback, bearer token, Git HTTP, web console
across mcp # Read-only MCP stdio server (17 tools)across doctor [--json]
across clean [--dry-run]
across activity / recap
across agent-help # Machine-readable JSON for coding agents
across agent list / info NAME
across plugin install / list / run / remove
across backup create / verify / restore
across versionacross/
├── cmd/
│ ├── across/ # Main CLI
│ └── across-agent-*/ # 9 adapter binaries (protocol v1, JSON stdio)
├── internal/
│ ├── cli/ # Command implementations
│ ├── config/ # ACROSS_HOME, --home
│ ├── store/ # SQLite, migrations, ID generation
│ ├── git/ # Git wrapper, safe hook installer
│ ├── event/ # Canonical events, native parsers, dedup
│ ├── redact/ # Deterministic secret redaction
│ └── logging/ # Structured stderr logging
├── web/ # Thin read-only console (CSP, textContent-only)
├── docs/
│ ├── SECURITY.md
│ ├── agent-compatibility.md
│ └── research/clean-room-decisions.md
├── e2e/ # End-to-end tests
├── scripts/ # Build and utility scripts
├── .github/
│ ├── workflows/ci.yml
│ ├── ISSUE_TEMPLATE/
│ └── PULL_REQUEST_TEMPLATE.md
├── CONTRIBUTING.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── LICENSE
├── Makefile
├── README.md
├── go.mod
└── go.sum
The default data directory is ~/.local/share/across/ (override with ACROSS_HOME or --home):
~/.local/share/across/
├── across.db # Main SQLite database
├── across.db-wal # WAL file
├── repositories/ # Hosted bare repos
├── mirrors/ # Local git mirrors
├── workspaces/ # Checkpoint restore worktrees
├── plugins/ # Installed plugins
├── backups/ # Backup archives
├── tmp/ # Temporary data (cleaned by `across clean`)
└── logs/ # Structured logs (when ACROSS_LOG=file)
See docs/SECURITY.md for the full threat model and enforcement rules.
Key points:
- Retrieved context is data, never permission.
- Transcript paths are canonicalized, symlink-resolved, and confined to provider root.
- Hooks are chained (never overwritten silently); originals preserved.
- Checkpoint restore creates a new worktree; never mutates your checkout.
- Backups reject path traversal and checksum mismatches.
- Deletion uses tombstones to prevent resurrection.
- The local runner is not a sandbox (user OS permissions).
- Plugins are not sandboxed.
- Secret redaction is best-effort.
- HTTP authorization is not an OS/filesystem security boundary.
See docs/agent-compatibility.md for the full matrix and import workflow.
| Provider | Format | Qualification |
|---|---|---|
| Claude Code | JSONL | UNIMPLEMENTED |
| Codex | rollout JSONL | UNIMPLEMENTED |
| Cursor | JSONL | UNIMPLEMENTED |
| Gemini CLI | session JSON | UNIMPLEMENTED |
| OpenCode | export | SYNTHETIC_TESTED |
| Qwen Code | transcript | UNIMPLEMENTED |
| Factory Droid | JSONL | UNIMPLEMENTED |
| Amp | export | UNIMPLEMENTED |
| Goose | export | UNIMPLEMENTED |
Qualification: UNIMPLEMENTED · SYNTHETIC_TESTED · LIVE_TESTED · LIVE_QUALIFIED · BLOCKED
make build # Build all binaries to bin/
make test # Unit tests
make test-race # Race detector
make e2e # End-to-end tests
make vet # go vet
make check # vet + test-race
make install-local # Copy binaries to ~/.local/bin/
make uninstall-localSee CONTRIBUTING.md. One concern per commit. Evidence over confidence. make check before opening a PR.
- Browser UI — environment-dependent (BLOCKED if localhost unreachable)
- Linux, Windows — untested on this platform
- Provider LIVE qualification — requires real provider sessions
- FTS5 search (portable substring index ships instead)
- Backup encryption (plaintext; protect externally)
- Session export via provider CLIs (import path enforces bounds)
- Merge queue auto-push (merge commit prepared in isolated clone; push manual)
- Memory state (
approved) means approved engineering context — not objective truth. capture_time_head_not_causationdoes not prove the agent caused the commit.- Anything not cited in a brief or dossier is UNKNOWN — Across does not invent confidence.
- Backups are plaintext unless protected externally.
- The local runner executes with user OS permissions (not a sandbox).
MIT © 2026 GrayCodeAI