by lowenbjer
For those who struggle with how Claude speaks to them. No more essays. No more slogans, metaphors, "it's not X, it's Y". This plugin makes Claude speak normally.
# Add to your Claude Code skills
git clone https://github.com/lowenbjer/claude-terseGuides for using ide extensions skills like claude-terse.
See how claude-terse compares with popular alternatives.
claude-terse is an open-source ide extensions skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by lowenbjer. For those who struggle with how Claude speaks to them. No more essays. No more slogans, metaphors, "it's not X, it's Y". This plugin makes Claude speak normally. It has 50 GitHub stars.
claude-terse's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/lowenbjer/claude-terse" and add it to your Claude Code skills directory (see the Installation section above).
claude-terse is primarily written in Python. It is open-source under lowenbjer on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other IDE Extensions skills you can browse and compare side by side. Open the IDE Extensions category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh claude-terse against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
I struggle with the way Claude Code speaks to me. Every single question comes back as an essay. Slogans, metaphors, a recap of what it just did, "it's not X, it's Y". Every. Single. Time.
Claude's own "concise" mode shortens it, somewhat, but keeps the the rest of the slop.
I tried system prompts, those got forgotten after a couple of turns. I tried looking for plugins but none consistently made Claude speak normally. Some where slash commands, other solved for token use, others solved for neurodivergence. None of them made Claude speak normally.
I just wanted to not read an essay and make Claude get to the point fast, every single time.
So I spent a few weeks nothing down every thing it did that annoyed me and what i want it say instead, and built a Plugin around that. It worked for me. If Claude speaks to you the same way, it is yours.

