Why Concise

Prompts ask an agent to be brief. Concise checks whether it actually was, before the write runs.

Install Concise

Catch it before it lands.

Concise gives the finding. The agent can revise.
It does not rewrite your files.

An example, not a live agent
What the agent tries to writePending
src/auth.ts
// Check whether the provided user has// permission to access the resource.// First read their permissions list,// then look for the requested entry.// Return true when a match is found.export function canAccess(user, resource) {  return user.permissions.includes(resource);}
5 comment linesTypeScript
With Concise Rewritten
src/auth.ts
// Check resource permissions.export function canAccess(user, resource) {  return user.permissions.includes(resource);}
1 comment line
Caught before the write

Comment is 5 lines (limit 2).

5 comment lines become 1. The code stays the same.See the hook in action

Illustrative examples, not a live agent. No files are changed.

Three core checks.

Enabled without configuration. Checks apply to submitted writes and additions, not the whole repository.

Comments
Comment blocks over 2 lines trigger a denial with the location and limit.
Files
Whole-file writes and new-file patches over 300 lines are flagged. Ordinary update hunks are checked only for additions.
PRs and issues
Inline bodies allow 1 prose paragraph of up to 3 sentences. Headings and lists are allowed.

After two denials on the same target, the next attempt is allowed and flagged. Em-dash and AI-writing checks are optional and off by default.

Choose checks and exceptions

Quieter test output.

A passing test run reaches the agent as a short summary. A failed run keeps its full output. Each run’s complete log is saved, and its path is printed with the summary.

pytest, go test, npm test, Jest, and Vitest

Example output in Claude Codepytest
$ pytest tests/
[filtered] runner=pytest exit=0 (cap 100)
[filtered] available output: cat '$TMPDIR/concise-test-output-hS2x6f/output.log'
[filtered] last 5 lines:
…
========== 214 passed in 3.82s ==========