Hybrid Anki CLI for humans and agents.
anki-cli supports both:
- AnkiConnect backend (use a running Anki Desktop instance)
- Direct SQLite backend (operate directly on collection files)
Current release: 0.1.4 (alpha).
From PyPI (recommended):
uv tool install anki-cli
anki --versionWith optional TUI extras:
uv tool install "anki-cli[tui]"Inspect environment and backend:
anki status
anki versionList core entities:
anki decks
anki notetypes
anki tagsQuery cards and notes:
anki cards --query "deck:Default is:due"
anki notes --query "tag:verb"
anki search --query "(tag:verb OR tag:noun) -is:suspended"Inspect individual objects:
anki card --id 1234567890
anki note --id 1234567890
anki deck --deck "Default"
anki notetype --name "Basic"Global backend selection:
anki --backend auto ...
anki --backend ankiconnect ...
anki --backend direct ...Collection override (direct backend):
anki --backend direct --col "/path/to/collection.anki2" statusBackend behavior:
auto: detects and chooses best available backendankiconnect: forwards search queries tofindCardsandfindNotesdirect: compiles queries to SQL and executes directly on the collection DB
Supported filters:
deck:NAME(supports*glob)notetype:NAMEtag:NAME(supports*glob)is:new,is:learn,is:review,is:due,is:suspended,is:buriedflag:Nprop:ivl>N,prop:due>N,prop:reps>N,prop:lapses>N(<,<=,=,>=,>)nid:ID,cid:ID- bare text and quoted text (
"specific text")
Logical syntax:
- implicit
ANDfrom whitespace - explicit
OR - unary
-andNOT - parentheses for grouping
Examples:
anki cards --query "deck:Japanese is:due"
anki cards --query "tag:verb -is:suspended"
anki notes --query "\"specific text\""
anki cards --query "(tag:a OR tag:b) is:new"anki cards --query "deck:Default"
anki card --id 123
anki card:suspend --query "is:due"
anki card:unsuspend --id 123
anki card:move --query "tag:to-move" --deck "Archive"
anki card:flag --query "is:review" --flag 3
anki card:bury --query "deck:Default"
anki card:unbury --deck "Default"
anki card:reschedule --query "tag:reset-me" --days 3
anki card:reset --query "tag:relearn"
anki card:revlog --id 123 --limit 20anki notes --query "deck:Default"
anki note --id 123
anki note:add --deck "Default" --notetype "Basic" --Front "Q" --Back "A"
anki note:edit --id 123 --Front "Updated Q" --Back "Updated A"
anki note:fields --id 123
anki note:delete --id 123 --yes
anki tag --tag "verb"
anki tag:add --query "deck:Default" --tag "important"
anki tag:remove --id 123 --tag "important"
anki tag:rename --from "old" --to "new"anki deck --deck "Default"
anki deck:create --name "Japanese::Vocab"
anki deck:rename --from "Old" --to "New"
anki deck:delete --deck "Temporary" --yes
anki deck:config --deck "Default"
anki deck:config:set --deck "Default" --new-per-day 20 --reviews-per-day 200
anki notetypes
anki notetype --name "Basic"
anki notetype:create --name "MyType" --field "Front" --field "Back"
anki notetype:field:add --notetype "Basic" --field "Extra"
anki notetype:field:remove --notetype "Basic" --field "Extra"
anki notetype:css --notetype "Basic" --set ".card { font-size: 18px; }"anki review
anki review:next
anki review:show
anki review:preview --id 123
anki review:answer --id 123 --rating good
anki review:undoInteractive TUI review (requires TUI extras, direct backend):
anki review:start --deck "Japanese"Global output formats:
anki --format json ...
anki --format table ...
anki --format md ...
anki --format csv ...
anki --format plain ...Exit codes:
0: success1: backend operation failed2: invalid input or confirmation required4: entity not found7: backend unavailable
This repo ships a SKILL.md at the project root that AI agents (Cursor, Windsurf, Cline, etc.) can consume to operate anki-cli without human guidance. It covers the full command reference, JSON output structure, search query syntax, error codes, and common workflows.
To use it in Cursor, copy or symlink it into your skills directory:
# Personal skill (available across all projects)
mkdir ~/.cursor/skills/anki-cli
cp SKILL.md ~/.cursor/skills/anki-cli/SKILL.md
# Or project-local skill (shared via the repo)
mkdir .cursor/skills/anki-cli
cp SKILL.md .cursor/skills/anki-cli/SKILL.mdFor other AI coding agents, point them at SKILL.md in the repo root or include it in your agent's context/system prompt.
- Use
--yesfor destructive operations (note:delete,deck:delete). - In direct mode, avoid write operations while Anki Desktop is open.
- If Anki Desktop is running, prefer
--backend ankiconnect.
uv sync --group dev
uv run ruff check .
uv run ty check
uv run pytestWith optional TUI dependencies:
uv sync --group dev --extra tui
uv run pytest -m tuiMIT. See LICENSE.
