<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nguyen Jesse</title>
    <description>The latest articles on DEV Community by Nguyen Jesse (@nguyen_jesse_8602dc05abd6).</description>
    <link>https://dev.to/nguyen_jesse_8602dc05abd6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3438896%2F1739c2ec-eaca-40d0-b9df-be230f906668.png</url>
      <title>DEV Community: Nguyen Jesse</title>
      <link>https://dev.to/nguyen_jesse_8602dc05abd6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nguyen_jesse_8602dc05abd6"/>
    <language>en</language>
    <item>
      <title>Making Claude Code concise without making it dumber: the engineering behind two open-source plugins</title>
      <dc:creator>Nguyen Jesse</dc:creator>
      <pubDate>Tue, 22 Sep 2026 15:07:07 +0000</pubDate>
      <link>https://dev.to/nguyen_jesse_8602dc05abd6/making-claude-code-concise-without-making-it-dumber-the-engineering-behind-two-open-source-plugins-3ll9</link>
      <guid>https://dev.to/nguyen_jesse_8602dc05abd6/making-claude-code-concise-without-making-it-dumber-the-engineering-behind-two-open-source-plugins-3ll9</guid>
      <description>&lt;p&gt;Claude Code talks too much, and its status bar tells you nothing. So I built two open-source plugins to fix both — and a third, experimental one that redraws the transcript itself. This is the engineering: how the conciseness layer works, how it's measured, why the status bar is architected the way it is, and what building on Claude Code's undocumented function hooks actually looks like.&lt;/p&gt;

&lt;p&gt;Everything here is in &lt;a href="https://github.com/jessebldr/clear-claude" rel="noopener noreferrer"&gt;clear-claude&lt;/a&gt; on GitHub, MIT licensed. Every number below is a measured one; where the measurement is weak, I'll say so.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Two annoyances, one root cause: Claude Code is honest but verbose, and its situational awareness is scattered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Annoyance 1: the talking.&lt;/strong&gt; Ask a simple question and you get a preamble, a narration of the plan, the answer somewhere in the middle, and a summary of what was just said. The naive fix — "be concise" — teaches the model to drop things: the warning, the exact number, the assumption, the tradeoff. You get a shorter answer and a worse one. Most brevity prompts quietly make the model shallower.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Annoyance 2: the status line.&lt;/strong&gt; Claude Code exposes genuinely useful state — model, context window, 5-hour and weekly usage — but it's scattered across the footer, the spinner, &lt;code&gt;/usage&lt;/code&gt;, &lt;code&gt;/context&lt;/code&gt;, and the shell. Before every long task you're reconstructing the situation from fragments: how much room is left, when quota resets, whether the repo is dirty.&lt;/p&gt;

&lt;p&gt;Clear Claude is a marketplace with three layers, each owning one problem and nothing else:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clear Partner    → how Claude communicates        (prompt; plugins/clear-partner)
Clear UI         → what the user sees at a glance (statusline; plugins/clear-ui)
Clear Transcript → how the conversation is drawn  (function hooks; experimental/)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A standing design rule across all three: prompts for judgment, deterministic mechanisms for mechanics — and never solve the same problem in two layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clear Partner: the output style
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Clear Partner is a Claude Code &lt;em&gt;output style&lt;/em&gt;: a single Markdown file with a frontmatter block, loaded as the system prompt's communication layer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Clear Partner&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Clear,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;conversational&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;technical&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;partner.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Answer-first,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plain&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;English,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;concise&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;by&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;default,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needed."&lt;/span&gt;
&lt;span class="na"&gt;keep-coding-instructions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;force-for-plugin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file itself is ~4.6 KB of plain instruction. The core ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer first.&lt;/strong&gt; Lead with the actual answer, result, or recommendation. No filler, no acknowledgements, no narration of what's about to happen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Economical in what the user reads, never in the work.&lt;/strong&gt; This is the line that separates it from "be concise": do all the investigation, reasoning, coding, and verification the task requires — then spend as few words as possible reporting it. Concise does not mean incomplete. Never drop a warning, constraint, assumption, exact number, scope condition, or important tradeoff merely to be shorter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit constraints outrank every default.&lt;/strong&gt; If the user says "one sentence", "just the command", or "nothing else", that beats the style's own habits — including the completion report after implementation work. The one exception is a safety-critical warning (data loss, security risk, irreversible action): keep it as a single short line, add nothing else. No alternatives, no flag explanations, no follow-up tips.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last rule exists because it was &lt;em&gt;measured&lt;/em&gt; to be needed — more on that below.&lt;/p&gt;

&lt;h3&gt;
  
  
  The measurement: 524 → 258 words
&lt;/h3&gt;

