
Cli Anything Joplin
- 124 installs
- 46.6k repo stars
- Updated August 3, 2026
- hkuds/cli-anything
Automate Joplin notebooks, notes, to-dos, tags, attachments, search, sync, and import/export through a stateful harness backed by the real joplin terminal binary.
About
A stateful CLI harness that drives the real joplin terminal binary to manage notebooks, notes, to-dos, tags, attachments, search, and sync. A developer uses it to automate Joplin note workflows from the command line.
- Backed by the real joplin terminal binary with optional --profile targeting
- Covers notebooks, notes, to-dos, tags, attachments, search, sync, import/export
Cli Anything Joplin by the numbers
- 124 all-time installs (skills.sh)
- +14 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #237 of 550 CLI & Terminal skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hkuds/cli-anything --skill cli-anything-joplinAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 124 |
|---|---|
| repo stars | ★ 46.6k |
| Last updated | August 3, 2026 |
| Repository | hkuds/cli-anything ↗ |
What it does
Automate Joplin notebooks, notes, to-dos, tags, attachments, search, sync, and import/export through a stateful harness backed by the real joplin terminal binary.
Files
cli-anything-joplin
Use this skill to automate Joplin notebook, note, to-do, tag, attachment, search, sync, and import/export workflows through a stateful harness backed by the real joplin terminal binary.
Requirements
- Python 3.10+
- Joplin terminal binary available as
joplin - Optional: pass
--profileto target a specific Joplin profile
Install
cd joplin/agent-harness
pip install -e .Usage
# REPL mode (default)
cli-anything-joplin
# Machine-readable one-shot command
cli-anything-joplin --json notebooks list
# Stateful project
cli-anything-joplin project new --name demo -o ./demo.joplin-harness.json
cli-anything-joplin --project ./demo.joplin-harness.json notes create "Meeting note"
# Dry-run (no auto-save)
cli-anything-joplin --json --dry-run --project ./demo.joplin-harness.json notes create tempJSON output contract
When --json is enabled, commands return:
ok: booleancommand: stable command identifier such asnotes.list,todos.toggledata: command payloaderror: null on success, or{ type, message }on failure
Command groups
project:new,open,save,info,json,statusnotebooks:list,create,use,removenotes:list,create,set,get,remove,copy,move,renametodos:list,create,toggle,clear,done,undonetags:list,add,remove,notetags,tagnotessearch:runsync:run(--target,--upgrade,--use-lock)interop:import,exportconfig:get,set,list,export,import-fileattach:addstatus:show,restorebackend:version,dump,keymap,geoloc,export-sync-statusserver:status,start,stope2ee:status,target-status,decrypt,decrypt-filesession:status,undo,redo,history
Agent guidance
- Prefer
--jsonfor parseable output. - Use
--projectwhen running multi-step workflows so history is persisted. - One-shot mutating commands auto-save the project unless
--dry-runis set. - REPL mode does not auto-save; run
project saveexplicitly. - Some Joplin CLI builds gate
searchbehind GUI mode; if you see
"only available in GUI mode", treat search as best-effort.
- Joplin 3.6.x can have a broken
versioncommand in npm global layouts; the
harness falls back to installed package metadata for backend version, probing the symlink-resolved binary directory, the Windows-style sibling node_modules/joplin, the Unix-style parent lib/node_modules/joplin, and finally npm root -g.
- Backend
stdout/stderrin command results are verbatim; do not assume
warnings were stripped from note bodies or exports.
- On failure, parse
errorusing the samecommandfield as success
(config.import_file, e2ee.decrypt_file). Multi-word subcommands use a single dot between group and subcommand.
Test workflow
# Quick feedback loop
python -m pytest -q cli_anything/joplin/tests/test_core.py
python -m pytest -q cli_anything/joplin/tests/test_full_e2e.py::TestCLISubprocess
# Real backend (joplin must be in PATH)
python -m pytest -v cli_anything/joplin/tests/test_full_e2e.py::TestBackendCommands
python -m pytest -v cli_anything/joplin/tests/test_full_e2e.py::TestBackendWorkflows
python -m pytest -v cli_anything/joplin/tests/test_full_e2e.py::TestBackendIntegration
# Full suite
python -m pytest -v --tb=no cli_anything/joplin/tests
# Verify the installed console script entry point
CLI_ANYTHING_FORCE_INSTALLED=1 python -m pytest -v -s cli_anything/joplin/tests/test_full_e2e.pyCurrent validation baseline (Windows + Joplin CLI 3.6.2):
python -m pytest -q cli_anything/joplin/tests/test_core.py->107 passedpython -m pytest -q cli_anything/joplin/tests->134 passed, 1 skipped