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/ChisleGuides for using ai agents skills like Chisle.
Last 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 731 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!
From $49 · 30 days · terms & refunds
⚠️ 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.
Automated security scan — not a certification.
Chisle is a Claude Code plugin that makes Claude cheaper to run without making it dumber. It cuts what Claude writes: no filler, no hedging, no speculative abstractions, just the smallest code that works. It also cuts what Claude reads: a PostToolUse hook trims oversized tool output by ~46% before it re-enters the context window, where it would be re-billed on every later request. In agent-loop tests Claude with Chisle passes the same tasks as Claude without it. One npx chisle installs it, and the same ruleset ships to Pi, Cursor, Codex, Gemini, Copilot, OpenCode, Antigravity and four more agents. Every number here comes from committed raw transcripts, including the runs where it lost.
"Implement an order state machine covering created, paid, shipped, delivered, cancelled and refunded, with the legal transitions enforced and invalid ones rejected." Same model, same prompt, one difference: the injected ruleset. Both answers are the verbatim committed output from raw-oct-notools/large-s2:
An Enum of states, a custom exception class, type hints and docstrings on every method, a file write, then a test harness:
class OrderState(Enum):
CREATED = "created"
PAID = "paid"
# … four more
class InvalidTransition(Exception):
"""Raised when attempting an invalid state transition."""
pass
class Order:
VALID_TRANSITIONS = { … }
def transition_to(self, next_state: OrderState) -> None:
"""Transition to next state if valid, …"""
…plus usage, tests and a summary.
One dict of legal transitions, one method that enforces it:
class OrderStateMachine:
TRANSITIONS = {
'created': {'paid', 'cancelled'},
'paid': {'shipped', 'refunded'},
'shipped': {'delivered', 'cancelled'},
'delivered': {'refunded'},
'cancelled': set(),
'refunded': set(),
}
def transition(self, new_state):
if new_state not in self.TRANSITIONS[self.state]:
raise ValueError(f"Invalid transition: …")
self.state = new_state
Then a short usage block and one line on how it works.
Same behaviour, a third of the tokens. caveman wrote 1,140 and ponytail 842 on the same prompt.
| 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, OpenCode plugin, Copilot CLI postToolUse: scrub, elide, dedup, plus prevention rules |
| Input: MCP | oversized MCP tool results in any agent | npx chisle mcp wrap: a proxy in front of each stdio MCP server (Cursor, Windsurf, Cline, Kiro, Gemini, Qwen Code, Copilot CLI) |
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.
One command. Auto-detects your agents (Claude Code, Pi, Cursor, Windsurf, Cline, Kiro, Antigravity, Codex, Gemini, Copilot, Copilot CLI, OpenCode, Hermes) and wires each one. --uninstall puts everything back. npx chisle mcp wrap extends tool-output compression to MCP servers in any agent (details).
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.
Upgrading, per-agent setup, --stats and config: docs/usage.md.
Same model, same prompts, one difference: the injected ruleset. Lower = leaner. Chisle is the leanest on every row.
Claude Code (Haiku 4.5, 26 live prompts, tools off, raw cells):
| % of a bare model | caveman | ponytail | Chisle |
|---|---|---|---|
| answer length | 65% | 58% | 56% |
| answer lines | 66% | 54% | 52% |
Pi (GPT-5.5, 6 tasks, raw cells):
| % of a bare model | caveman | ponytail | Chisle |
|---|---|---|---|
| answer length | 56% | 49% | 37% |
| answer lines | 75% | 38% | 37% |
| billed tokens, explanations | 43% | 76% | 39% |
Accuracy holds against the bare model: 156/156 vs 155/156 on auto-graded maths and coding, 48/60 vs 49/60 on agentic hidden-test repos, Fisher p = 1.000 on both (writeup). No judge model anywhere.
Tool output is two thirds of a Claude Code session's context and re-billed every turn. The compressor cuts ~46% off every oversized output (171 sessions); on OpenCode a 30 KB log dropped 87% of fresh input tokens.
Method and every raw cell: docs/benchmarks.md.
Before writing code, the agent stops at the first rung that holds:
flowchart TD
A[Request for code] --> R[Read the problem fully]
R --> Q1{Does this need<br/>to exist at all?}
Q1 -->|no| S1[Skip it. Say so in one line]
Q1 -->|yes| Q2{Already in<br/>this codebase?}
Q2 -->|yes| S2[Reuse it. Don't rewrite]
Q2 -->|no| Q3{Stdlib<br/>does it?}
Q3 -->|yes| S3[Use the stdlib]
Q3 -->|no| Q4{Native platform<br/>feature covers it?}
Q4 -->|yes| S4["CSS over JS, DB constraint<br/>over app code"]
Q4 -->|no| Q5{Already-installed<br/>dependency?}
Q5 -->|yes| S5[Use it. Never add a new dep<br/>for what a few lines do]
Q5 -->|no| Q6{Can it be<br/>one line?}
Q6 -->|yes| S6[One line]
Q6 -->|no| S7[The minimum code that works]
S1 & S2 & S3 & S4 & S5 & S6 & S7 --> OUT[Ship it + note what was skipped<br/>and when to add it]
style Q1 fill:#1f2937,stroke:#d78a3c,color:#e6edf3
style OUT fill:#14532d,stroke:#2da44e,color:#e6edf3
style R fill:#1f2937,stroke:#8b949e,color:#e6edf3
The ladder runs after reading, never instead of it. Note the exit: every rung lands on the same obligation: say what you skipped, so "later" doesn't quietly become "never".
The ladder runs after reading the code, lazy about the solution and never about understanding. Lazy is not negligent: trust-boundary validation, data-loss handling, security, and accessibility are never on the chopping block.
Mark deliberate simplifications so "later" doesn't quietly become "never":
// chisle: global lock, per-account locks if throughput matters
// chisle: O(n) sca