&lt;p&gt;One recording is an anecdote, so the headline number comes from repeated runs: &lt;strong&gt;four runs per arm of three everyday questions averaged 524 → 258 words (−51%)&lt;/strong&gt;, and no plugin answer was as long as the shortest stock answer to the same question.&lt;/p&gt;

&lt;p&gt;The methodology is deliberately boring: same three questions, four runs each, both arms, word counts averaged. And here's the part most projects would leave out — the repo also records an earlier take where the plugin's answer came out &lt;em&gt;longer&lt;/em&gt; than stock, plus the raw outputs and the exact flags. When the data is embarrassing, it's still data. (&lt;code&gt;demo/README.md&lt;/code&gt; has all of it.)&lt;/p&gt;

&lt;h3&gt;
  
  
  The evals, and their honest limits
&lt;/h3&gt;

&lt;p&gt;Word count is a proxy; the real question is whether the style breaks anything. There's a behavioral eval suite (&lt;code&gt;plugins/clear-partner/evals/&lt;/code&gt;, run with &lt;code&gt;claude plugin eval&lt;/code&gt;) of 12 cases. The first six pin the basics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;What it pins&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;a-correctness-preserved&lt;/td&gt;
&lt;td&gt;The answer stays correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b-concise-by-default&lt;/td&gt;
&lt;td&gt;Short by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c-depth-when-asked&lt;/td&gt;
&lt;td&gt;Goes deep when asked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;d-no-style-leak&lt;/td&gt;
&lt;td&gt;The style doesn't leak where it shouldn't&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;e-workflow-multi-step&lt;/td&gt;
&lt;td&gt;Multi-step work still works&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;f-ambiguous-request&lt;/td&gt;
&lt;td&gt;Asks instead of guessing on ambiguity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On Claude Code 2.1.274: &lt;strong&gt;6/6 with the style, 6/6 without&lt;/strong&gt;. Re-run on 2.1.278 (same prompt, no edits): &lt;strong&gt;6/6 with the style, $1.54, 342 seconds&lt;/strong&gt;. The baseline arm failed one case — and this is where the honesty matters: the baseline didn't answer badly, it &lt;em&gt;ran out of turns&lt;/em&gt; on the ambiguous request, so there was no final message to grade. One run per arm can't tell a tendency from chance. The repo records it as "baseline errored once" and the claim stays what it was: &lt;strong&gt;the style does not break anything&lt;/strong&gt;. Not "the style is better". There is a difference, and it matters.&lt;/p&gt;

&lt;p&gt;The second six cases (g–l) are regression cases born from real demo failures. The shipped style was ignoring explicit user constraints: "in one sentence" came back as two or three sentences, and a question about commands came back as a table whose cells wrapped in a terminal pane. Each failure became a case first, run against the shipped prompt, and the prompt was edited &lt;strong&gt;only where a case failed&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;| Case | 0.1.0 | 0.1.1 | Baseline |&lt;br&gt;
|---|---|---|&lt;br&gt;
| g-one-sentence | 1.00 | 1.00 | 1.00 |&lt;br&gt;
| h-just-the-command | 1.00 | 1.00 | 1.00 |&lt;br&gt;
| i-nothing-else-after-work | 1.00 | 1.00 | 1.00 |&lt;br&gt;
| j-constraint-keeps-safety-warning | 0.83 | &lt;strong&gt;1.00&lt;/strong&gt; | 0.83 |&lt;br&gt;
| k-list-not-table-for-commands | 0.33 | &lt;strong&gt;1.00&lt;/strong&gt; | 0.67–1.00 |&lt;br&gt;
| l-one-sentence-after-tool-use | 0.33 | &lt;strong&gt;1.00&lt;/strong&gt; | 0.33 |&lt;/p&gt;

&lt;p&gt;Two stories worth telling:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case k&lt;/strong&gt; caught the style being &lt;em&gt;worse&lt;/em&gt; than stock. Its old line — "use a table when comparison is easier in rows and columns" — made it more table-prone than baseline: in the recorded demo runs it answered the disk-space question with a table 4 times out of 4; stock did it 0 times out of 4. The rule is now "a table only for a real comparison."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case l&lt;/strong&gt; failed 4/4 on the old prompt &lt;em&gt;and&lt;/em&gt; on stock Claude Code: after real work on a multi-part subject, the habit of covering every part beat "one sentence". That's what produced the "explicit constraints outrank every default" rule.&lt;/p&gt;

&lt;p&gt;And the stated limits, quoted from the eval doc: &lt;strong&gt;three or four runs per arm show a tendency, not a rate.&lt;/strong&gt; Case k's baseline drifted between 0.67 and 1.00 across suite runs because its first LLM grader was judging formatting it should have left to the regex — it was narrowed before the 0.1.1 run. The numbers are small; the repo says so.&lt;/p&gt;