The rest of this README is co-written by Claude Code using the terse plugin. I take most of the credit, but none for the words.
A Claude Code plugin that cuts reply length in half and removes mannered prose. Fable 5.1: 46% fewer words, 51% lower cost. Opus 5.5: 54% fewer words, 32% lower cost. Measured on 20 prompts against a real codebase. The writing rules apply to replies, documents, commits and subagents. A context meter for the status line comes with it.
The tables use these terms.
Measured on 12 public prompts, vanilla Claude Code against terse 1.1.0. Opus 5.5, effort high, one run each.
| vanilla | terse | change | |
|---|---|---|---|
| Words, 10 chat replies | 5,959 | 1,793 | -70% |
| Median reply | 636 words | 181 words | -72% |
| Output tokens, 12 runs | 19,310 | 10,528 | -45% |
| Style violations per 1k words (Opus judge) | 11.1 | 1.1 | -90% |
| First person per 1k | 2.79 | 0.47 | -83% |
| "X, not Y" reframes per 1k | 0.84 | 0.56 | -33% |
| Slogans per 1k | 1.17 | 0.0 | -100% |
| Metaphor per 1k | 3.69 | 0.0 | -100% |
Tables for Fable 5.1, for Opus 5.5 at effort medium, and for the 1.0.0 rule text: docs/models. Method, prompts and the judge rubric: docs/benchmark.md.
From the Claude directory: open the terse listing and select Add to Claude Code. The plugin is saved to your claude.ai account and downloads the next time you start Claude Code signed in to that account. In a running session, /reload-plugins loads it at once. Anthropic scans and reviews each version before the directory serves it.
From GitHub, in Claude Code:
/plugin marketplace add lowenbjer/claude-terse
/plugin install terse@terse
Both routes install the same files. The writing rules apply to every new session, after /clear, and to an existing session you exit and resume with claude --resume.
For the context meter, run /terse:install-meter once. It copies the 26-line meter script to the plugin's data directory, which plugin updates leave in place, and adds one statusLine entry to your ~/.claude/settings.json. The entry takes effect on save.
The rules are a reply shape, 22 rules and 18 before/after pairs, 877 words. The shape: one sentence with the answer, then a list or a table, then at most one caveat sentence, then stop. Every sentence has the topic as its subject: no "I", no account of what was checked or would be done. Bullets start with the fact, so no bold lead-ins and no label lines. Plain words in place of coined names. No em dashes, no slogans, no "X, not Y" framing, no self-labeling, no closing offers. Chat replies stop at 150 words unless you ask for a document or a walkthrough. A findings list gets one or two sentences per finding. A redo sends only the delta. Where a rule has a positive form, the text states the form ("The last sentence is a fact.") ahead of the ban. Full text: rules/RULES.md.
The rules ship as an output style. It applies while the plugin is enabled and is part of the main agent's system prompt. Subagents run their own system prompt, so a SubagentStart hook hands them the same text. No hook rewrites or blocks anything.
The reminder exists because the output style is the first part of the context. After 20 or 30 turns it is 100k tokens before the current prompt. The model's own recent replies become its nearest style examples. From there the replies show the answer in the last line, "I checked" sentences, dashes, "X, not Y" and slogans. A UserPromptSubmit hook adds the whole rule set, condensed to 576 characters, to every prompt next to your text. Cost per turn is about 145 input tokens. The text is rules/REMINDER.md.
The meter shows model name and context fill as a percentage. Green below 37%, yellow from 37%, orange from 49%, skull from 60%. The thresholds are set below the usual 50, 65 and 80 percent. Three studies show retrieval quality dropping well before a large window fills:
The thresholds are the three numbers near the top of statusline/context-meter.js.
Prompt, run on Opus 5.5 with each setup: "We have a Flask API with a Postgres database. Requests time out under load once a day around 09:00. Where would you look first and why?"
Vanilla, 636 words:
Where I'd look first for the 09:00 timeouts
The 09:00 timing is the most useful clue. Before looking at any code, find out which of these two things is happening:
- Traffic goes up at 09:00. The start of the workday brings logins, dashboards and syncs. That's a capacity problem.
- Traffic stays flat but something else runs at 09:00. That's contention from a scheduled job.
Compare your request-rate graph at 09:00 with other hours. That one check tells you which half of the problem you're in.
1. Check what runs at 09:00
Look at crontabs,
pg_cron, Celery beat, Kubernetes CronJobs, backups (pg_dump), ETL and report jobs, andREFRESH MATERIALIZED VIEW. Also check for cache entries that all expire at the same moment, because that sends every request to the database at once.Be careful with timezones. 09:00 local might be 07:00 UTC in the scheduler config, so grep for both.
Common problems:
- A
REFRESH MATERIALIZED VIEWwithoutCONCURRENTLY, a bulkUPDATE, or a migration. Each of these takes locks that API queries then wait behind.- A backup or batch job using up disk I/O.
2. Capture what Postgres is doing during the window
This gives you the fastest real answer. Snapshot
pg_stat_activityevery 10–15 seconds from 08:55 to 09:15:SELECT now(), state, wait_event_type, wait_event, now() - xact_start AS xact_age, left(query, 120) AS query, application_name FROM pg_stat_activity WHERE datname = current_database() ORDER BY xact_start NULLS LAST;Read the results like this:
- Lots of
wait_event_type = 'Lock': something is holding locks. Join withpg_locks(or usepg_blocking_pids()) to find the blocking session. It's usually the scheduled job from step 1.- Lots of
idle in transaction: the app opens transactions and doesn't close them quickly. That holds connections and locks.- Many
activesessions running the same query: one query is slow at scale, often a missing index or a stale plan. Checkpg_stat_statementsfor that window.- Session count close to
max_connections: you're running out of connections (see step 3).Also set
log_min_duration_statement(e.g. 500ms) andlog_lock_waits = onso the next occurrence leaves a record.3. Check for app-side connection pool exhaustion
This is the most common cause of timeouts in Flask + SQLAlchemy apps. Search the app logs around 09:00 for:
QueuePool limit of size 5 overflow 10 reached, connection timed outThen do the arithmetic: gunicorn workers × threads × (
pool_size+max_overflow) × number of instances, compared with Postgresmax_connections. When traffic jumps, requests queue for a pooled connection until they time out. Postgres can look almost idle while this happens.Also check for ses