Proqi

The terminal-native prompt composer for power users running multiple coding agents.
Serious prompting deserves more than a send box.

Why Proqi · Workflow · Install · Controls · Screenshots · Herdr · CLI · Privacy · Configuration

Proqi is a terminal-native power-user prompt composer that keeps every next instruction, screenshot, and alternative as an independent, resumable thought— ready to refine, reorder, copy, or send to the right coding agent without interrupting its current work.

Do you hate this editor?

Not the agent.
The input field.

Codex, Claude Code, and similar CLI harnesses are excellent. Their input still belongs to one live stream. Draft the next prompt there and an agent question or wrong turn forces you to cut it out, clear the field, steer, and paste it back. Alternatives, later prompts, and screenshots spill into temporary files.

An unsent harness draft is not isolated from other senders either. If another agent submits through Herdr while text is waiting in that input field, the harness can concatenate both independent instructions and submit them as one accidental prompt. What looked like a safe draft becomes part of another agent's message without a distinct turn boundary.

Proqi is the solution: an agent-ready prompt editor on steroids, built for power users. Capture independently; edit, select, duplicate, reorder, recover, and discover local skills and commands later.

On macOS, the same board becomes a Screenshot Inbox. Captures arrive as private, annotatable thoughts: no dragging across panes and no accidental drop into the agent.

One board, many prompts

Every thought stays editable. Keep alternatives and choose the next submission only when ready.

  1. Keep working in your terminal while coding agents continue.
  2. Define each next work piece in Proqi—not in a live Codex or Claude input.
  3. Capture text and screenshots, then edit, annotate, select, and order them.
  4. Copy one thought, a range, or the whole board; or submit the ordered board to a verified adjacent agent through Herdr.

Proqi is a prompt composer—not a task manager, Markdown IDE, or agent harness. Standalone work uses the clipboard. Native submission works only through verified Herdr, never arbitrary terminals, agents, or multiplexers.

Install

Homebrew is recommended:

brew install oborchers/tap/proqi

Scope Homebrew trust to this formula:

brew trust --formula oborchers/tap/proqi
brew upgrade --formula oborchers/tap/proqi

Or use Rust 1.88+:

cargo install proqi --locked

The latest release has checksummed macOS/Linux archives and an amd64 Debian package. Proqi never runs sudo, package managers, or updates implicitly. Uninstalling preserves data.

Start and resume

proqi                         # new board
proqi -c                      # latest inactive board here
proqi -r                      # searchable session browser
proqi -r <id-or-name>         # exact session
proqi sessions                # list and search

Run proqi -c in the agent's project and its last board returns. No temporary prompt files or unsaved Sublime scratch document.

Changes autosave; exit prints the resume command. Boards rename, trash, restore, and run in parallel; one lease prevents concurrent editing.

A genuinely empty board opens with + Start typing. Type or paste immediately to create the first thought, or click the insertion row to reveal the ordinary empty editor first. Nothing is saved until content is produced. Press Esc to use Board controls instead. Returning focus to the pane does not override that Board choice.

Primary means logical Cmd (Super or Meta) on macOS and logical Ctrl elsewhere. Proqi receives modifiers only after the operating system, keyboard remapper, and terminal have handled the key. Raw Ctrl is not a second Primary modifier on macOS.

The tables below describe the factory map. The complete stable action and context inventory is in context/KEYMAP_ACTIONS.md. Help and footer labels always show the bindings resolved from the active configuration.

Board controls

