opencuesDeepSeek Harness plugin
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.
- Stars
- 42
- Forks
- 2
- License
- Apache-2.0
- Last commit
- Aug 29, 2026
- Latest release
- v0.7.8
Overview
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.
Original README
Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.
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 -vcodec libx264 -crf 23 -pix_fmt yuv420p -acodec aac 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
bashnpm 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:
bashopencues 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.