Skip to content
claudemods

Draft — this page is not indexed and the mod is not yet published.

effortless Claude Code mod: set Claude Code reasoning effort automatically

Picks the reasoning effort for every prompt and shows it above the prompt with a prompt-cache countdown.

Permissions

  • Reads filesCan read files and list directories on your machine ($.fs.read / list / stat / exists).
  • Writes filesCan create or overwrite files on your machine ($.fs.write).
  • Runs commandsCan run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
  • NetworkCan make HTTP requests or talk to MCP servers ($.http.fetch / $.mcp.*).
  • Calls the model (uses your quota)Can send its own requests to Claude, which count against your plan's usage ($.model.* / $.agent.spawn).
  • Intercepts tool callsSees every tool call Claude makes (tool.call / tool.check) and could block or change it.
  • Reads your promptsCan see what you type and the conversation transcript (prompt.* / session.append / session.messages).
  • Changes the UIDraws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
  • Adds commands/toolsRegisters new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
  • Stores dataKeeps data between sessions in the plugin's private store ($.store.*).
tested with
v2.1.303
last tested
requires
Claude Code ≥ 2.1.287
surfaces
above-prompt, pane, toast

Install inside Claude Code:

/plugin install effortless --marketplace HeyCubit/effortless
All install options ↓

What does this mod do?

effortless is a community mod by HeyCubit (HeyCubit/effortless). It sets the Claude Code reasoning effort for every prompt you send. Before the request goes out, a small judge reads your message and the recent conversation and picks an effort from low to max, so quick questions run at Low and hard jobs at High. You do not touch the Effort control. Short follow-ups such as "go" or "yes" keep the effort already chosen, and a message that names a level ("max effort") runs at it with no judge.

Above the prompt it draws a band. According to the author's README, the band shows the effort and model in use, how full the context is, a countdown until the prompt cache goes cold, an Auto switch, a settings gear, and a Compact button. When Haiku judges that a fresh chat would pay off, Compact becomes a Handoff button that writes a summary, clears the chat and carries on. Further down it can warn about a swamped context, running-low plan limits and a cold cache, and it adds an agent panel for subagents.

The mod is large: one 5,400-line module plus a bundled second plugin (textless) in the same repository, which we did not onboard. The author's README claims 21% lower cost than Opus on medium in its own benchmark; we did not reproduce that.

Demo

There is no recording yet. The mod needs its own setup guide, a judge call before every prompt and a few turns before the band has anything to show, and the author's test suite fails 52 of 274 tests on Claude Code 2.1.303, including its update tests (see below). We kept this page as a draft rather than record a mod we could not verify end to end.

demo recording coming soon

Install

The install block above adds the author's marketplace (HeyCubit/effortless, which lists effortless and textless) and installs the plugin from it. We tested commit df5602e on the default branch; the marketplace entry itself points at the author's stable branch, which may be a different commit. Run /reload-plugins or restart Claude Code. A short setup guide opens above the prompt the first time: keep Haiku alone or add Jev, lean cheaper or smarter, and choose how handoffs are written. /effortless setup opens it again.

$ install effortless

Requires Claude Code ≥ 2.1.287

Installs from the author's own marketplace: HeyCubit/effortless

  1. 1.One line, inside Claude Code

    /plugin install effortless --marketplace HeyCubit/effortless

    Paste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.

  2. 2.From your shell

    claude plugin marketplace add HeyCubit/effortless
    claude plugin install effortless@effortless

    Then run /reload-plugins in any session that is already open.

  3. 3.Try it without installing

    git clone https://github.com/HeyCubit/effortless
    claude --plugin-dir ./effortless

    Loads the mod for one session only. Nothing is added to your settings.

How it works

The plugin is one function-hooks module, hooks/register.tsx. On prompt.submit it asks the judge for a verdict, and on turn.step it rewrites the outgoing request's effort. Compaction is also taken over by a session.compact hook:

