Skip to content
CLI Tools
Skill

/cli-anything-joplin

Command-line interface for Joplin workflows using the real joplin terminal backend

From plugin
cli-anything
59k71 skills9 commands

Claude Code

$ npx -y skills add HKUDS/CLI-Anything --skill cli-anything-joplin --agent claude-code

SKILL.md

cli-anything-joplin.SKILL.md
name: "cli-anything-joplin"
description: "Command-line interface for Joplin workflows using the real joplin terminal backend"

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 `--profile` to 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 temp

JSON output contract

When `--json` is enabled, commands return:

  • `ok`: boolean
  • `command`: stable command identifier such as `notes.list`, `todos.toggle`
  • `data`: command payload
  • `error`: null on success, or `{ type, message }` on failure

Command groups

  • `project`: `new`, `open`, `save`, `info`, `json`, `status`
  • `notebooks`: `list`, `create`, `use`, `remove`
  • `notes`: `list`, `create`, `set`, `get`, `remove`, `copy`, `move`, `rename`
  • `todos`: `list`, `create`, `toggle`, `clear`, `done`, `undone`
  • `tags`: `list`, `add`, `remove`, `notetags`, `tagnotes`
  • `search`: `run`
  • `sync`: `run` (`--target`, `--upgrade`, `--use-lock`)
  • `interop`: `import`, `export`
  • `config`: `get`, `set`, `list`, `export`, `import-file`
  • `attach`: `add`
  • `status`: `show`, `restore`
  • `backend`: `version`, `dump`, `keymap`, `geoloc`, `export-sync-status`
  • `server`: `status`, `start`, `stop`
  • `e2ee`: `status`, `target-status`, `decrypt`, `decrypt-file`
  • `session`: `status`, `undo`, `redo`, `history`

Agent guidance

  • Prefer `--json` for parseable output.
  • Use `--project` when running multi-step workflows so history is persisted.
  • One-shot mutating commands auto-save the project unless `--dry-run` is set.
  • REPL mode does not auto-save; run `project save` explicitly.
  • Some Joplin CLI builds gate `search` behind GUI mode; if you see

`"only available in GUI mode"`, treat search as best-effort.

  • Joplin 3.6.x can have a broken `version` command 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`/`stderr` in command results are verbatim; do not assume

warnings were stripped from note bodies or exports.

  • On failure, parse `error` using the same `command` field 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.py

Current validation baseline (Windows + Joplin CLI 3.6.2):

  • `python -m pytest -q cli_anything/joplin/tests/test_core.py` -> `107 passed`
  • `python -m pytest -q cli_anything/joplin/tests` -> `134 passed, 1 skipped`
Read more
@hkuds
Ships withcli-anything

"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/

Stars on GitHub

Momentum

stars in total
58.5k
Star history of HKUDS/CLI-Anything on GitHub, a chart by star-history.com

Other skills on cli-anything.

cli-anything-adguardhome

cli-anything-adguardho…

Command-line interface for AdGuard Home - Network-wide ad blocking and DNS management via AdGuard Home REST API. Designed for AI…

@hkuds@hkudsInstall Skill
cli-anything-anygen

cli-anything-anygen

Command-line interface for Anygen - A stateful command-line interface for AnyGen OpenAPI — generate professional slides,…

@hkuds@hkudsInstall Skill
cli-anything-audacity

cli-anything-audacity

Command-line interface for Audacity - A stateful command-line interface for audio editing, following the same patterns as the…

@hkuds@hkudsInstall Skill

More skills from other plugins.

find-skills

find-skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a…

skills4d39k
@vercel-labs-2@vercel-labs-2Install Skill
ohmyposh

ohmyposh

Install, configure, or troubleshoot Oh My Posh/ohmyposh: shell init, themes, segments, Nerd Font icons, and prompt setup on…

@jandedobbeleer@jandedobbeleerInstall Skill
mgrep

mgrep

MANDATORY: Replaces ALL built-in search tools. You MUST invoke this skill BEFORE using WebSearch, Grep, or Glob. NEVER use the…

mgrep6mo4.4k
@mixedbread-ai@mixedbread-aiInstall Skill

Questions about cli-anything-joplin.

Which coding agents can use cli-anything-joplin?
cli-anything-joplin installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.