Hybrid Anki CLI for humans and agents
Project description
anki-cli
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.0 (alpha).
Install
From PyPI (recommended):
uv tool install anki-cli
anki --version
With optional TUI extras:
uv tool install "anki-cli[tui]"
Quick Start
Inspect environment and backend:
anki status
anki version
List core entities:
anki decks
anki notetypes
anki tags
Query 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"
Backend Modes
Global backend selection:
anki --backend auto ...
anki --backend ankiconnect ...
anki --backend direct ...
Collection override (direct backend):
anki --backend direct --col "/path/to/collection.anki2" status
Backend behavior:
auto: detects and chooses best available backendankiconnect: forwards search queries tofindCardsandfindNotesdirect: compiles queries to SQL and executes directly on the collection DB
Search Query Language
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"
Common Commands
Cards
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 20
Notes and tags
anki 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"
Decks and notetypes
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; }"
Review
anki review
anki review:next
anki review:show
anki review:preview --id 123
anki review:answer --id 123 --rating good
anki review:undo
Interactive TUI review (requires TUI extras, direct backend):
anki review:start --deck "Japanese"
Output and Exit Codes
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
Safety Notes
- 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.
Development
uv sync --group dev
uv run ruff check .
uv run ty check
uv run pytest
With optional TUI dependencies:
uv sync --group dev --extra tui
uv run pytest -m tui
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anki_cli-0.1.0.tar.gz.
File metadata
- Download URL: anki_cli-0.1.0.tar.gz
- Upload date:
- Size: 183.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7541757275f089b50cdae0a605eeb1243171864b1a47750eb148333185776740
|
|
| MD5 |
82cd155d516b8765a1447e5c7cc1bb4e
|
|
| BLAKE2b-256 |
4f5a4e155acbdda21cc780c4be0551efd05609cb05da188bd6ff1122c683fa26
|
File details
Details for the file anki_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: anki_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 105.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4109f6d83e1ed9cfef5c454a894d30912b25f63dd698480ac86bb1c96031635
|
|
| MD5 |
676e12b3d5078d12a190e9e4f2a9b09b
|
|
| BLAKE2b-256 |
c716d0275386f7f3a820a1c9472f9c1221016ec7a23c59e47c785779ae381ca6
|