on('session.compact', async ($, e, next) => {
  // A subagent's own compaction, the session's model by choice: Claude Code's own.
  if (e.agentId !== undefined || config.compactWith !== 'haiku') return next(e)
  // Ahead-of-time summaries would be written by the chat's model and then not used: none.
  if (e.trigger === 'precompute') return { skip: 'effortless compacts with Haiku when it is time' }
  const messages = Array.isArray(e.messages) && e.messages.length ? e.messages : await $.session.messages().catch(() => [])
  const got = await haikuCompaction($, messages, e.instructions).catch((error: unknown) => ({ fail: String(error).slice(0, 80) }))
  ...

The judge calls $.model.complete with Haiku 5.5, falling back to the haiku alias, with a 6 second timeout. With a TypeSafe key it asks Jev first over HTTP and falls back to Haiku when Jev is unsure, slow or down. The cache countdown comes from the cache lifetime in each response's usage, and Compact appears once it reaches zero.

Customize it

The plugin declares 16 options (/plugin configure effortless@effortless or the gear in the band): the judge (auto, haiku, jev), an effort slider from -2 to 2, a floor and ceiling for Auto, which alerts to hide, the handoff skill and first choice, "Compact with" (haiku or session), "Cheaper model when it can" (off by default), "Effort for helpers" (off by default), a swamp threshold, and appearance, theme and layout (default band or minimal footer buttons). The /effortless command also takes auto, stats, handoff, settings, setup and debug.

Permissions & safety

We read the manifest, hooks/hooks.json, commands/effortless.md and the parts of hooks/register.tsx that touch the network, processes, files, environment variables, the model and prompts. Of the other modules (agents.tsx, progress.tsx, theme.ts, art.ts, brand-mark.ts, about 100 KB) we only searched for calls and encoded or hidden code; we did not read them line by line, and we did not read the textless plugin or the site, bench and tools folders, which the plugin does not load. There is no package.json, no bundled or minified code, and no binary. Findings:

  • Network ($.http.fetch): https://api.typesafe.ai/v1/systemone (or the JEV_URL environment variable) only when a TypeSafe key is found; it receives the next message (up to 4,000 characters), the recent conversation and the current model and effort, with the key as a Bearer token (register.tsx:724). The release check reads api.github.com/repos/HeyCubit/effortless/contents/public.json (register.tsx:2685).
  • Processes ($.process.run): git for the release check, creating a small repo under the Claude data folder (.../data/effortless-release-check) and running a depth-1 fetch from github.com/HeyCubit/effortless (register.tsx:2668-2678), with no prompt; claude plugin marketplace update effortless when git fails (:2694); on Update, claude plugin marketplace update and claude plugin update, then cp -R of the new version over the running plugin cache folder (:2840-2891); on Uninstall, claude plugin uninstall after two presses (:2529). All are argv arrays, not shell strings.
  • File writes ($.fs.write): a key pasted in the setup guide or Judge card is saved in plain text to ~/.config/jev/.env (:1893-1917); the README discloses this and points to /plugin configure, which uses Claude Code's secret storage. A debug log ~/.claude/effortless-render-<chat>.log is rewritten every second with draw timings (:2262-2272). /effortless bench writes two report files in the current directory (:4024). A proof log is written only if EFFORTLESS_LOG is set or the mod runs from a dev-mods folder. It writes nothing to settings.json, shell files, LaunchAgents, cron or git hooks. Settings go through $.config.set and its own store.
  • Reads: ~/.claude/effortless-preview.json (a preview aid), ~/.config/jev/.env (only if the jev judge is picked outright, or after you saved a key there), and the plugin's own plugin.json.
  • Daemons: none. It uses $.clock.every timers that stop with the session.
  • Environment: EFFORTLESS_LOG, EFFORTLESS_MODEL_UI, HOME, JEV_URL, TEMP, TMPDIR, TYPESAFE_API_KEY, USERPROFILE. The key leaves the machine only to the Jev endpoint.
  • Telemetry: none found. The release check sends no data beyond a normal git or HTTPS request to GitHub.
  • Model influence: it rewrites each request's effort, and with "Cheaper model when it can" on (default off) it may send a prompt to a cheaper model. On session.compact it replaces Claude Code's summary with one written by Haiku 5.5 (default on): your transcript goes to Haiku through your own login, and the summary is injected as the first message with a fixed "continue the conversation" text (register.tsx:3800). The handoff submits its own prompts and runs /clear. We found no hidden or zero-width text and no instructions aimed at the model beyond these prompts. commands/effortless.md is only used when the mod did not load.
  • Gating hooks: session.compact, prompt.submit, agent.spawn, tool.call, command.run and others have no .catch, as validate notes. tool.call only observes. session.compact, classic.SessionStart and classic.PostModelSwitch do not run for a plugin you install where an organization manages Claude Code.
  • External requirements: none required. The claude CLI is needed for Update and Uninstall; a TypeSafe account only for Jev.
  • License: MIT, LICENSE file present.

claude plugin validate reported 1 error and 1 warning: effortless.updateCheck is not declared: the manifest's types contract must name it (the update button's state is missing from types/index.d.ts), and no author in plugin.json. claude plugin test ran 274 tests across 15 files: 222 passed and 52 failed. Many failing test names look like textless features (scenes, cards, chess), but the failures also include effortless's update tests (Update, Uninstall, the .local/bin fallback, the HTTPS rewrite) and the key-from-~/.config/jev/.env test, whose expected Windows-style path was joined to the working directory on macOS. We did not investigate each one. Because of the validate error and these failures, we have not marked the page live.

Reads files
Can read files and list directories on your machine ($.fs.read / list / stat / exists).
Writes files
Can create or overwrite files on your machine ($.fs.write).
Runs commands
Can run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
Network
Can make HTTP requests or talk to MCP servers ($.http.fetch / $.mcp.*).
Calls the model (uses your quota)
Can send its own requests to Claude, which count against your plan's usage ($.model.* / $.agent.spawn).
Intercepts tool calls
Sees every tool call Claude makes (tool.call / tool.check) and could block or change it.
Reads your prompts
Can see what you type and the conversation transcript (prompt.* / session.append / session.messages).
Changes the UI
Draws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
Adds commands/tools
Registers new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
Stores data
Keeps data between sessions in the plugin's private store ($.store.*).

Compatibility & troubleshooting

Checked with Claude Code 2.1.303 on macOS (validate and tests only; the mod was not loaded in a recording). The mod needs function hooks and is written for the current Claude 5 models: Auto changes the effort only on Opus 5.5 and Sonnet 5.5, and pauses on other models. If the band does not show up:

  • Run /reload-plugins or restart Claude Code, then /effortless debug for a status line.
  • Set Look to default; minimal draws only small footer buttons.
  • If Update fails, run claude plugin update effortless@effortless yourself.
  • If a key does not seem to work, check the judge setting, which is auto by default and ignores ~/.config/jev/.env unless you pick jev.

FAQ

Does effortless need an API key?
No. The default judge is Haiku 5.5, which runs on your own Claude login through the session. A TypeSafe key is only used if you add the optional Jev judge, and then the prompt text and recent conversation are sent to api.typesafe.ai.
Does it change my Claude Code effort setting?
The code says it rewrites the request that goes out, not the app's setting. If you change the effort yourself in the app, the mod notices at the next request, turns Auto off and shows a toast.
Who writes my compaction summaries?
By default Haiku 5.5 writes them, for /compact and the automatic compaction. If Haiku fails, Claude Code compacts as usual. Set "Compact with" to session to keep the chat's own model.
Does it contact anything while idle?
Yes. It checks GitHub for a new release on a timer, using git against github.com/HeyCubit/effortless, and falls back to the GitHub API and to claude plugin marketplace update. It installs a new version only when you press Update.
How is it different from Cache Clock?
Cache Clock is a single countdown for the prompt cache. effortless adds automatic effort per prompt, Compact and Handoff buttons, a swamped-context alert, update cards and an agent panel on top of its own cache countdown.
Cache Clock running in Claude CodeFeatured

Cache Clock

A prompt-cache line under your Claude Code status line: time left while warm, hit rate, and tokens re-cached once cold.

  • status
  • Reads files
  • Writes files
  • Runs commands
  • Adds commands/tools

tested with v2.1.296

Context Meter running in Claude CodeFeatured

Context Meter

Context-window fill, 5-hour and 7-day plan usage and session cost in the status line, plus a warning near the limit.

  • status
  • toast
  • Changes the UI

tested with v2.1.310

Compact Adviser running in Claude CodeFeatured

Compact Adviser

Suggests running /compact when your Claude Code session reaches a finished checkpoint, judged by TypeSafe's Jev model.

  • status
  • pane
  • toast
  • Reads files
  • Writes files
  • Network
  • Reads your prompts
  • Changes the UI
  • Adds commands/tools
  • Stores data

tested with v2.1.291

More in Context, quota, cost, Timers, todos, standups.