name: logseq-cli
description: Operate the current Logseq command-line interface to inspect or modify graphs, pages, blocks, tasks, tags, and properties; run Datascript queries; show page/block trees; manage graphs; and manage db-worker-node servers. Use when a request involves running logseq commands or interpreting CLI output.
Logseq CLI
Overview
Use logseq to inspect and edit graph entities, run Datascript queries, and control graph/server lifecycle.
Quick start
- Run
logseq --helpto see top-level commands and global flags. - Run
logseq <command> --helpto see command-specific options. - Use
--graphto target a specific graph. - Omit
--outputfor human output. Set--output jsonor--output ednonly when machine-readable output is required.
Command groups (from logseq --help)
- Graph Inspect and Edit:
list node,list page,list tag,list property,list task,list assetupsert block,upsert page,upsert tag,upsert property,upsert task,upsert assetremove block,remove page,remove tag,remove propertyquery,query list,show,search block|page|property|tag- Graph Management:
graph list|create|switch|remove|validate|info|export|import|backup list|backup create|backup restore|backup removeserver list|cleanup|start|stop|restartdoctorsync status|start|stop|upload|download|remote-graphs|ensure-keys|grant-access|config set|get|unset- Authentication:
login|logout - Utilities:
agent bridge,completion,debug,example,skill
Global options
--configPath tocli.edn(default<root-dir>/cli.edn)--graphGraph name--root-dirPath to CLI root dir (default~/logseq)--timeout-msRequest timeout in ms (default10000)--outputOutput format (human,json,edn)--profileEnable stage timing profile output to stderr--verboseEnable verbose debug logging to stderr
Command option policy
- Do not memorize or hardcode command options in this skill.
- Before running any command, always check live options with:
logseq <command> --helplogseq <command> <subcommand> --help
Task command preference
- If a user request is task-related, prefer task-scoped commands first.
- Use
list task,upsert task, and other... taskcommands before block/page-level alternatives. - Only fall back to
upsert block/list pagestyle workflows when task commands cannot satisfy the requested operation. - For any task state, create/update the task with
upsert task --status <status>and keep status markers out of--content. - If the same task block also needs additional tags, use explicit tag association separately, for example
upsert block --id <task-block-id> --update-tags '["AI-GENERATED" "CLI"]'.
Examples policy
- Do not maintain long static command examples in this skill.
- Use
logseq exampleas the source of truth for runnable examples. - Before proposing runnable commands, always inspect live examples with:
logseq examplelogseq example <command-or-prefix...>logseq example <command-or-prefix...> --help
- Prefer exact selectors when possible (for example,
logseq example upsert page). - Use prefix selectors when grouped examples are needed (for example,
logseq example upsert). - Replace placeholder ids/uuids in retrieved examples with real entities from the target graph.
- Use
logseq list ...,logseq show ..., orlogseq query ...first to discover valid ids/uuids. - For graph transfer flows, keep
graph export --fileandgraph import --inputpaths consistent. - Quote
--contentvalues with single quotes in shell examples, for example--content 'Block content', so markdown backticks are not interpreted by the shell.
Structured block writes
- When writing multi-item or hierarchical content, prefer a block tree instead of packing everything into one block.
- Preserve the source structure as sibling and child blocks. Each logical bullet, row, or subsection should usually become its own block.
- Reserve
--contentfor true single-block writes or targeted updates to one existing block. - If the user asks to write notes, lists, outlines, imported data, or any content that already has structure, do not flatten it into one long
--contentstring.
Tag association semantics
- For block or page tag association, prefer explicit CLI tag options such as
--update-tagsand--remove-tags. upsert blocksupports--update-tagsin both create mode and update mode.--update-tagsexpects an EDN vector.- Tag values may be tag title/name strings, db/id, UUID, or
:db/identvalues. - String tag values may include a leading
#, but they should still be passed inside--update-tags. - If the user asks to tag a block or page, prefer explicit tag association.
- Tags must already exist and be public. If needed, create the tag first with
upsert tag --name "<TagName>".
Anti-patterns and correct usage
Task status in block content
- Anti-pattern: store task state in content, for example
--content 'DONE Implemented and verified ...'withupsert block. - Correct usage: store task state as structured task data with
upsert task --status <status>and keep content free ofTODO,DOING,DONE, or other status markers. - Example:
logseq upsert task --graph "Lambda RTC" --target-page "May 4th, 2026" --content 'Some content here' --status done --output json- If tags are needed, use the returned block id:
logseq upsert block --graph "Lambda RTC" --id <returned-block-id> --update-tags '["AI-GENERATED" "CLI" "db-sync"]'
Hashtags in content instead of tag association
- Anti-pattern: treat content hashtags as tag association, for example
--content 'Summary #AI-GENERATED'. - Correct usage: keep tags in explicit tag options, for example
upsert block --update-tags '["AI-GENERATED"]'.
Comma-separated tag lists
- Anti-pattern: pass tag updates as a comma-separated string, for example
--update-tags "AI-GENERATED,CLI". - Correct usage: pass an EDN vector, for example
--update-tags '["AI-GENERATED" "CLI"]'.
Missing or private tags
- Anti-pattern: retry the same tag association command after a tag association failure without checking tag state.
- Correct usage: verify the tag exists and is public; create it first when needed with
upsert tag --name "<TagName>".
Tips
query listreturns both built-ins andcustom-queriesfromcli.edn.agent bridgestarts/reuses db-worker-node, listens to db-worker-node events, scans routable tasks on startup and each event, starts one in-process master Codex session, and dispatches matched task/comment requests to that session.show --idaccepts either one db/id or an EDN vector of ids.remove block --idalso accepts one db/id or an EDN vector.upsert blockenters update mode when--idor--uuidis provided.- Always verify command flags with
logseq --helpandlogseq <...> --helpbefore execution. - If
logseqreports that it doesn’t have read/write permission forroot-dir, then check filesystem permissions or setLOGSEQ_CLI_ROOT_DIR. - In sandboxed environments,
graph createmay print a process-scan warning to stderr; if command status isok, the graph is still created.