Input Action
n, Enter on + New thought, paste, or click Create a thought
Primary+V / p with no selection Paste exactly as a new thought
j / k or arrows Focus next / previous; twice at a blocked bottom / top edge creates there
Ctrl+↓ / or Ctrl+j / k Focus the last / first live thought without wrapping
macOS Ctrl+N / Ctrl+Shift+N; elsewhere Alt+↓ / or Alt+j / k Insert a blank below / above the focused thought and edit it
Page Up / Page Down Move five thoughts previous / next
Enter or e Edit
macOS Option+Shift+↓ / ; Primary+J / Primary+K, Primary+Shift+↓ / , or drag Reorder
Primary+C / y; Primary+X / x Copy; safe cut
d or Del (Entf on German keyboards) Delete
Space; Primary+A / a Toggle selection; select all
Shift+↑ / , K / J, or Shift+Page Up / Shift+Page Down; v then move Extend by one, extend by five, or latch a range
macOS Ctrl+Shift+↓ / or Ctrl+Shift+J / K Extend the anchored range to the last / first live thought
Primary+D / Shift+D Duplicate thought or selection
Primary+Enter / s; Primary+Shift+Enter / Shift+S; then arrows or h / j / k / l if needed Submit and remove after acceptance; submit and keep
Primary+Z / u Undo a board operation
Primary+Shift+Z / Primary+Y Redo a board operation
Primary+Shift+V / Shift+P Paste and clean up spacing
f Clean up spacing in the focused thought
c; /; :; i; ? Collapse; search; commands; Screenshot Inbox; help
Esc; Primary+Q / q Clear selection; exit after durable flush

Editor controls

Input Action
Esc Return to the board
Primary+A; Primary+U Select all; delete logical line
Primary+Shift+U Delete containing sentence
Primary+Z; Primary+Shift+Z / Primary+Y Undo; redo
Primary+C / X; Primary+V Native copy / safe cut; paste exactly
Primary+Shift+V Paste and clean up spacing
Ctrl+Shift+F Clean up spacing in the complete active thought
macOS: Cmd+← / Move to the current wrapped visual-row start / end
macOS: Option+← / ; elsewhere: Ctrl+← / Move by word
macOS: Ctrl+← / ; elsewhere: Alt+← / ; Home / End Move to the logical line start / end
Shift + movement Extend text selection
macOS: Cmd+Shift+← / Extend to the current wrapped visual-row start / end
Alt+↑ / or Page Up / Page Down; Ctrl+↑ / Jump five rows; complete thought start / end
Enter; Tab; Shift+Tab Continue lists; nest a recognized list or insert spaces; outdent a recognized list while leaving ordinary text unchanged
/ twice at a boundary Focus the adjacent thought, or create at the top / bottom board edge
Primary+Enter; Primary+Shift+Enter Submit and remove after acceptance; submit and keep
Type $name, /name, or supported @name Fuzzy-find and complete a local invocation
/ or Primary+P / Primary+N; Enter / Tab; Esc Navigate, insert, or close invocation results

Overlay and input controls

Active owner Factory controls
Help, update, Screenshot Inbox, release highlights / or k / j; Page Up / Page Down; Enter when a choice is offered; Esc
Commands, search, transfer, global-delivery query Type to filter; / ; Alt+↑ / or Page Up / Page Down; Enter; Backspace / Delete; text cursor keys; Esc
Invocation and invocation query Type to filter; / or Primary+P / Primary+N; Alt+↑ / or page keys; Enter / Tab; Esc
Direction chooser Arrows or h / j / k / l; Enter; Esc
Global-delivery disposition / or k / j; page keys; Enter; Esc
Session Browser and Browser query Type to filter; / ; Home / End; Alt+↑ / or page keys; Enter; Backspace / Delete; F2 rename and F8 trash while the query is empty; Esc
Rename and Browser rename Type and use text cursor, Backspace, or Delete; Enter confirms; Esc cancels
Recovery r retry storage; w export recovery; q or Primary+Q exits through durability handling; Esc remains the invariant close route
Empty insertion boundary Board controls remain available; Enter or n creates; range and reorder actions are thought-only no-ops; Esc returns to the final thought

By default, unmodified Del and d share the Board delete action. The versioned keymap can replace or disable either alias. Modified Del is unbound on the Board by default. Text contexts reserve ordinary, shifted, Option/Alt and AltGr-compatible printable input. Named editing keys remain contextual. The session Browser uses F2 to rename and F8 to trash while its query is empty; uppercase R and D remain search text. List and direction defaults preserve symmetric arrow and Vim-style navigation.

Primary chords and Board characters such as y, x, u, s, Shift+S, and q are ordinary aliases of the same configurable actions. A host can consume a chord before Proqi receives it. A host-performed bracketed paste stays exact. For Ghostty, this explicit binding emits logical Super+Shift+v for Smart Paste:

keybind = super+shift+v=csi:118;10u

The example passes Ghostty's config validator and its emitted bytes are covered by real macOS PTY tests. It is not a guarantee for every keyboard layout or host mapping. Proqi never modifies host configuration. To inspect delivery:

proqi diagnostics keypress --context board,edit --timeout-ms 5000
proqi --json diagnostics keypress --context board --defaults

Capture reports the logical key, exact modifiers, phase, state, selected context and configured action. Escape cancels. --defaults works even with invalid configuration. A timeout reports no key event received; Proqi cannot know which layer, if any, consumed the chord. It records no paste, session content or raw terminal responses. Use the Board fallback or Commands when delivery is blocked.

Ghostty's macOS defaults assign application behavior to many Command chords, including Cmd+Q, Cmd+A, Cmd+D, Cmd+J, Cmd+K, Command plus vertical arrows, submission chords, and clipboard/history chords. Those bindings run before the PTY, so Herdr and Proqi receive no key event. performable: only passes through when the Ghostty action is unavailable and is not a general TUI fallthrough. See Ghostty keybindings.

Ghostty also maps Cmd+Left and Cmd+Right to raw Ctrl+A and Ctrl+E by default. If a keyboard remapper maps Home and End to those same Command arrows, both physical routes become identical downstream. Proqi does not guess their origin. Logical-line movement therefore prefers Ctrl+Left and Ctrl+Right on macOS, and Alt+Left and Alt+Right elsewhere. Named Home and End remain compatible aliases when those events actually arrive.

Exact paste is always the default. Explicit spacing cleanup preserves authored line breaks, collapses repeated spaces and tabs, and reduces multiple blank lines to one paragraph break. It preserves recognized list structure and leaves code, tables, quotes, paths, URLs, controls, and annotated semantic ranges unchanged. Large-paste folds are recomputed from the transformed content.

Mouse input covers the same core workflow. Images, files, and large pastes fold into compact annotations while their content stays intact. In Edit mode, an unmodified Space on one completely selected collapsed annotation inserts a space immediately before it without replacing it. See invocation compatibility.

Invocation lookup accepts compact ordered abbreviations such as $aos-ce for $aos-communication-email. Exact and prefix matches remain strongest, followed by contiguous and separator-aware fuzzy matches. The typed sigil remains a hard namespace boundary, so slash, dollar, and at forms never mix.

Inside Herdr, opening the same invocation picker also discovers recognized live coding agents across the server. Selecting one inserts an inert collaborator location and displays it as a compact inline mention. It never focuses or submits to that agent.

Screenshot Inbox on macOS

From + Start typing, press Esc, then i: new Desktop screenshots become annotatable image thoughts. From an ordinary Board, press i directly. Proqi never takes, uploads, analyzes, copies, or configures them.

One process listens. It pauses after 10 unattended captures or 20 inactive minutes. Resume ignores the gap; failed imports require explicit retry.

macOS may request terminal Files & Folders access—not Screen Recording or Accessibility. Linux reports macOS-only availability.

[screenshot_inbox]
capture_all_new_images = false
notify_terminal_on_auto_pause = false

Native submission with Herdr

In Herdr, Proqi finds verified adjacent agents. In Board mode, s or Primary+Enter submits the selected thought or selection in visible order and removes after acceptance; Shift+S or Primary+Shift+Enter keeps it. While editing, the same Primary chords submit only the active thought. The palette submits the whole board. With several verified adjacent agents, either edit chord opens the temporary direction chooser; press an arrow or h, j, k, or l next to choose the target. Those keys select a direction instead of moving or inserting text while the chooser is open. Esc cancels the chooser and returns to the unchanged editor.

When an accepted submission removes the final thought, Proqi returns to the passive + Start typing board. It does not create a replacement blank thought; the next typed or pasted content creates the next thought directly.

Busy receivers decide whether input steers or queues. Any failed verification leaves the board unchanged.