&lt;p&gt;One more integrity mechanism: the style file's &lt;strong&gt;SHA-256 is recorded&lt;/strong&gt; (&lt;code&gt;docs/clear-partner-port.md&lt;/code&gt;), so you can verify the prompt you're running is the prompt that was measured. v0.4.1 fixed false eval failures caused by incorrect style-shadowing assumptions — prompt bytes unchanged.&lt;/p&gt;

&lt;p&gt;Also in the box: &lt;code&gt;/clear-partner:clear-doctor&lt;/code&gt; and &lt;code&gt;/clear-partner:clear-audit&lt;/code&gt;, read-only diagnostic skills. Read-only by design, and they stay that way — a doctor that &lt;em&gt;fixes&lt;/em&gt; things is explicitly on the "not planned" list.&lt;/p&gt;
&lt;h2&gt;
  
  
  Clear UI: the status bar
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Architecture: a pure core with a thin shell
&lt;/h3&gt;

&lt;p&gt;Clear UI is a statusline script with a deliberate split. The entry point is a pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;statusline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mjs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;read&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;gather&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;print&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;src/render.mjs&lt;/code&gt; is &lt;strong&gt;pure&lt;/strong&gt;: &lt;code&gt;(state, options) → string[]&lt;/code&gt;. No I/O, no Node API. &lt;code&gt;state.mjs&lt;/code&gt;, &lt;code&gt;sanitize.mjs&lt;/code&gt;, and &lt;code&gt;layout.mjs&lt;/code&gt; are pure too. Everything impure — bounded stdin reads with timeouts, one git call with a TTL cache, the usage cache file — lives at the edges. This means the entire visual output is unit-testable as a function, including golden tests, and the timing-critical path (render) can never block on the network or a subprocess.&lt;/p&gt;

&lt;p&gt;What the bar shows: model, project and git branch with a dirty dot, context percentage, 5-hour and weekly usage — plus the sleeper feature, an &lt;strong&gt;opt-in chip showing your model's weekly limit&lt;/strong&gt;. Zero dependencies. In its default mode it reaches no network and reads no credentials.&lt;/p&gt;

&lt;p&gt;The measured budget: on an M4 Mac mini, &lt;code&gt;bench/bench.mjs&lt;/code&gt; read &lt;strong&gt;38 ms with git cached, 46 ms on a cache miss, median of three runs&lt;/strong&gt; (38/46, 38/45, 38/46). That budget is documented in the changelog, not just claimed in a tweet.&lt;/p&gt;

&lt;h3&gt;
  
  
  The usage provider: a cache-file contract
&lt;/h3&gt;

&lt;p&gt;The weekly-limit chip is the interesting engineering, because Claude Code's status-line JSON does not expose model-scoped usage. The provider's design:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The status line never calls anything.&lt;/strong&gt; It only reads a cache file. Rendering is decoupled from fetching — the render path can never stall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A detached worker refreshes at most every ten minutes.&lt;/strong&gt; It claims the refresh with an exclusively-created lock file named after the interval, so the two-second ticks of every open session start exactly one worker between them. A failed refresh isn't retried until the next interval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The fetch itself runs Claude Code's own &lt;code&gt;claude -p /usage&lt;/code&gt;.&lt;/strong&gt; &lt;code&gt;/usage&lt;/code&gt; is a built-in that makes no model turn and costs nothing — but it's undocumented as a machine interface, so the provider trusts only its &lt;em&gt;structured&lt;/em&gt; &lt;code&gt;limits&lt;/code&gt; data, never the rendered text. Why: offline with a stale snapshot, Claude Code prints the old percentages while the structured &lt;code&gt;limits&lt;/code&gt; is null. The text can't be told from an answer; the structured data can be told from nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail closed, always.&lt;/strong&gt; The last good answer is drawn for 30 minutes — three missed refreshes — and then not at all. A window that has reset since the fetch is dropped at once. If the provider can't vouch for the number, the chip disappears instead of lying.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The $0.136 lesson
&lt;/h3&gt;

&lt;p&gt;This design exists because of a real failure. During headless research, Git Bash rewrote the leading-slash &lt;code&gt;/usage&lt;/code&gt; into a path — &lt;code&gt;C:/Program Files/Git/usage&lt;/code&gt; — which is a prompt, which a model answered, for money. &lt;strong&gt;$0.136.&lt;/strong&gt; The fix: the whole argument vector is passed to &lt;code&gt;spawn&lt;/code&gt; as an array and never through a shell — a shell is how &lt;code&gt;/usage&lt;/code&gt; stops being a command. There's now a regression test that prevents that route (&lt;code&gt;docs/research/headless-usage.md&lt;/code&gt; tells the full story). Every refresh is also a full Claude Code start (~1.9 s, in the background, reaching the network) — which is why it's opt-in and why it's never done more often than the number can change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clear Transcript: the function-hooks experiment
&lt;/h2&gt;

