CLI reference¶
lp is the human-facing CLI, implemented with
typer. Every command honours .luplo
for default --project / --actor. Invoke any subcommand with
--help to see its exact flags.
uv run lp --help
uv run lp <command> --help
Project bootstrap¶
lp init¶
Initialise luplo in the current directory. Writes .luplo, runs
Alembic migrations, seeds the project and actor. Idempotent.
Flag |
Description |
|---|---|
|
Project ID (e.g. |
|
Your email — primary identifier since v0.5.1. |
|
Human-readable project name (defaults to project ID). |
|
Display name (defaults to email local-part). |
|
Explicit actor UUID (generated if omitted). |
|
PostgreSQL URL. Env: |
|
Optional Remote server URL. Env: |
lp brief¶
Active work units + recent decisions for the current project.
Flag |
Description |
|---|---|
|
Override project. |
|
Filter by system. |
Identifying rows by prefix¶
Every CLI command that takes an id (lp items show <item-id>,
lp task start <task-id>, lp work close <work-id>, …) accepts either
a full canonical UUID or a hex prefix of at least 8 characters.
Dashes in the input are ignored, so you can paste a85a4555 or
a85a-4555 — both resolve the same way.
If a prefix matches more than one row, the CLI prints the conflicting
ids with a label and exits with status 2. Type a longer prefix (or
the full UUID) to disambiguate. Prefix length below the 8-char minimum
is rejected up front to avoid accidental wide matches.
The MCP server and the HTTP API both require full UUIDs — prefix resolution is a CLI-only convenience because LLM and machine callers typically already have the full id from a previous list response.
Items¶
lp items add <title>¶
Add an item.
Flag |
Description |
|---|---|
|
Item type (default |
|
Main content. |
|
Why this decision. |
|
System to tag. |
|
Overrides. |
lp items list¶
Flag |
Description |
|---|---|
|
Filter by item type. |
|
Filter by system. |
|
Max rows (default 20). |
lp items search <query>¶
Glossary-expanded tsquery search. The query accepts a small web-search-style dialect (full grammar in Search pipeline):
Syntax |
Meaning |
|---|---|
|
required term (AND) |
|
phrase match |
|
disjunction (literal uppercase |
|
negation |
|
negated phrase |
Parentheses are not parsed; use De Morgan rewrites
((!A & B) & !C → B -A -C). Supports -n, --limit (default 10).
lp items show <item-id>¶
Resolves ID prefixes to the chain head.
Captures¶
Captures are raw intake. They are separate from items and do not appear
in item search. Use lp capture promote to create a curated item.
Capture input is text-only and BYOLLM: luplo stores caller-provided text and optional annotations, but it does not transcribe, summarize, classify, infer sensitivity, or decide what should be promoted.
Command |
Effect |
|---|---|
|
Save raw text to the capture backlog. Requires an actor in local mode. |
|
List recent captures, newest first. Hidden by default: discarded and redacted rows. |
|
Full-text search over capture text and optional summary. Omit |
|
Store caller-supplied annotation hints. Options: |
|
Move a capture to |
|
Mark a capture |
|
Replace text/summary with |
|
Explicitly create a normal item through existing item validation and link it via |
Common options:
Flag |
Description |
|---|---|
|
Filter |
|
Include discarded rows in |
|
Include redacted rows in |
|
Limit result count. |
|
Promotion uses project + actor to create the target item. |
Promotion is the only path from raw captures into curated memory:
uv run lp capture add "raw thought from today"
uv run lp capture find "raw thought"
uv run lp capture promote <capture-id> --type knowledge --title "Useful pattern"
uv run lp items search "Useful pattern"
Ideas (legacy)¶
Deprecated for raw intake. Use capture for unstructured backlog entries. Ideas remain for compatibility with work-unit-scoped ideation notes.
Existing lp idea commands are still available and keep their behavior:
Command |
Effect |
|---|---|
|
Append an ideation note to a work unit. If |
|
List ideas for a work unit, newest first. |
|
Search ideas within a project, optionally narrowed by work unit, author, or time. |
|
Mark an idea redacted while preserving the row for compatibility and audit. |
Work units¶
lp work open <title>¶
Flag |
Description |
|---|---|
|
Description. |
|
System to attach. |
lp work resume <query>¶
Find in-progress work units whose title matches the query.
lp work close <work-id>¶
Flag |
Description |
|---|---|
|
|
|
Close even if an |
Audit (blast radius)¶
lp impact <item-id>¶
Traverse outgoing typed edges (depends / blocks / supersedes /
conflicts) from item-id and print every reachable item with the
edge type that first reached it. Cycles are broken automatically;
each item appears once, at its shortest-path depth. Traversal stops
at five hops server-side — this is a design principle, not a
performance limit (see Philosophy).
Flag |
Description |
|---|---|
|
Max depth, 1–5 (default 5). Values outside the range are rejected by the CLI. |
|
|
Exits 1 when the root item is not found, 2 when depth is out of range.
Rule pack¶
lp check¶
Run the deterministic rule pack over the project graph. Exits
non-zero if any finding has severity error. See
Rule pack (lp check) for each rule and the .luplo [checks] disabled_rules
project-level override.
Flag |
Description |
|---|---|
|
Repeat to restrict to specific rules by name. Disabled rules are skipped even when named here. |
|
Display threshold: |
|
Print every registered rule with its default severity and exit. |
Tasks¶
Tasks live in items with item_type='task'.
Command |
Effect |
|---|---|
|
Create in |
|
Chain heads ordered by |
|
Single task, resolved to chain head. |
|
|
|
|
|
|
|
Any → |
|
Edit title / body / |
|
In-place |
|
Show the one |
QA checks¶
QA checks live in items with item_type='qa_check'.
Command |
Effect |
|---|---|
|
Create in |
|
With |
|
Chain-head view. |
|
|
|
|
|
|
|
|
|
Assign an assignee. |
Systems¶
Command |
Effect |
|---|---|
|
|
|
All systems for the current project. |
Glossary¶
Command |
Effect |
|---|---|
|
Approved groups. |
|
Candidates awaiting curation. |
|
Move a pending term into a group. |
|
Permanently reject (written to |
Worker¶
Command |
Effect |
|---|---|
|
Start the foreground worker loop. Quiet until a job fires. |
Do not run this in Remote mode — the server handles it via its
lifespan hook when LUPLO_WORKER_ENABLED=true.
Authentication¶
The CLI talks to a local PostgreSQL (LocalBackend) by default — no
authentication needed. The HTTP server has no built-in auth either;
see Running the Remote server for how to put your own auth layer
in front.
Environment variables honoured¶
These override the .luplo file (which itself overrides defaults):
LUPLO_DB_URLLUPLO_PROJECTLUPLO_ACTOR_IDLUPLO_SERVER_URL
See Configuration reference for the full list (including server-only variables).