Keep deferred prompts in Proqi rather than in the native harness input when other senders can target that agent. When two submissions overlap, the harness may not keep them in separate turns, so text already waiting in its input can merge with an incoming message. Proqi preserves its verified submission flow, but it cannot separate content after the receiving harness has combined it.

Proqi never invokes a shell, injects keys, reads chats, or waits. Herdr is optional.

Protocol 19 supports Claude Code, Codex, Pi, and Hermes. OpenCode and Kilo are conditional; Cline is deferred.

JSON CLI and agent skill

The CLI also exposes versioned JSON:

proqi --json capabilities
printf '%s' 'Review this.' | proqi --json thoughts add <session-id>
proqi --json thoughts send <source> <thought-id> <destination> --remove

The Proqi skill uses it without scraping the TUI:

npx skills add oborchers/proqi --skill proqi -g --agent codex --agent claude-code

The skill does not install the Proqi executable. Run capabilities first.

For read-only-first failure investigation:

npx skills add oborchers/proqi --skill proqi-debug -g

Privacy, durability, and recovery

Thoughts, attachments, settings, and redacted logs stay local. No telemetry, cloud sync, collaboration service, or upload.

The footer reports durability. Failures block destructive exit and remain retryable/exportable. Editor and board history survive restart.

proqi doctor
proqi diagnostics collect --output proqi-diagnostics.json

Diagnostics are redacted and local; review before sharing. See SECURITY.md. Disable content-free update checks with check_for_updates = false. Collected update diagnostics include only closed lifecycle stages, aggregate participant and replacement counts, stable failure codes, and convergence. Finalization diagnostics distinguish unavailable control, unavailable private cache state, and an exact-state mismatch without recording local identifiers.

Configuration

Optional platform-native config.toml:

check_for_updates = true
theme = "auto" # auto, light, dark, limited, or a bounded local theme file
density = "comfortable" # or compact
merge_separator = "\n\n" # one blank line between merged thoughts

[keymap]
schema_version = 1

[keymap.bindings.board]
"submission.submit_remove" = [
  { key = "Enter", modifiers = ["Primary"] },
  { key = "s" },
  { key = "F5" },
]
"submission.submit_keep" = [] # keyboard aliases disabled; Commands stays available
"thought.delete" = [{ key = "d" }, { key = "Delete" }]

[keymap.macos.edit]
"submission.submit_remove" = [{ key = "Enter", modifiers = ["Super", "Alt"] }]

[keymap.portable.edit]
"submission.submit_remove" = [{ key = "F5" }]

Each supplied context/action list replaces all its default aliases. Omitted pairs retain defaults; platform overrides replace common lists. Control, Alt, Shift, Super, Meta and Hyper are independent logical modifiers. Primary expands to Super/Meta on macOS and Control elsewhere. Unknown identifiers, collisions, text theft, and removal of Escape or required recovery routes fail before terminal setup.

The legacy [keybindings] table remains accepted through explicit translation, including its historical aliases. It cannot be mixed with [keymap]. See the versioned contract and migration guide and complete action/context inventory. Thought transformations retain their default Primary+T and Board t behavior; Commands remains available for split, extract and merge when a chord is unbound.

Unsafe theme contrast is rejected. See the theme example. Invocation roots stay local. Sentence deletion uses a documented Unicode profile with unavoidable ambiguity. See sentence deletion. Visual-row selection uses the current rendered width and folded presentation. On macOS, Cmd plus horizontal arrows uses the current wrapped row and Option retains word movement. Elsewhere, Ctrl plus horizontal arrows retains word movement, including with Shift. If the terminal intercepts the macOS Cmd-arrow selection chords, use the command palette or the configured versioned editor.extend_visual_row_start and editor.extend_visual_row_end aliases.

Compatibility and contributing

Proqi supports macOS and x86-64 GNU/Linux; only the latest 0.x is supported. It is an MIT-licensed binary. Contributors: CONTRIBUTING.md, PRODUCT.md, ARCHITECTURE.md.

cargo build --locked
cargo run --bin proqi
cargo xtask check # canonical local gate

The demos use the release binary; the assets gate checks dimensions, links, and privacy.