by JayPokale
Cut your AI coding agent's token bill on three axes: terse prose, YAGNI-first code, and tool-output compression. Claude Code, Pi, Cursor, Codex, Gemini + 4 more. Zero deps, published benchmarks including the runs it loses.
# Add to your Claude Code skills
git clone https://github.com/JayPokale/ChisleLast scanned: 9/17/2026
{
"issues": [
{
"file": "README.md",
"line": 132,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell — review the source before running): \"curl\ncurl -fsSL https://raw.githubusercontent.com/JayPokale/Chisle/main/install.\"",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-09-17T09:13:50.575Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how Chisle compares with popular alternatives.
Chisle is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by JayPokale. Cut your AI coding agent's token bill on three axes: terse prose, YAGNI-first code, and tool-output compression. Claude Code, Pi, Cursor, Codex, Gemini + 4 more. Zero deps, published benchmarks including the runs it loses. It has 437 GitHub stars.
Yes. Chisle passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/JayPokale/Chisle" and add it to your Claude Code skills directory (see the Installation section above).
Chisle is primarily written in JavaScript. It is open-source under JayPokale on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh Chisle against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ 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.
"Add debounce to a search input that currently fires an API call on every keystroke." Same model, same prompt, one difference: the injected ruleset. Both answers below are the verbatim committed output from benchmarks/results/raw/:
Opens with "Let me show you the most common approaches", then ships a reusable generic useDebounce<T> hook in its own file…
// useDebounce.ts
export function useDebounce<T>(
value: T, delay: number
): T {
const [debouncedValue, setDebouncedValue]
= useState<T>(value);
useEffect(() => { /* … */ }, [value, delay]);
return debouncedValue;
}
…then Option 2 and Option 3, a comparison table, and a caveats section.
Asks which framework, then answers the question that was actually asked: setTimeout in the effect you already have, no new file, no generic:
useEffect(() => {
const timer = setTimeout(async () => {
if (query.trim()) { /* fetch */ }
}, 300);
return () => clearTimeout(timer);
}, [query]);
Then two lines on why it works, and "use lodash.debounce if already installed."
Not golfed, boring. Same behaviour, one less abstraction, no second file, and it names the dependency you might already have instead of reinventing it.
Most efficiency tools compress one thing. Chisle compresses three:
| axis | what | how |
|---|---|---|
| Output: prose | filler, hedging, manufactured structure | zero-fluff ruleset, injected per session |
| Output: code | speculative abstractions, unrequested boilerplate | YAGNI efficiency ladder |
| Input: context | oversized tool output flooding the window | Claude PostToolUse / Pi tool_result: scrub, elide, dedup, plus prevention rules |
Where each one attaches to a session:
flowchart LR
subgraph S["Session start"]
H1["Ruleset injection<br/>once per active session"]
end
subgraph T["Every turn"]
H2["Mode tracking<br/>Claude + Pi"]
end
subgraph L["Every tool call"]
H3["PostToolUse / tool_result<br/>scrub → elide → dedup"]
end
H1 --> M(["Model"])
H2 --> M
M -->|writes| O["Output:<br/>terser prose,<br/>YAGNI-first code"]
M -->|calls a tool| TOOL[["Bash / grep / web / extension tools"]]
TOOL -->|raw output| H3
H3 -->|"compressed, rebuilt into<br/>the tool's own shape"| M
RE["Read / Edit / Write"] -.->|"never touched,<br/>exact bytes feed later edits"| M
style M fill:#1f2937,stroke:#d78a3c,color:#e6edf3
style O fill:#14532d,stroke:#2da44e,color:#e6edf3
style H3 fill:#1f2937,stroke:#2da44e,color:#e6edf3
style RE fill:#3f1d1d,stroke:#cf3b3b,color:#e6edf3
The loop on the right is the input axis: tool output is billed again on every later request in the session, so shrinking it once pays repeatedly. Read, Edit, and Write are deliberately outside it.
Every "be concise" tool has a worst day, the day it makes the model write more than no tool at all. Across 20 measured tasks over two suites, the specialists had that day 6 and 8 times, blowing up to 424% of the baseline. Chisle had it once, capped at 173%, and that one failure was root-caused, fixed in the ruleset, and re-validated live at 93%, with the whole investigation committed to the repo. Think of it as downside insurance for your token bill: not always the single cheapest answer, always the smallest worst case, from the only tool in this class that publishes its own failures. Why not caveman or ponytail? →
One command. Auto-detects your agents (Claude Code, Pi, Cursor, Windsurf, Cline, Kiro, Codex, Gemini, Copilot, OpenCode, Hermes) and wires each one. --uninstall puts everything back.
npx chisle
# or via curl
curl -fsSL https://raw.githubusercontent.com/JayPokale/Chisle/main/install.sh | bash
# Windows
irm https://raw.githubusercontent.com/JayPokale/Chisle/main/install.ps1 | iex
Preview first with npx chisle --dry-run, scope with --only claude or --only pi, see everything with npx chisle --help. Remove with npx chisle --uninstall.
Requirements: Node ≥18 (installer / npx) · Claude Code or Pi for /chisle toggling and input-side compression. The always-on ruleset still ships to every other agent.
npx chisle@latest --update
That refreshes every agent that already has Chisle and installs it into none that don't. Two details it exists to handle:
npx chisle does not upgrade. Every install path skips what is already present, so an upgrade run reports success and changes nothing. --update pairs the refresh with that check.@latest matters. npx chisle can serve a cached copy of the package from a previous run, so the pin is what guarantees you get the new one.Per-agent equivalents, if you prefer the native tool:
claude plugin update chisle@chisle # Claude Code plugin install
pi install npm:chisle # Pi package
gemini extensions install https://github.com/JayPokale/Chisle
Project-scoped agents (Cursor, Windsurf, Cline, Kiro, Copilot) keep their rule file inside the repo, so run the update once per project that has one.
Not sure what you are running? npx chisle --list prints the agents it detects, and claude plugin list shows the installed plugin and its version.
Chisle checks npm on session start and mentions it once when a major version is out (cached 3 days, CHISLE_UPDATE_CHECK=0 to silence). Minor and patch releases stay quiet on purpose.
Upgrading to 3.0.0 from 2.x needs nothing: a lite/full/ultra value in CHISLE_DEFAULT_MODE or config.json is no longer meaningful, falls through to the default, and Chisle stays active. It says so once so the setting is not ignored silently. Replace it with on/off or delete it.
claude plugin marketplace add JayPokale/Chisle # register the marketplace
claude plugin install chisle@chisle # enable the plugin
pi install npm:chisle
The package loads the zero-dependency extension and chisle skill globally. Pi extensions run with your user permissions; review the source before installation. Project-local installs (pi install -l npm:chisle) load only after you trust that project.
Two places, both measured rather than estimated:
npx chisle --stats # what the compressor has saved, cumulative
chisle: tool-output savings
saved: 88,967 chars (~22,241 tokens)
outputs: 18 compressed, 4,943 chars each on average
In Claude Code the statusline badge carries the same number live: [CHISLE] ⇣22k tok. Pi shows it in the footer for the current session.
This is the input axis only, and deliberately so. Chars elided have a real baseline, since the hook knows exactly what it cut. The output axis has none: there is no way to know what the model would have written without the ruleset, which is why that half is measured with A/B benchmark arms instead of a counter. A number that blended the two would be inventing the interesting half.
npx chisle --dry-run # prints every file it would touch, changes nothing
npx chisle --stats # prints what it has saved, changes nothing
Want the savings measured on your own work rather than ours? Clone the repo and replay the compressor over local transcripts. It reads them locally, writes nothing, and reports the input the hook would have stripped:
git clone https://github.com/JayPokale/Chisle && cd Chisle
node benchmarks/replay-compress.js # Claude Code
node benchmarks/replay-compress.js pi # Pi; marginal over Pi's native truncation
No