&lt;p&gt;The third layer redraws the conversation itself: a settled group of tool calls names its files and commands — &lt;code&gt;Read sum.mjs, format.mjs, parse.mjs&lt;/code&gt; — where stock draws &lt;code&gt;Read 3 files, ran 2 shell commands&lt;/code&gt;; a failed call gets a line of its own; section titles in a long answer are underlined, where stock draws every heading level the same.&lt;/p&gt;

&lt;p&gt;It stands on &lt;strong&gt;function hooks ("Claude Mods")&lt;/strong&gt;, which Anthropic has not documented or switched on. So this layer is &lt;strong&gt;experimental&lt;/strong&gt;: not in the marketplace, no install command, runs from a clone with &lt;code&gt;--plugin-dir&lt;/code&gt; and a gate env var:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLAUDE_CODE_ENABLE_FUNCTION_HOOKS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 claude &lt;span class="nt"&gt;--plugin-dir&lt;/span&gt; experimental/clear-transcript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Deliberately never exported, never written to a settings file.)&lt;/p&gt;

&lt;p&gt;What's genuinely interesting here is the honest accounting of &lt;em&gt;how much of the conversation can be improved today&lt;/em&gt;, measured against Claude Code 2.1.278. The hook surface only raises render sites for some rows — &lt;code&gt;AssistantMessage&lt;/code&gt;, &lt;code&gt;ToolGroup&lt;/code&gt; — and for others there is simply no site. The doc (&lt;code&gt;docs/clear-transcript.md&lt;/code&gt;) tabulates every part of the conversation: what has a render site, what Clear Transcript redraws, and what it leaves to the engine. The answer: &lt;strong&gt;two rows, redrawn conservatively, and a rule for everything else.&lt;/strong&gt; The platform could carry more — folds, labels, a reader pane, accent colours — and each was refused on evidence.&lt;/p&gt;

&lt;p&gt;The interaction model is one sentence: &lt;strong&gt;the normal view is Clear Transcript's; the expanded view (ctrl+o) is Claude Code's; any doubt is Claude Code's.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nothing is folded, capped, or hidden — a transcript row has no keyboard focus, so there's no way back needed to &lt;em&gt;read&lt;/em&gt;, only to &lt;em&gt;audit&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ctrl+o&lt;/code&gt; (and &lt;code&gt;--verbose&lt;/code&gt;) shows rows as the engine draws them — unconditionally for tool groups. For answers it's a &lt;em&gt;learnt&lt;/em&gt; view: the mod watches &lt;code&gt;UserMessage.isExpanded&lt;/code&gt;, re-asks for every row when it flips, and passes while true. One stated edge: an expanded view where no prompt row is raised at all would leave an answer's titles underlined there — same words, one attribute different. Never met in any recording; can't be ruled out from the types. It's documented as an edge rather than hand-waved.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/clear-transcript off&lt;/code&gt; restores stock in place, unconditionally, and answers with text only and no &lt;code&gt;context&lt;/code&gt; — the model never hears of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The stored message is never touched.&lt;/strong&gt; &lt;code&gt;/copy&lt;/code&gt; and export read what the model wrote. A refused tree is the stock row: the engine validates every tree and draws its own on any refusal, so there is no broken-row state to design for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clear Transcript is finished work waiting for Anthropic to stabilise an API — not a preview of unfinished work. Version 1.0 waits for function hooks to become documented, stable, and on by default. Clear Partner and Clear UI will never depend on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;The marketplace is &lt;code&gt;clear-claude&lt;/code&gt;. Installing one layer never installs another:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;clear-partner@clear-claude
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;clear-ui@clear-claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clear Transcript has no install — &lt;code&gt;--plugin-dir&lt;/code&gt;, as above.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Official Claude Code marketplace submission&lt;/strong&gt; — the plugin directory submission is pending; the tracking issue is public on the repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear Transcript 1.0&lt;/strong&gt; — when (if) Anthropic documents and enables function hooks by default, the experimental layer graduates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More of the same honesty&lt;/strong&gt; — the roadmap is public (&lt;code&gt;docs/roadmap-v2.md&lt;/code&gt;), the evals record their own limits, and the "not planned" list is explicit: no auto-fixing doctor, no bundle plugin, no Intel Mac timing claims without an Intel Mac.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The through-line of the whole project: be economical in what the user reads, never in the evidence. If you try it and the numbers don't hold on your machine, the issue tracker is open, and a reproduction beats an opinion.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Repo: &lt;a href="https://github.com/jessebldr/clear-claude" rel="noopener noreferrer"&gt;github.com/jessebldr/clear-claude&lt;/a&gt; — MIT. Design docs, evals, and dogfood records all live in &lt;code&gt;docs/&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>opensource</category>
      <category>ai</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
