opencues/opencues

Plugin ⭐ 33 Apache-2.0 web-ui

Turn any text field into a two-way LLM channel: it reads what you write and fills what you ask. Flags a slip as you type, answers anything you end with _. Claude Code, OpenCode, Gemini CLI, shell, Chrome, DeepSeek Harness. Model-agnostic, open standard, no chat window.

Install

npm install -g opencues              # needs Node 22+ and git
opencues set-key cerebras csk-...    # cerebras.ai — free tier, lowest latency
opencues install claude-code         # or: opencode | gemini-cli | chrome | shell | dsh
claude-cues                          # launch — native `claude` is untouched

Add opencues/opencues to your DSH config (web profile) to enable.

README

Expand full README Collapse
OpenCues



OpenCues



Associations:Mod of r/ClaudeAIOpenSourceIRLAnthropic AmbassadorCerebras Ambassador




Turn any text field into a two-way LLM channel. It reads what you write and fills what you ask: catching a slip as you type, or answering the moment you end a line with _. A drop-in for Claude Code, OpenCode, Gemini CLI, your shell, and Chrome. Model-agnostic, output you review before it sends, an open standard with no chat window.

The model comes to your cursor, both ways. Cues react to what you've already written and surface a fix or a sharper line inline, unprompted. Blanks act on demand: end a line with _ and the model fills in the rest. No chat window, no copy-paste, no context switch.

Video placeholder — hero demo

OpenCues is platform, model, and provider agnostic, engineered from the ground up to enable native inline AI.

You type You get
let's ship it Thursday the 19th ↳ the 19th is a Friday
we should probably go ahead and refactor this ↳ we should refactor this
hey can u send me that report when u get a sec make this formal _ Could you please send me that report at your earliest convenience?
4 + 4 = _ 4 + 4 = 8
hello world translate to japanese _ こんにちは世界
draft an email to my landlord asking for a rent reduction _ (the email, written)
ffmpeg command to convert a video to web-ready mp4 _ ffmpeg -i input.mov -c:v libx264 -preset slow -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4

Rows with _ are blanks: you ask, the model fills in. Rows without are cues: the model speaks up on what you wrote, no prompt.

Apache-2.0 LicenseOpen StandardBlanks.mdCues.md





Quickstart

npm install -g opencues              # needs Node 22+ and git
opencues set-key cerebras csk-...    # cerebras.ai — free tier, lowest latency
opencues install claude-code         # or: opencode | gemini-cli | chrome | shell | dsh
claude-cues                          # launch — native `claude` is untouched

Full walkthrough, prerequisites, and per-host detail: docs/install.md. opencues doctor diagnoses anything that looks wrong.

Video placeholder — quickstart walkthrough

OpenCues CLIFeatures





Integrations

Host Status Install
Claude Code Available opencues install claude-code
OpenCode Available opencues install opencode
Gemini CLI Beta opencues install gemini-cli
Chrome Beta opencues install chrome
Shell Beta opencues install shell
DeepSeek Harness Beta dsh plugin --profile web add @opencues/dsh

Each pins its own upstream fork and never touches your native host install. DeepSeek Harness is the exception: it has a real plugin system, so there is no fork to pin and no OpenCues CLI step — see integrations/dsh/README.md.

⚠️ Windows: not supported natively, run inside WSL2 (see docs/install.md).

Supports:OpenCodeClaude CodeGemini CLIChromeShell





What you get

Feature What it does
Blanks Type _ for free-form generation, translation, formatting, full rewrites, or keyword-bound system actions (volume _, weather _).
Sentence rewrites Cycle a whole sentence to a different register (formal, concise, ...) seamlessly, no _ needed.
Word cues Navigate to a single word and cycle a smaller LLM-suggested alternative.
Live actuators volume _ reads the real level and leaves a knob you can turn: Ctrl+Alt+↑/↓ or a bare _ moves it, and the device follows.
Dismissing a cue A cue that only tells you something can be silenced from its own note: _ once quiets it for a while, _ again forgets it for good. opencues dismissals lists what you forgot and turns any of it back on.
Session-contradiction cues (opt-in) Flags a draft that goes against a decision made earlier in the same coding session, on any host with a transcript.
Ask-cues (opt-in) Turns a vague sentence into an inline question with cyclable answers, using the assistant's own clarifying prompt.
Personal + ambient context (opt-in) my email _ substitutes your real address; fluid lookups can read the page you're on.
Hot-reload Every .md config picks up edits in ~2s, no restart.

Full feature catalogue (44 concepts): docs/features/README.md. Running a lot of these at once? opencues usage prices every LLM call your hosts have made, across features, so the total isn't a guess.

Video placeholder — feature tour





Configuration & LLM providers

OpenCues

Config lives at ~/.cues/ — one OPENCUES.md for runtime settings, plus per-surface source folders. Seven providers supported; set an env key or opencues set-key and you're done.

Full reference: docs/configuration.md · docs/guides/llm-providers.md (switching provider/model, free mode, failover).

Providers:Cerebras SystemsGroqGeminiAnthropicOpenAI





Security

OpenCues has no tool handlers or exec layer for LLM output — no MCP-tool execution, no agentic actions, no side-effect channel. Worst-case, an LLM response lands as user-visible text in the buffer you review before submitting. That single invariant is what keeps prompt injection a UX failure instead of a data-exfiltration channel, across every surface below.

23 of 27 tracked attack classes closed, 3 closed-with-caveat, 1 tracked for the future pack registry (full audit table).

Defense What it covers
Sandbox isolation Third-party blank JS runs in a real V8 isolate (isolated-vm) — its own realm, own intrinsics, no sandbox-escape via constructor-chain pivots
Capability gates A blank only gets network/llm/storage/secrets access if declared; secrets without a matching host binding are refused at load time
Resource quotas Sliding-window caps on fetches, LLM calls, and storage writes — no polling hammer, no runaway LLM burn
Output sanitization Blank output is stripped of HTML/script tags, zero-width chars, and bidi overrides before it reaches the buffer

Check a pack before trusting it:

opencues review ./untrusted-pack/

Full threat model: docs/architecture/security-audit.md. Reporting a vulnerability: SECURITY.md.





Contributing

OpenCues

What Where
New host integration docs/guides/adding-an-integration.md
New cue/blank docs/guides/adding-a-cue-blank.md
Working on the reference runtime CONTRIBUTING.md
New to the terms docs/glossary.md

Join the community — questions, feedback, and the people building alongside you. We're also part of OpenSourceIRL, a community for people building in the open.

Community:ContributorsX / TwitterRedditInstagram





License

Apache License 2.0.





DesignAuthor