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 <project-id> sync  # 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.

Without --project, the block shows your personal memory and goes to .nura/personal.md. nura sync requires nura 0.3.1 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=029326088f7b -->
## 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 Nura. It writes nothing:

nura sync --audit

It prints a table with one row per line, then a summary. For example:

items 713 · agree 21 · disagree 10 · weak 241 · unmatched 441

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. Unmatched means Nura has no record for the line. Lines in the block are stamped, so they always agree.