You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The desktop GUI's Security panel lists the tool calls the security gate blocked (quarantined), but lucid / lucid tui / lucid acp and the Neovim plugin have no equivalent. A terminal or Neovim user cannot SEE what the gate blocked in their own session.
Add a read-only viewer: a lucid blocks CLI and a :LucidBlocks command, the terminal-native mirror of the GUI Security panel. Sibling of lucid kb / :LucidKb (P-NVIM.6, #316).
Current behavior / problem
The gate (harness/omp/security_extension.ts) blocks a tool call via pi.on("tool_call") and records the quarantine in agent_obs.duckdb.
A live bare-lucid TUI/ACP session holds agent_obs.duckdb READ-WRITE, so a cross-process READ_ONLY open (what a separate lucid blocks process would do) fails. A pure terminal session's blocks are therefore invisible from outside the running agent.
The GUI sidesteps this because it records blocks its own way (desktop/security_log.ts, a lock-free JSONL) in addition to the DB.
Constraints
Invariant feat/mac-build #1 (extend omp, never fork): a CLI + hook, no omp patch.
Invariant build(deps): bump github/codeql-action from 3 to 4 #3 (fail-closed is law): the viewer and any new logging MUST NOT be able to perturb the gate's block decision. Any mirror write is best-effort, env-gated, and happens AFTER the decision.
Metadata only: never surface raw scanned content (tool, a severity summary, the reason only).
Read-only: releasing or approving a quarantine stays a GUI action (the audited fail-closed override).
tools/blocks_cli.ts: read-only lucid blocks [--all] [--json], merging (a) the lock-free JSONL block log and (b) the DuckDB quarantines (securitySnapshot, READ_ONLY, skipped when the DB is held). Wired into the launcher main() like lucid kb / lucid stats.
harness/omp/block_log.ts: a scanner-free mirror. The in-process gate appends each block to ~/.omp/lucid-blocks.jsonl when the launcher opts in via LUCID_BLOCK_LOG, so a block is visible during a live session. The GUI never sets the env, so it never double-writes.
lucid blocks lists the quarantined tool calls (tool, severity, findings, reason); --all includes reviewed rows; --json for editors.
Blocks are visible DURING a live bare-lucid session (the lock-free log path), not only after it exits.
:LucidBlocks / <leader>lb shows the same list in a read-only Neovim float.
Fail-closed untouched: make test-failclosed green; the mirror can never affect a block decision.
New unit tests (block log, blocks CLI, launcher routing, the Neovim pure helper); a new make demo-<increment> green; make test green; root tsc + license headers clean.
Summary
The desktop GUI's Security panel lists the tool calls the security gate blocked (quarantined), but
lucid/lucid tui/lucid acpand the Neovim plugin have no equivalent. A terminal or Neovim user cannot SEE what the gate blocked in their own session.Add a read-only viewer: a
lucid blocksCLI and a:LucidBlockscommand, the terminal-native mirror of the GUI Security panel. Sibling oflucid kb/:LucidKb(P-NVIM.6, #316).Current behavior / problem
harness/omp/security_extension.ts) blocks a tool call viapi.on("tool_call")and records the quarantine inagent_obs.duckdb.agent_obs.duckdbREAD-WRITE, so a cross-process READ_ONLY open (what a separatelucid blocksprocess would do) fails. A pure terminal session's blocks are therefore invisible from outside the running agent.desktop/security_log.ts, a lock-free JSONL) in addition to the DB.Constraints
Recommended approach (mirrors P-NVIM.6, #316)
tools/blocks_cli.ts: read-onlylucid blocks [--all] [--json], merging (a) the lock-free JSONL block log and (b) the DuckDB quarantines (securitySnapshot, READ_ONLY, skipped when the DB is held). Wired into the launchermain()likelucid kb/lucid stats.harness/omp/block_log.ts: a scanner-free mirror. The in-process gate appends each block to~/.omp/lucid-blocks.jsonlwhen the launcher opts in viaLUCID_BLOCK_LOG, so a block is visible during a live session. The GUI never sets the env, so it never double-writes.extensions/neovim:M.blocks()read-only float +:LucidBlocks+<leader>lb.Acceptance criteria
lucid blockslists the quarantined tool calls (tool, severity, findings, reason);--allincludes reviewed rows;--jsonfor editors.:LucidBlocks/<leader>lbshows the same list in a read-only Neovim float.make test-failclosedgreen; the mirror can never affect a block decision.make demo-<increment>green;make testgreen; root tsc + license headers clean.References
tools/kb_cli.ts,:LucidKb.desktop/security_log.ts,tools/web/data.ts(securitySnapshot).P-NVIM.7.