Hands-on guides for the
git-native intelligence layer.
Reference articles for engineers shipping AI-driven code on top of Git. Running several agents on one repository, reading changes as structure instead of text, and keeping a record of what an agent did and why: answered properly, with code.
Comparison
Aura Crew vs Claude Code Loops: the autonomous work-loop, compared
Claude Code defines four loop types — turn-based, goal, time, and proactive. Aura Crew is the same idea productized: a dependency-ordered work-loop with proof, collision-safety, and any agent. Full comparison.
Agent work-loop harnesses compared: Aura Crew, Ralph, Beads, and the bash loop
From a while-true bash loop (Ralph) to dependency-aware task trackers (Beads) to a proof-gated work-loop (Aura Crew): how the ways to run a coding agent autonomously compare, and when to use each.
Concepts
Autonomous coding agent loops, explained: turn-based, goal, time, and proactive
A coding agent loop is an agent repeating cycles of work until a stop condition is met. The four types explained — turn-based, goal-based, time-based, proactive — with when to use each and how to keep quality high.
Goal-based agent loops: giving a coding agent a definition of done
A goal-based loop keeps a coding agent iterating until a success criterion is met. The trick is a deterministic definition of done — tests, a score, a proof — not an LLM guessing at "good enough." How to write one.
Multi-agent
How to run multiple coding agents in parallel without merge conflicts
Running several AI coding agents at once collides on shared files. The fix: a worktree per agent, a live team radar, and soft-to-hard zone claims so parallel agents never touch the same symbol. How Aura Crew does it.
Agent collision detection: stopping two AI agents editing the same function
When several coding agents work on one repository, two of them will eventually rewrite the same function. How collision detection works at the file, symbol and branch level, and what to do when it fires.
The agent inbox: how parallel coding agents talk to each other
An agent inbox is a message queue between AI coding sessions, used to hand off work, warn about collisions and pass context. What belongs in it, what does not, and how it differs from a shared chat.
One Git worktree per agent: the pattern behind parallel AI coding
Every serious parallel-agent tool uses the same trick: git worktree gives each agent its own directory and branch off one repository. How the pattern works, where it breaks, and what to watch.
Handing context from one agent to the next
A context window fills up and the session ends. What to carry into the next one, what to leave behind, and how a handover payload differs from a chat transcript.
Agent strategy inbox contents — what shows up and how to act on it
The Aura sentinel inbox surfaces strategy messages between agents — task handoffs, conflict alerts, plan amendments. Full schema and how to triage from CLI or MCP.
Reference
AGENTS.md and CLAUDE.md: which instruction file does what
AGENTS.md is the vendor-neutral instruction file read by several coding agents; CLAUDE.md is Claude Code’s own. What each is read by, how they interact, and how to keep one source of truth.
Aura MCP — the Model Context Protocol server for git-native version control
Aura ships a 29-tool MCP server that lets Claude Code, Cursor, and any MCP client read AST graphs, log signed intent, snapshot files, and prove behaviour against your Git repo.
dotenv duplicate keys — does last win? (Aura's deterministic resolver)
Most dotenv parsers say "last duplicate key wins" — but the answer depends on which library you load. Aura uses a deterministic last-wins resolver and warns on every collision.
Review
How to review a pull request an AI wrote
Reviewing agent-written code is a different job from reviewing a colleague’s. What to check first, which failure modes are specific to agents, and how to review a 4,000-line diff without reading every line.
Intent poisoning: when the commit message and the diff disagree
Intent poisoning is a commit whose stated purpose does not match what the code actually did. Why agents produce it, why it is worse than a bad commit message, and how to detect it automatically.
Semantic
Semantic diff vs git diff: what changes when you compare structure
A git diff compares lines. A semantic diff compares the parsed structure of the code, so a rename is a rename and a move is a move. What that changes in practice, and what it costs.
Semantic diff for Rust: traits, impls and what a text diff misses
Rust makes text diffs particularly misleading: impl blocks move, trait bounds change meaning without changing shape, and macros hide the real edit. What a structural diff sees instead.
Tree-sitter and the AST: how tools read your code
Tree-sitter parses source into a concrete syntax tree fast enough to run on every keystroke, and keeps working on code that does not compile. What the tree contains, and what it is used for.
AST merge and text merge: why some conflicts should not exist
Git merges lines, so two agents editing different functions in the same region can conflict for no semantic reason. What a structural merge resolves, and what it cannot.
Shadow branches: keeping tool metadata out of your history
A shadow branch stores a tool’s own data in the repository without putting it on the branches you push. How the pattern works with Git refs, and what breaks when it goes wrong.
A Merkle graph of your code, and what it makes cheap
Hash every node of the syntax tree from its children up, and comparison, caching and change detection all become cheap. The same trick Git uses on files, applied inside them.
Structural code search: finding patterns instead of strings
Grep finds text. Structural search finds shapes: every call with a literal timeout, every catch block that swallows the error. How AST queries work and when they beat a regex.
Governance
An immutable audit log for AI-written code
What to record when an agent writes code, how to make the record tamper-evident with hash chaining and signatures, and which questions an auditor actually asks.
Running coding agents on an air-gapped network
What it takes to run AI coding agents with no route to the public internet: local models, offline tooling, and how to move artefacts across the boundary without breaking it.
Code provenance: tracing a line back to the session that wrote it
git blame names the person who ran the agent. Provenance for agent-written code needs the session, the model, the instruction and the reasoning, attached to the change and surviving refactors.
Stopping agents deleting code nobody agreed to delete
Autonomous sessions remove code to make things compile, and the removal rarely reaches the summary. How a pre-commit guard on unaccounted deletions works, and how to run it without blocking real work.
Operations
What an agent session actually costs, per response
Input, output, cache writes and cache reads are priced differently, and long agent sessions are dominated by re-read context. How to compute the real cost of a session and where the money goes.
A self-hosted stack for AI-assisted development
Which parts of an agent workflow can run on your own infrastructure, which cannot, and what each choice costs in quality and effort.
Reference notes
How to prove an AI code change did what you asked
AI writes plausible code that quietly does the wrong thing. Proving a change means tying the commit to the goal it was meant to deliver and recording a verdict — verified, partial, or not wired — you can audit. How it works.
Mask secrets in sync errors and diffs — how Aura redacts before they leak
Aura's redact pipeline strips API keys, JWTs, and dotenv values out of sync errors, diffs, and agent prompts before they leave the machine. Pattern set + custom rules.
Homebrew on Apple Silicon — the official default prefix is /opt/homebrew
On Apple Silicon Macs, Homebrew installs to /opt/homebrew by default — not /usr/local. The official docs and the Aura CLI both expect this prefix.
tree_sitter_typescript::language_tsx in Rust — the right way to wire it up
How to use tree_sitter_typescript::language_tsx() from Rust without crashing on JSX-heavy files. Crate version compatibility, parser init, and how Aura uses it.