# Review

Clear due memory reviews with free recall, the two-minute habit that makes learning...

- Repository: https://github.com/nagisanzenin/engram (1471 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-08-27
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add nagisanzenin/engram --skill review -g -a claude-code -y`
Codex: `npx skills add nagisanzenin/engram --skill review -g -a codex -y`
Cursor: `npx skills add nagisanzenin/engram --skill review -g -a cursor -y`
Gemini CLI: `npx skills add nagisanzenin/engram --skill review -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add nagisanzenin/engram`

## Description

Clear due memory reviews with free recall, the two-minute habit that makes learning permanent. Use when reviews are due, or the user wants to review, practice, or "do my engram reviews".

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# /review, the retention loop

Read `skills/_shared/dialogue-grammar.md` (hard rules, confidence integrity, park-and-resume, and the rating map apply here verbatim). Set:

```bash
# Resolve the engine. RUN THIS BLOCK VERBATIM, do not substitute a path you guessed.
# Order: ZCode's plugin root first (ZCode exports the legacy CLAUDE_PLUGIN_ROOT too,
# so its own var must be checked before it), then OpenCode / Claude Code / Codex, dev
# clone (ENGRAM_ROOT, Pi's extension exports this), OpenClaw's extension dir, the
# Antigravity staging path, Pi's git-install path, the working tree ($PWD / git
# toplevel), and LAST the shared agent home (~/.agents/engram, the clone route for
# platforms that read ~/.agents; last so it can shadow nothing). First one exists wins.
for d in "$ZCODE_PLUGIN_ROOT" "$OPENCODE_PLUGIN_ROOT" "$CLAUDE_PLUGIN_ROOT" "$CODEX_PLUGIN_ROOT" "$ENGRAM_ROOT" \
         "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/extensions/engram" \
         "$HOME/.gemini/config/plugins/engram" \
         "$HOME/.pi/agent/git/github.com/nagisanzenin/engram" \
         "$PWD" "$(git rev-parse --show-toplevel 2>/dev/null)" \
         "$HOME/.agents/engram"; do
  [ -n "$d" ] && [ -f "$d/scripts/engram.py" ] && ENGRAM="$d/scripts/engram.py" && break
done
if [ -z "$ENGRAM" ]; then
  echo "engram: engine not found, set ENGRAM_ROOT to your engram checkout" >&2
  return 2 2>/dev/null || exit 2   # FAIL CLOSED: proceeding runs `python3 ""`,
fi                                  # which dumps a python usage error at the learner
```

If none are set, resolve the plugin root as the directory containing `.zcode-plugin/plugin.json`, `.claude-plugin/plugin.json`, or `.codex-plugin/plugin.json`. **Never inline a learner's answer into a shell command**, pass productions via `--production-file` (or `--production-file -` on stdin); a stray quote or `$(…)` in what they typed would otherwise execute.

The rest: https://github.com/nagisanzenin/engram/blob/HEAD/skills/review/SKILL.md
