⬅ Back to README · Documentation index
The CLI is the stable contract for Logics. It supports:
- bootstrapping the
logics/tree; - creating requests, backlog items, tasks, product briefs, roadmaps, and ADRs;
- promoting request -> backlog and backlog -> task;
- splitting large requests or backlog items;
- closing tasks, backlog items, and requests with consistency checks;
- linting and auditing workflow traceability;
- exporting indexes, context packs, and graph data;
- serving a read-only local browser viewer for the Logics corpus;
- serving the bounded MCP tool surface.
Useful commands:
logics-manager flow list
logics-manager flow show req_001_example
logics-manager flow promote request-to-backlog req_001_example
logics-manager flow promote backlog-to-task item_001_example
logics-manager flow start task_001_example
logics-manager flow progress task task_001_example --progress 40%
logics-manager flow finish task task_001_example
logics-manager flow roadmap propose --title "Project roadmap" --milestone "0.1: MVP"
logics-manager roadmap status
logics-manager roadmap place task_001_example --milestone "0.1: MVP"
logics-manager sync read-doc req_001_example --max-chars 6000
logics-manager sync context-pack req_001_example task_001_example --format json
logics-manager sync refresh-mermaid-signatures task_001_example
logics-manager assist cdx-memory show --scope current --clean
logics-manager design prompt --text "garage upgrade icons" --kind icon-sheet --cell-size 256x256 --cells "boost: a turbo|repair: a wrench" --out logics/design/garage-icons
logics-manager doctor packaging --metadata-only
logics-manager flow closeout task_001_example --validation-command "pytest tests" --validation-result passed --lint --audit
logics-manager view --open
logics-manager view --focus req_001_example --read --openfleet answers "what is happening everywhere" in one call:
logics-manager fleet status --root ~/projects
logics-manager fleet health --root ~/projects --format jsonDiscovery is a directory listing — any immediate child of --root containing a
logics/ directory counts — so there is no repository registry to keep in sync.
It does not recurse.
A repository that fails is reported inline under its own key, and the remaining repositories are still reported:
{
"ok": false,
"failed_count": 1,
"repositories": {
"alpha": {"error": "..."},
"beta": {"ok": true, "issue_count": 0}
}
}The command is read-only. Mutating across repositories is deliberately out of
scope: target one explicitly with --repo-root.
sync list-docs and sync read-doc report updated_at (the timestamp of the
document's most recent commit) and age_days alongside the existing fields. A
document with no commit yet falls back to its filesystem mtime, so an
uncommitted draft is still dated. The lookup is one batched git log walk over
logics/, cached against the current commit — not one call per document, and
not frozen for the life of a long-running process either.
health reports open documents untouched for longer than a threshold:
{
"stale_after_days": 14,
"stale_doc_count": 2,
"stale_docs": [{"ref": "req_010_example", "age_days": 41, "...": "..."}]
}Configure the threshold in logics.yaml:
health:
stale_after_days: 30Stale documents are reported outside issues/issue_count, and do not change
the ok verdict: age is a nudge, not a correctness problem, and folding it in
would flip ok for every corpus that has one old open document.
The same age and the same threshold apply on every surface — the CLI, the
browser viewer, and the VS Code insights panel all date documents from the
commit history and read health.stale_after_days from logics.yaml. Changing
that one value changes all three.
logics-manager update resolves the package manager from the executable that is
actually running — a pipx/venvs/ path, an npm package directory carrying our
package.json, or a site-packages install — and only falls back to guessing
when the layout is unrecognised.
logics-manager update --check --format json # report state, install nothing
logics-manager update # update the running copy
logics-manager update --manager pipx # override the resolution--check --format json reports manager, path, current_version,
latest_version, update_available, and any shadowing_executables, so an
automated updater no longer has to match on the phrase "already at latest
version".
If the layout is unrecognised and another logics-manager is already on
PATH, the update is refused rather than guessed: guessing wrong is what
installed a second, shadowing copy in the field. Pass an explicit --manager,
or --allow-shadow to accept the guess. Duplicates on PATH are also reported by
logics-manager doctor, under environment_warnings — they are an install-layout
problem, not a corpus problem, so they do not change the doctor verdict.
The two distribution package names are @grifhinz/logics-manager on npm and
logics-manager on PyPI; they ship the same CLI.
The viewer reports the same install details in its update banner — the resolved manager, the running executable's path, and any duplicate executables on PATH — so a shadowing install is visible without opening a terminal. The banner appears for a duplicate even when nothing needs updating, and can be dismissed for the session; it returns on the next one, or sooner if the duplicates on PATH change. An actual update notice is never suppressed by that dismissal.
bootstrap creates the logics/ tree, refreshes the managed section of
AGENTS.md/LOGICS.md, and regenerates logics/instructions.md. It also
removes the bridge files older versions generated into the repository:
.claude/commands/logics-*.md, .claude/agents/logics-*.md, and
logics/skills/.
It removes nothing else under .claude/. Your settings.json,
settings.local.json, projects/, worktrees/, and your own agents and
commands are left alone; .claude/commands/ or .claude/agents/ are pruned
only when removing a generated file leaves them empty.
Everything bootstrap writes stays inside the repository, unless you pass
--sync-harnesses, which is the one flag that touches ~/.claude, ~/.codex,
~/.hermes, and ~/.gemini. Use bootstrap --check to see the planned
creations and removals without applying them.
Every command accepts --repo-root DIR, in any position, and operates on that
repository regardless of the current working directory:
logics-manager status --repo-root /path/to/project
logics-manager --repo-root=/path/to/project flow list
logics-manager flow new request --repo-root "/path/with spaces" --title "..."Without it, the repository is discovered by walking up from the current directory, exactly as before. This is what an external orchestrator should use instead of changing directory per invocation — it also keeps repository paths out of shell command strings, so paths containing spaces work.
The path must exist and contain a logics/ directory. bootstrap is the one
exemption, since creating logics/ is its job.
The browser viewer serves /api/lint, /api/audit, and /api/health. The
first two carry validation findings; the third carries the workflow health
report, which is where blocked documents, backlog items with no task, and stale
documents live. All three feed the Validation health screen.
/api/health is read-only, and a failure to produce the report degrades to an
"unavailable" note rather than blanking the screen.
The switcher lists the active project and its siblings. Opening it loads each
project's open-work count, issue signals, and stale-document count from
/api/projects-state, reusing the same per-repository reports fleet reports,
so "where is work blocked" is answered without switching into each project.
The scan runs when the menu opens, not while the viewer starts, and a project
that fails to report is shown as unreadable while the others still render.
Directories with no logics/ are still listed — the switcher is also how a
project gets bootstrapped — and are simply not scanned.
Use the standalone fleet entry point when you want a viewer before choosing a project:
logics-manager view --fleet --open--fleet decides which screen the viewer opens on, not what the server can do.
Every viewer is fleet-capable: adr_028 scoped the fleet registry to the operator
profile, so one local server serves the whole fleet and the project switcher offers
fleet root management from any launch. What --fleet changes is where you land.
| Launch | Opens on |
|---|---|
logics-manager view |
the launch project's board |
logics-manager view --fleet |
the Fleet home |
any URL carrying ?project=<id> |
that project's board |
--fleet also skips the prompt to bootstrap the current directory, so it is the way
to open a viewer from a plain folder that holds no corpus.
Before 2.21.10 the server was fleet-capable and treated as fleet-launched, so any
request without a project parameter landed on the Fleet home even from a plain
view inside a project. The capability and the launch intent are now separate.
Fleet roots are operator-scoped viewer preferences. Add or remove them from the Fleet home or project menu. Discovery scans only each configured root's immediate children and lists both existing Logics corpora and bootstrappable project folders; it never recursively scans home or disk.
The Fleet home lazy-loads the same open-work, issue, and stale-work signals as
/api/projects-state. A project that cannot be read is shown inline while the
remaining projects still render. The path is tucked behind each project's
details row for confirmation/debugging.
logics-manager lint --require-status flags a workflow document edited without updating an
indicator. It judges the working tree and the index — what you have changed and not yet
committed. A clean tree has nothing for it to judge, so a document you have already
committed is never flagged by it.
That is deliberate. It used to fall back to re-reading the last commit, which made the finding unclearable: re-baselining writes nothing a past commit can see, and the flagged set was whatever the last commit happened to contain, so re-baselining one document appeared to invalidate another.
The commit question is asked separately, on demand, about one ref:
logics-manager lint --commit HEAD # what this commit changed without an indicator
logics-manager lint --commit HEAD~3 --format jsonWire that into a commit hook or a delivery check. It exits non-zero when a workflow document was committed without updating an indicator or marking the edit non-semantic.
Every command and subcommand answers --help (and -h) with its own usage and
flags, and exits 0:
logics-manager --help # the command listing
logics-manager status --help # one command's own flags
logics-manager flow new request --helpThis is the authoritative source for the current contract, which is why the
generated LOGICS.md bridge points at it. tests/python/test_cli_help_contract.py
enumerates the command surface from the CLI's own registration and asserts the
behavior for each entry, so a newly added command cannot quietly opt out.
For bounded workflow inspection, prefer logics-manager flow show <ref> or
logics-manager sync read-doc <ref> before reading Markdown directly. Both
commands include useful body content in text mode and keep JSON output available
with --format json.
For linked context, use logics-manager sync context-pack <refs...> with a
small set of request, backlog, or task refs. The command deduplicates each
ref's direct neighborhood and supports --mode diff-first when recent changes
matter.
For longer-term product sequencing, use logics-manager flow roadmap propose
to create a logics/roadmap/road_*.md companion doc with versioned milestones
such as 0.1, 0.2, and 1.0. Use flow roadmap show <road_ref> for a
bounded read and flow roadmap validate <road_ref> before handing the plan to
another assistant.
For daily roadmap upkeep, use logics-manager roadmap status to list open
High/Medium workflow refs that are not mentioned in roadmap files, then
logics-manager roadmap place <ref> --milestone "<name>" to append a specific
ref under a milestone. This is intentionally a placement helper, not an
automatic planner.
For external AI asset workflows, use logics-manager design prompt --text ...
to generate a prompt pack for an image generator. Each asset kind carries its own
profile, so a single-image kind such as hero-image never receives sheet
instructions, forces --count to 1, and defaults to an opaque background, while
sheet kinds get grid, padding, and slicing guidance.
Useful options:
--cell-size 256x256states the per-cell pixel size and derives the sheet total from the grid, for example4x4 grid, 1024x1024 total with 256x256 cells. Without it the generator picks its own resolution, which is the usual cause of a sheet coming back at half the size you needed.--paletteand--styleare carried through as their own lines so a second generation stays consistent with the first.--safe-area "the left half"names and places the region kept free for composited text. Generators put the subject dead centre when the zone is only implied.--cells "create-league: a trophy plinth|join-league: a keycard"lists what goes in each cell, in fill order, and sets--countfrom the list so the two can never disagree. Sliceable kinds only.--ref <workflow-ref>adds the doc title and lifts its art-direction bullets (palette, style, do-not, avoid) into the prompt.--transparent/--no-transparentonly force the exception; the default now comes from the kind.
The payload exposes both the assembled prompt string and a sections map
(subject, target, canvas, palette, style, quality, exclude) for
callers that want to recompose it. The command writes prompt.md and
prompt-pack.json only when --out is passed.
Workflow Mermaid blocks in request, backlog, and task docs are optional legacy
presentation. The source of truth is the structured Markdown: indicators,
lineage links, acceptance criteria, validation records, and # Links sections.
For generated relationship views, use logics-manager sync export-graph or the
viewer instead of maintaining diagrams by hand.
For targeted legacy hygiene, use
logics-manager sync refresh-mermaid-signatures <refs-or-paths...> or
--changed-only to refresh signatures only when Mermaid blocks already exist;
the command skips Mermaid-free workflow docs. For end-of-delivery cleanup, use
logics-manager flow closeout <task> with validation evidence plus --lint --audit when you want the command to run the gates before reporting.
logics-manager ships reusable agent skills under the open skills/<name>/SKILL.md
convention (agentskills.io) that Claude Code, Codex, and Hermes all share,
covering the workflow end to end:
| Skill | Stage |
|---|---|
/corpus |
Scaffold a chain from a need: request → product brief → backlog → orchestration task → context pack. |
/groom-issues |
Turn external tracker issues into a scoped corpus, keeping provenance. |
/implement-task |
Build one scaffolded task, validate it, record it, close it out. |
/review-project |
Read a codebase and capture the findings as one lightweight request. |
/lifecycle-ops |
Split, promote, withdraw, close, finish, or progress a doc that already exists. |
/roadmap-deliver |
Propose/show/validate a roadmap, or deliver a chain straight from a product brief. |
/closeout-repair |
Diagnose a blocked closeout and run the specific repair command that fixes it. |
/project-health |
Run the read-only diagnostics (doctor/health/status/followups/product-consistency/audit) as a pre-flight check. |
They depend only on this project's own command surface — no specific orchestrator, agent runtime, or model provider — so they update with the package instead of being copied by hand onto each machine.
logics-manager skills list
logics-manager skills install # into ~/.claude/skills
logics-manager skills install --target-dir ~/.codex/skills
logics-manager skills install --all-profiles # every detected harness dir--all-profiles detects ~/.claude/skills, ~/.codex/skills, ~/.hermes/skills,
~/.gemini/config/plugins/logics-manager/skills (Antigravity), and every cdx
profile home (Claude Code profiles via claude-home/, Codex profiles via
config.toml).
Antigravity's skills directory is one level deeper than the others: it only
discovers skills inside a registered plugin, not from a flat shared folder -
verified against a real install (its own docs and a third-party field report
disagreed on ~/.gemini/config/skills, <project>/.agents/skills, and plain
~/.gemini/skills, none of which actually exist on a real machine; an
installed plugin's own skills/ folder, sitting next to its plugin.json
manifest, does). install/--all-profiles writes that manifest automatically
the first time it installs there - no separate setup step.
Re-running install detects drift by content, not just by whether the
destination exists: a skill whose bundled content changed since the last
install is refreshed, a skill you hand-modified is left alone and reported,
and logics-manager update (or the deprecated self-update alias) re-runs
this sync across every detected harness automatically after a successful
update - no separate --force step needed for the common case.
This repository also ships a .claude-plugin/plugin.json manifest, so Claude
Code can install it as a plugin instead of (not in place of) running skills install by hand: the manifest declares the same logics_manager/skill_assets
directory as its skills path, and an mcpServers entry that launches
logics-manager mcp serve via the bundled scripts/npm/logics-manager.mjs
launcher. .claude-plugin/marketplace.json self-references it for a
marketplace-style install. Codex and Hermes have no equivalent plugin-manifest
mechanism, so skills install --all-profiles remains the way to reach them.
The default Logics corpus stays plain canonical Markdown. No frontmatter is
written unless a repository explicitly opts in with obsidian.enabled: true in
logics.yaml.
When enabled, the Obsidian projection is a derived view over the canonical blockquote indicators:
obsidian:
enabled: truelogics-manager obsidian sync
logics-manager obsidian sync --check
logics-manager obsidian cleanobsidian sync writes deterministic YAML frontmatter above supported Logics
docs with type, ref, status, understanding, confidence, optional
progress / theme, a title alias, and tags derived from type, status, and
theme. It also rewrites a backtick-quoted ref that resolves to a real doc in
the corpus (e.g. `req_318_x`) into an Obsidian [[wikilink]], so the
graph view actually draws an edge for it — a ref that only appears in prose
and does not resolve to a doc is left untouched, never linked. Re-running the
command is idempotent.
obsidian sync --check reports projection drift for CI without writing files,
covering both stale frontmatter and stale/missing wikilinks. obsidian clean
removes the managed logics_projection: obsidian frontmatter block, reverses
every wikilink it added back to its original backtick form, and restores the
canonical Markdown body byte-for-byte. Logics Manager parsing, linting, audit,
flow transitions, and index generation continue to treat the blockquote
indicators as authoritative; frontmatter and wikilinks are never required to
parse a document. The normal linter reports a blocking issue when committed
Obsidian frontmatter drifts from canonical type/ref/status/title metadata.
Use the CLI viewer when you want to inspect the Logics corpus outside VS Code:
logics-manager view --openThe viewer starts a localhost-only browser UI on 127.0.0.1:8765 by default. It shows the same workflow board/list experience as the extension, with search, filters, document previews, corpus insights, lint/audit health, Mermaid rendering, auto-refresh, and an edit shortcut that opens the selected Markdown file in the system editor. The CDX section includes a read-only Memory sub-screen that reuses assist cdx-memory show payloads with scope controls and raw/cleaned excerpts.
For fleet navigation, use logics-manager view --fleet --open. It opens the
same viewer server on the Fleet home; no separate Logics tray or background
service is introduced.
The topbar includes focused operational views:
| View | Purpose |
|---|---|
| Explorer | Read-only repository tree with bounded previews for text, images, directories, oversized files, and unsupported binary files. |
| Workshop | Local terminals and command runs. Terminals use the vendored xterm.js frontend; commands are discovered from package.json and pyproject.toml scripts and stream output over SSE. |
| Git | Repository status, changed files, and diffs for review-oriented inspection. |
| CI | Local/remote validation status surfaced for release and handoff checks. |
| CDX | Guarded assistant workflows for audits, release reviews, corpus planning, and pre-release preparation. |
| Settings | Viewer preferences, display controls, refresh behavior, and local UI state. |
Projects may adopt the optional project-owned i18n contract:
logics-manager i18n status
logics-manager i18n init --source-locale fr
logics-manager i18n plan
logics-manager i18n lint
logics-manager i18n validateSee Project i18n contract for the complete source-only, existing catalog, locale-addition, CI, and compatibility-migration workflows.
The contract lives at logics/i18n/contract.json. A new UI project may begin
with one source-locale JSON catalog; multiple translations are not required at
initialization. Repositories without a contract remain valid and receive
advisory guidance. Once adopted, validation checks repository-contained catalog
paths, semantic key segments, string and non-empty leaves, exact locale parity,
and named placeholder parity. Projects without user-facing copy may initialize
the contract with i18n init --not-applicable --reason "...".
The Workshop menu adds a separated project-tools section when the selected repository uses a supported project convention:
- Translations recognizes two or more locale-named JSON files (
en.json,fr-FR.json, and similar) undersrc/i18n,src/locales,locales, ormessages. It aligns nested keys, reports missing, extra, and empty values, supports search, and can edit existing string values. - Theme recognizes CSS custom properties in
src/theme.css,src/styles.css,styles/theme.css,app/globals.css, orsrc/app.css. It groups tokens into colors, typography, spacing, radii, shadows, and other values, provides isolated previews, and can edit existing declaration values.
The viewer prefers a valid project-owned i18n contract. Legacy repositories can
still choose sources explicitly with a repo-root .logics-viewer.json file:
{
"i18n": { "directory": "src/i18n", "sourceLocale": "en" },
"theme": { "path": "src/styles.css" }
}Translation dictionaries and theme modes defined in JavaScript or TypeScript
are detected when they use conventional src/i18n.* or src/theme.* paths,
but remain read-only because rewriting executable source is intentionally out of
scope. Project-tool reads are bounded to repository files of at most 1 MB, 20
locales, and 10,000 translation keys. Writes accept a logical locale/key or
selector/property pair rather than an arbitrary path, require the viewer's
existing mutation authorization, reject stale revisions, validate the new value,
and atomically replace only the detected source file.
For remote status, the viewer detects GitHub and GitLab remotes from
git remote -v. GitHub Actions status uses gh; GitLab CI status uses glab
against the configured GitLab host when a .gitlab-ci.yml or
.gitlab-ci.yaml file is present.
Viewer preferences live on the server, not in the browser profile: the browser
store is only a cache for the first paint. Operator-scoped preferences —
favourites, last-used projects, Fleet discovery roots, refresh interval — are
written to LOGICS_VIEWER_PREFERENCES_HOME if set, and otherwise to
.config/logics-manager/viewer-preferences.json under the process HOME.
Repository-scoped preferences stay with their corpus. Auto-refresh restores the
interval chosen in the viewer unless the launch command explicitly sets
--refresh-interval, in which case that launch value controls only the current
session.
Because the operator record follows HOME, a viewer launched under a different one
opens a different record, and favourites and Fleet roots appear to be gone. That
is reported rather than left to guess: the launch banner, the Settings screen and
the viewer info payload all name the record in use, and logics-manager doctor
raises a forked_preference_stores environment warning when a second record
exists for the account. adr_033 keeps the HOME keying — a process that sets HOME
is asking to be isolated — and makes the other record reachable instead: Settings
offers to add its favourites and Fleet roots to the active one. That adoption is
explicit, additive, and never writes to the file it reads. To share one record
across launches deliberately, point LOGICS_VIEWER_PREFERENCES_HOME at it. The CDX status table has compact controls for column visibility, provider
filtering, and account management. BLOCK and CR are hidden by default, and
provider filtering defaults to all providers so newly discovered providers remain
visible. An ON/OFF toggle column lets you enable or disable any CDX session
directly from the table without leaving the viewer; the change takes effect
immediately via cdx enable / cdx disable on the host.
Two additional controls sit next to the configure and filter icons:
- Import (↑) — select a
.cdxexport file, enter the optional passphrase, and choose whether to merge with existing accounts or replace them. The file is decoded client-side and sent to the local viewer server, which callscdx import --merge(or without--merge) with the passphrase passed exclusively through an environment variable — it never appears in any command line or log. - Export (↓) — choose which enabled sessions to include (disabled accounts
are excluded from the list automatically), supply an optional passphrase to
encrypt the bundle, and tick whether credentials should be embedded
(
--include-auth). The server callscdx exportinto a temporary file, returns the bundle to the browser, and the browser triggers an automatic download namedcdx-accounts.cdx. Temporary files are cleaned up immediately after each operation. When workspace inspection is available, the topbar shows anExplorerview beforeGit; it provides a read-only file tree and bounded previews for text, directories, images, oversized files, and unsupported binary files.
The Workshop view is local-machine only. Terminal sessions and command runs are
created on the machine running logics-manager view, appear with running-count
badges in the topbar, and can be stopped from the UI. Terminal sessions are
cleaned up after the browser disconnects, while quick reloads can reattach
without leaving duplicate sessions behind.
For phone or tablet inspection on the same trusted network, launch with --lan:
logics-manager view --lan --openLAN mode binds to 0.0.0.0, computes a reachable local-network URL, and adds a
per-session bearer token for non-loopback requests. The browser receives a
shareable URL and, when the optional segno package is installed, a QR code.
LAN mode is still read-only at the HTTP layer; workflow mutations continue to go
through canonical CLI commands.
To actually use Workshop terminals or run actions from a phone on the same
network, opt-in to read/write mode with --lan-rw and serve over HTTPS:
logics-manager view --lan --lan-rw --tls --open--tlsgenerates a self-signed certificate under~/.cache/logics-manager/tls/on first launch (delegated to theopensslbinary). The SAN covers loopback plus the detected LAN IP, so iOS/Android accept the cert after a one-time trust prompt. Pass--tls-cert PATH --tls-key PATHto supply your own pair instead.--lan-rwenables a PIN-based pairing handshake. When a device clicks "Pair this device" in the LAN banner, the host prints a 6-digit PIN on stdout. Type the PIN on the device and it receives a per-device bearer token persisted as a SHA-256 hash under~/.cache/logics-manager/devices.json. Cleartext is only sent to the device once; revoke a lost device via the device list or by deleting its entry from the JSON file.- Cross-origin POSTs are refused (CSRF). Mutating endpoints require a loopback client or a request whose bearer token matches a paired device.
Without --tls, --lan-rw works but the boot banner warns that device
tokens transit in cleartext. Either add --tls or wrap the viewer in a
Tailscale / WireGuard / VPN tunnel before pairing real devices.
The CDX missions panel includes guarded workflows for audits, release reviews,
turning a free-form wish into a structured Logics request, preparing a corpus
plan, and preparing a guarded pre-release from an editable vX.X.X version.
For full-audit and release-review, the main write checkbox allows CDX to write
the mission corpus/report; direct repository fixes require the separate Fix directly checkbox and skip the corpus/report artifact. Write-capable missions
must report changed files and validation evidence. The corpus-ready mission asks
CDX for allowed corpus actions first; the corpus is updated when those returned
actions are applied explicitly. The pre-release mission may update release
metadata and create the matching changelog, but must not tag, push, publish,
upload assets, or create a GitHub release.
Useful options:
logics-manager view --port 0 --open
logics-manager view --lan --port 0 --open
logics-manager view --host 127.0.0.1 --port 9876
logics-manager view --focus req_001_example --open
logics-manager view --focus logics/tasks/task_001_example.md --read --open
logics-manager view --no-openUse --port 0 when the default port is already taken. Direct Logics workflow mutations still route through canonical CLI commands such as flow promote, flow finish, lint, and audit; guided CDX missions may edit repository files only when the mission's file-write checkbox is enabled.
Focused viewer links can point directly at a corpus item, and the short form is the one worth writing:
http://127.0.0.1:8765/?focus=req_368
http://127.0.0.1:8765/?focus=req_368&read=1
http://127.0.0.1:8765/?focus=item_821&project=logics-manager
http://127.0.0.1:8765/?focus=logics/request/req_001_example.md
kind_number (req_368, item_821, task_380) resolves to the one document whose id
starts with it. A short form naming more than one document -- req_36 -- resolves to
nothing rather than to whichever sorted first, so a link either opens what was meant or
says it found nothing.
project= takes the name the switcher shows (logics-manager, pom) as well as the
opaque id the viewer emits. Same rule: exactly one match or nothing.
The address is not a guess. ~/.cache/logics-manager/viewers.json records the running
viewer's port and scheme -- it is what view reads to say it is reusing a viewer already
running -- so a link can be written against the viewer that is actually up, and its absence
is how you know there is none to link to. Note that a viewer started with --port 0 picks a
different port each time it restarts.
If the viewer server is not already running, start it with the equivalent fallback command:
logics-manager view --focus logics/request/req_001_example.md --open
logics-manager view --focus req_001_example --read --openThis is the recommended assistant handoff pattern: provide the local viewer link for an already-running viewer and the CLI fallback command for a stopped server. Focus targets accept workflow refs such as req_001_example, item_001_example, or task_001_example, plus repo-relative Logics Markdown paths. Traversal and non-Logics paths are rejected.
Workflow target arguments accept these forms:
- a workflow ref, such as
req_001_example,item_001_example, ortask_001_example; - a repo-relative Markdown path under the matching Logics directory, such as
logics/request/req_001_example.md; - an absolute path only when it resolves inside the current repository.
These are the canonical directory names, and the ones the tool writes:
| Kind | Canonical directory | Also accepted |
|---|---|---|
| Request | logics/request |
logics/requests |
| Backlog item | logics/backlog |
logics/backlogs |
| Task | logics/tasks |
logics/task |
| Spec | logics/specs |
logics/spec |
| Product brief | logics/product |
logics/products |
| Roadmap | logics/roadmap |
logics/roadmaps |
| Architecture decision | logics/architecture |
logics/architectures |
| Runbook | logics/runbook |
logics/runbooks |
| External | logics/external |
logics/externals |
Five are singular and two are plural, with no rule to infer, so a path is guessed
wrong about half the time. Renaming was measured and rejected as out of proportion to
the papercut, so the alternate form is simply accepted wherever a path is resolved:
logics/task/task_001_example.md and logics/tasks/task_001_example.md behave
identically. Nothing on disk is renamed, moved, or created, and the canonical form is
what every command writes. If both forms ever exist as real directories, the canonical
one wins and logics-manager health reports the other as a corpus anomaly.
Mutation commands reject .. traversal and files outside the repository before writing. Output paths passed with --out must also be repo-relative and remain inside the repository after resolution. Configured log/cache paths in logics.yaml may be repo-relative or absolute, but absolute paths must still resolve inside the current repository.
When a command supports --format json, stdout is a machine-readable JSON payload. Human-oriented status, diagnostics, and progress text should not be mixed into stdout for JSON mode. This makes JSON-mode commands safe to pipe into tools such as jq or consume from scripts.
--json is a shorthand for --format json on commands that support JSON output.
JSON-capable operator commands:
| Command | Purpose | JSON output |
|---|---|---|
logics-manager status |
Summarize open workflow docs and next actions. | --format json or --json |
logics-manager health |
Show workflow health counts and issue signals. | --format json or --json |
logics-manager followups |
List follow-up areas with request creation commands. | --format json or --json |
logics-manager product-consistency |
Check product brief lineage links. | --format json or --json |
logics-manager search <query> |
Search workflow docs directly. | --format json or --json |
logics-manager index |
Regenerate logics/INDEX.md. |
--format json or --json |
logics-manager lint |
Validate doc shape and changed-doc hygiene. | --format json or --json |
logics-manager audit |
Validate workflow traceability and governance. | --format json or --json |
logics-manager sync ... |
Read, list, search, repair, and export workflow state. | --format json or --json on supported subcommands |
logics-manager assist ... |
Build review, validation, context, and runtime summaries. | --format json or --json on supported subcommands |
logics-manager flow ... |
Create, promote, split, close, finish, and list docs. | --format json or --json on supported subcommands |
Operator triage flow:
logics-manager status --json
logics-manager health --json
logics-manager product-consistency --json
logics-manager followups --source-kind product --jsonUse status first when you need the next work signal. Use health for corpus-level anomalies. Use product-consistency --strict in release checks when active product briefs must have valid lineage. Use followups for open actionable follow-up areas; add --include-closed only when auditing historical docs.
Multi-file workflow mutations such as flow promote, flow split, and flow finish validate their direct inputs before writing. New workflow docs are created with exclusive filesystem writes, so an ID collision fails instead of overwriting an existing file; rerun the command to allocate a fresh ID after reviewing git status/git diff. They still operate on Markdown files in the working tree rather than through a database or transaction service; if the filesystem fails mid-write, recover with git status/diff and rerun after cleanup.
To update the installed CLI later:
logics-manager updatelogics-manager self-update remains available as the legacy alias for the same
update workflow.
For npm installs (recommended), update with:
npm install -g @grifhinz/logics-manager@latestIf self-update reports an externally managed Python environment on a
legacy pip/pipx install, the supported answer is to migrate to the
npm package above rather than to repair the Python install. The PyPI
artifact is still published, but pipx upgrades remain available only
for users who have not migrated yet:
# Legacy path, kept for compatibility (npm install is preferred):
pipx upgrade logics-manager
# Or rebuild the venv if pip blocked the install:
pipx install --force logics-managerIf npm reports a successful update but logics-manager --version still shows an older version, another installation is earlier on PATH. Diagnose it with:
type -a logics-manager
whence -a logics-manager # zsh
pipx list
npm prefix -g
npm list -g @grifhinz/logics-manager --depth=0
"$(npm prefix -g)/bin/logics-manager" --versionIf the direct npm binary shows the expected version, remove the older Python install or move the npm global bin directory earlier on PATH. In zsh, run rehash or open a new terminal after changing installs so the shell forgets any cached command location.
When installed with pipx from a local path, self-update reports that original
spec, for example from spec '/path/to/logics-manager'. That installation is
updated from the local working tree, not from the PyPI artifact. Use
pipx uninstall logics-manager && pipx install logics-manager when you want to
switch back to the published PyPI package.
Do not mark a Logics task as Done by editing markdown indicators manually.
Use the canonical logics-manager guarded finish command so closure propagates correctly from task -> backlog -> request and the linked chain is verified.
During multi-wave task work, use logics-manager flow progress task ... --progress <n>% instead of editing Progress by hand. The command updates the task and recalculates linked backlog item progress from linked tasks.
npm run logics:finish:task -- logics/tasks/task_020_orchestration_delivery_for_req_019_req_020_and_req_021.mdThis uses the runtime-native command:
logics-manager flow finish task ...
If you want a full repository-wide check afterward, run:
npm run audit:logics
If you edit statuses by hand, the docs can look valid while the request/backlog chain is left out of sync.
For multi-wave delivery work, prefer coherent checkpoints:
- update the linked Logics docs during the wave that changes the behavior;
- leave the repo in a commit-ready state at the end of the wave;
- then create the reviewed commit checkpoint instead of batching several undocumented partial states.
This follows ADR 009: tooling should guide commit-ready checkpoints, not auto-commit or require one commit for every micro-step.
- Promotion is only allowed for request/backlog items that are not already used.
- Items with
Progress: 100%are treated as completed. - The UI reads and writes the existing Markdown files; it does not manage a separate database.
- For stable references in the board/details panel, use canonical markdown links:
Derived from \logics//.md`orPromoted from `...``# Backlogsection in requests# Referencesand# Used bysections with backticked relative paths
- For companion docs (
prod_*,road_*,adr_*),Related request/backlog/task/product/roadmap/architectureindicators are also indexed as managed-doc links. - Companion docs should still mirror those links under
# Referenceswith canonical relative paths so the runtime and plugin stay aligned. - Legacy nested list blocks (
- References:/- Used by:) are also parsed for backward compatibility.