Docs · Coding agents

Nura in your coding agent


Claude Code, Gemini CLI, Cursor, Copilot and Codex each read a memory file in your repo. nura sync writes one managed block into those files from your Nura memory, and reads back what changed. Your commits can close plans too. Every agent reads the same open plans and decisions, and nothing changes in Nura without evidence.

Start

Two commands.


nura login                       # sign in (opens your browser)
nura --project Atlas sync         # link the repo to a project (name or id); reconcile, render, stamp

nura sync is one command. It reads what changed since the last sync and closes plans on evidence, writes the block, and stamps the lines that name a record. The first run in a terminal also sets up the repo. If the repo has no agent file, it asks which agent you use and creates that file. When it finishes, it offers to install the hooks.

The repo remembers its project, so later syncs and the hooks need no --project. A repo that isn't linked to a project refuses and says how to link it. It never falls back to your personal memory on its own. To sync your personal memory on purpose, run nura sync --personal; that block goes to .nura/personal.md, never to a tracked file. These need nura 0.3.2 or later; see the nura CLI to install or upgrade.

The managed block

One block, generated, stamped.


nura sync writes the block into the agent files the repo already has. It does not create one outside the first-run prompt. To write to a file the repo doesn't have yet, name it with --files, for example nura sync --render --files AGENTS.md.

AgentFile
Claude CodeCLAUDE.md
CodexAGENTS.md
Gemini CLIGEMINI.md
Cursor.cursor/rules/nura.mdc
GitHub Copilot.github/copilot-instructions.md

The block sits between two markers. Text outside the markers belongs to you:

<!-- nura:begin v1 scope=project:harbor rendered=2026-09-30T14:02Z sig=65359b267778 -->
## Nura — project:harbor (generated; do not edit inside this block)
…
### Open plans
- [ ] Rotate the Stripe keys · owner: priya · due 2026-10-03 · nura:pl_8f3a1c2e
- [ ] Ship the pricing page · owner: marco · blocked on the copy · nura:pl_51d0b7aa
### Pending decisions
- Auth provider for the mobile app — options on record, no decision · nura:dc_0c44e9f1
### Decisions (current)
- Postgres over Mongo (2026-09-12) · nura:dc_7a91bbbb
<!-- nura:end -->

Closing a plan

Evidence, never prose.


A plan closes in Nura in one of three ways:

Rotate Stripe keys

Nura-Closes: nura:pl_8f3a1c2e

nura sync · advanced

One step at a time.


nura sync --render               # only write the block; no reconcile, no stamps
nura sync --reconcile            # only read the files' edits and the commits since the last sync
nura sync --dry-run              # show what would change; write nothing
nura sync --audit                # match every line in the agent files to Nura; writes nothing
nura sync --files CLAUDE.md      # only these files (globs work)
nura sync --undo                 # remove the block and every id sync added; Nura is not changed

--reconcile prints a receipt with one line per change. For example:

nura sync --reconcile
  close Rotate the Stripe keys — via commit 13c88498 · avery.lin@example.com
  already done: Ship the pricing page
  refused nura:pl_deadbeef: unknown
  candidate (not applied): done with the copy review

Use --dry-run to see the same receipt as would close … lines with nothing written. For scripts and CI, put --json before the command: nura --json sync --reconcile. --quiet prints nothing, which is what the hooks use.

nura hooks

No command to remember.


nura hooks install               # add the hooks to this repo
nura hooks doctor                # list what's installed and when the last sync ran
nura hooks uninstall             # remove them

Teams

Shared repos, shared projects.


nura sync --map-author priya@example.com=@priya

Mappings are kept in the repo, in .nura/authors.json. A commit from an author Nura can't match is credited to whoever ran the sync, and the git author is kept alongside.

Moving an existing file over

Audit first.


If your CLAUDE.md already tracks plans by hand, run the audit before the first render. It matches every open, done and pending line in your agent files (plus docs/memory/*.md) to the project's records. It writes nothing:

nura --project Atlas sync --audit

It prints a table with one row per file and record, then a summary that counts those same rows. For example:

rows: agree 18 · disagree 0 · weak 345 (from 478 matched segments) · unmatched items 527

Agree means the file and Nura say the same thing. Disagree means they don't, for example the file says done and Nura says open. Weak means the match is uncertain, so it's yours to judge. Unmatched counts the lines Nura has no record for. A long note line is read in pieces (segments), and the pieces that match the same record share one row. Lines in the block are stamped, so they always agree.