opencues/opencues#integrations-dsh
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.
Listed
33
Ui
Bundle verified
Preview
What it does
Word alternatives and underscore-gated fill-ins in the composer. End a line with _ and it is filled; misspellings are flagged as you type. Routes through the model dsh is already configured with, so it needs no API key.
Best for
- Writers who want inline alternatives and spelling feedback while composing text.
- Users who prefer filling a prompt at the cursor by ending a line with `_`.
- DSH users who want to reuse the already configured model without adding another API key.
Not ideal for
- Workflows that need a conventional chat window with a separate conversational history.
- Text entry where automatic inline suggestions or underscore-triggered completion would be distracting.
- Tasks that do not involve drafting or revising text in the composer.
README
#
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.
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.
#
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.
#
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).
#
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.
Configuration & LLM providers
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).
#
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
| 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.
#
License
#
Frequently Asked QuestionsFAQ
Use the verified command dsh plugin --profile default add github:opencues/opencues#path:/integrations/dsh in a DSH-enabled shell. The command resolves the public package metadata and keeps the plugin attached to the catalog identity shown on this page.
Compatibility follows the bundle and profile status shown above. If a profile is not detected, keep the plugin disabled there and check the repository documentation before enabling it in production.
The GitHub link and activity metadata are the source of truth for releases and maintenance. Revisit this page after a new release to confirm the catalog has observed the latest version.