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.

View source
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.

One prompt improved, rewritten as a senior engineer would, grown with a security paragraph, translated to Japanese - then an ffmpeg command answered on a fresh line

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

You typeYou 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.

Apache-2.0 LicenseOpen StandardBlanks.mdCues.md





Quickstart

bash
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.

A Claude Code tip cue, then Slack catching a date that does not exist

OpenCues CLIFeatures





Integrations

HostStatusInstall
Claude CodeAvailableopencues install claude-code
OpenCodeAvailableopencues install opencode
Gemini CLIBetaopencues install gemini-cli
ChromeBetaopencues install chrome
ShellBetaopencues install shell
DeepSeek HarnessBetadsh 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

FeatureWhat it does
BlanksType _ for free-form generation, translation, formatting, full rewrites, or keyword-bound system actions (volume _, weather _).
Sentence rewritesCycle a whole sentence to a different register (formal, concise, ...) seamlessly, no _ needed.
Word cuesNavigate to a single word and cycle a smaller LLM-suggested alternative.
Live actuatorsvolume _ reads the real level and leaves a knob you can turn: Ctrl+Alt+↑/↓ or a bare _ moves it, and the device follows.
Dismissing a cueA 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-reloadEvery .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.

A price, a forecast, and a system volume you can turn - none of them asking a model





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).

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

Check a pack before trusting it:

bash
opencues review ./untrusted-pack/

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





Contributing

OpenCues

WhatWhere
New host integrationdocs/guides/adding-an-integration.md
New cue/blankdocs/guides/adding-a-cue-blank.md
Working on the reference runtimeCONTRIBUTING.md
New to the termsdocs/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