chisle 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +17 -0
- package/.claude-plugin/plugin.json +48 -0
- package/.clinerules/chisle.md +36 -0
- package/.cursor/rules/chisle.mdc +41 -0
- package/.github/copilot-instructions.md +36 -0
- package/.kiro/steering/chisle.md +40 -0
- package/.windsurf/rules/chisle.md +40 -0
- package/AGENTS.md +46 -0
- package/LICENSE +21 -0
- package/README.md +338 -0
- package/bin/install.js +485 -0
- package/bin/lib/settings.js +148 -0
- package/commands/chisle-audit.toml +5 -0
- package/commands/chisle-help.toml +4 -0
- package/commands/chisle-review.toml +5 -0
- package/commands/chisle.toml +8 -0
- package/hooks/chisle-activate.js +160 -0
- package/hooks/chisle-compress-output.js +266 -0
- package/hooks/chisle-config.js +152 -0
- package/hooks/chisle-mode-tracker.js +88 -0
- package/hooks/chisle-statusline.ps1 +54 -0
- package/hooks/chisle-statusline.sh +94 -0
- package/hooks/package.json +1 -0
- package/package.json +73 -0
- package/rules/chisle-activate.md +13 -0
- package/skills/chisle/SKILL.md +142 -0
- package/skills/chisle-audit/SKILL.md +65 -0
- package/skills/chisle-help/SKILL.md +45 -0
- package/skills/chisle-review/SKILL.md +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/logo.svg" width="120" alt="Chisle">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">𧨠Chisle</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<em>Your AI talks less, builds less, reads less β and says more. Like a senior dev who bills by the syllable.</em>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/chisle"><img src="https://img.shields.io/npm/v/chisle?style=flat-square&color=d78a3c" alt="npm version"></a>
|
|
13
|
+
<img src="https://img.shields.io/badge/works%20with-8%20agents-d78a3c?style=flat-square" alt="Works with 8 agents">
|
|
14
|
+
<a href="https://github.com/JayPokale/Chisle/actions/workflows/test.yml"><img src="https://img.shields.io/github/actions/workflow/status/JayPokale/Chisle/test.yml?style=flat-square&label=CI" alt="CI"></a>
|
|
15
|
+
<img src="https://img.shields.io/badge/deps-0-2da44e?style=flat-square" alt="Zero deps">
|
|
16
|
+
<img src="https://img.shields.io/badge/license-MIT-d78a3c?style=flat-square" alt="MIT">
|
|
17
|
+
<a href="https://github.com/JayPokale/Chisle/stargazers"><img src="https://img.shields.io/github/stars/JayPokale/Chisle?style=social" alt="Star Chisle on GitHub"></a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<strong>Half the output bill on 20 measured tasks · compresses what the model writes AND reads · one command</strong>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<a href="https://chisle.jaypokale.me"><strong>chisle.jaypokale.me</strong></a> β the site version of this README, with fewer words
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
"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/`](benchmarks/results/raw/):
|
|
31
|
+
|
|
32
|
+
<table>
|
|
33
|
+
<tr><th align="left" width="50%">bare agent β 142 lines, 1506 tokens</th><th align="left" width="50%">Chisle β 35 lines, 602 tokens</th></tr>
|
|
34
|
+
<tr valign="top"><td>
|
|
35
|
+
|
|
36
|
+
Opens with *"Let me show you the most common approaches"*, then ships a reusable generic `useDebounce<T>` hook in its own fileβ¦
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// useDebounce.ts
|
|
40
|
+
export function useDebounce<T>(
|
|
41
|
+
value: T, delay: number
|
|
42
|
+
): T {
|
|
43
|
+
const [debouncedValue, setDebouncedValue]
|
|
44
|
+
= useState<T>(value);
|
|
45
|
+
useEffect(() => { /* β¦ */ }, [value, delay]);
|
|
46
|
+
return debouncedValue;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
β¦then **Option 2** and **Option 3**, a comparison table, and a caveats section.
|
|
51
|
+
|
|
52
|
+
</td><td>
|
|
53
|
+
|
|
54
|
+
Asks which framework, then answers the question that was actually asked β `setTimeout` in the effect you already have, no new file, no generic:
|
|
55
|
+
|
|
56
|
+
```jsx
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const timer = setTimeout(async () => {
|
|
59
|
+
if (query.trim()) { /* fetch */ }
|
|
60
|
+
}, 300);
|
|
61
|
+
return () => clearTimeout(timer);
|
|
62
|
+
}, [query]);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Then two lines on why it works, and *"use `lodash.debounce` if already installed."*
|
|
66
|
+
|
|
67
|
+
</td></tr>
|
|
68
|
+
</table>
|
|
69
|
+
|
|
70
|
+
Not golfed β **boring**. Same behaviour, one less abstraction, no second file, and it names the dependency you might already have instead of reinventing it.
|
|
71
|
+
|
|
72
|
+
Most efficiency tools compress one thing. Chisle compresses **three**:
|
|
73
|
+
|
|
74
|
+
| axis | what | how |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| **Output: prose** | filler, hedging, manufactured structure | zero-fluff ruleset, injected per session |
|
|
77
|
+
| **Output: code** | speculative abstractions, unrequested boilerplate | YAGNI efficiency ladder |
|
|
78
|
+
| **Input: context** | oversized tool output flooding the window | `PostToolUse` hook β scrub, elide, dedup β plus prevention rules |
|
|
79
|
+
|
|
80
|
+
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](benchmarks/results/2026-07-07-verify-rerun.md). 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? β](docs/comparison.md)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Install
|
|
85
|
+
|
|
86
|
+
One command. Auto-detects your agents (Claude Code, Cursor, Windsurf, Cline, Kiro, Codex, Gemini, Copilot) and wires each one. `--uninstall` puts everything back.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx chisle
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# or via curl
|
|
94
|
+
curl -fsSL https://raw.githubusercontent.com/JayPokale/Chisle/main/install.sh | bash
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```powershell
|
|
98
|
+
# Windows
|
|
99
|
+
irm https://raw.githubusercontent.com/JayPokale/Chisle/main/install.ps1 | iex
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Preview first with `npx chisle --dry-run`, scope with `--only claude`, see everything with `npx chisle --help`. Remove with `npx chisle --uninstall`.
|
|
103
|
+
|
|
104
|
+
**Requirements:** Node β₯18 (installer / `npx`) Β· Claude Code for live `/chisle` switching and input-side compression β the always-on ruleset still ships to every other agent.
|
|
105
|
+
|
|
106
|
+
### Claude Code plugin (marketplace)
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
claude plugin marketplace add JayPokale/Chisle # register the marketplace
|
|
110
|
+
claude plugin install chisle@chisle # enable the plugin
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### See what it would do, before it does it
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npx chisle --dry-run # prints every file it would touch, changes nothing
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Want the savings measured on your own work rather than ours? Clone the repo and replay the compressor over your existing Claude Code transcripts β it reads them locally, writes nothing, and reports the tokens the input-side hook would have stripped:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
git clone https://github.com/JayPokale/Chisle && cd Chisle
|
|
123
|
+
node benchmarks/replay-compress.js
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Numbers
|
|
129
|
+
|
|
130
|
+
Nothing here is estimated. Every figure below is recomputed from committed raw data; the 2026-07-07 [verification writeup](benchmarks/results/2026-07-07-verify-rerun.md) re-derived the old claims from scratch, re-ran the whole suite against the competitors' **installed plugins**, and retired the one claim that didn't survive.
|
|
131
|
+
|
|
132
|
+
### Output axis β vs caveman & ponytail, 20 live tasks
|
|
133
|
+
|
|
134
|
+
**59+ live model runs** across two suites (June 4-arm matrix on Haiku + Sonnet sweep; July re-verification run). Arms differ only in the injected system prompt. Billed output tokens vs the no-tool baseline:
|
|
135
|
+
|
|
136
|
+
| | total bill (all 20 tasks) | average task | worst case | backfires |
|
|
137
|
+
|---|--:|--:|--:|--:|
|
|
138
|
+
| caveman | 80% | 98% | **424%** | 6 / 20 |
|
|
139
|
+
| ponytail | 68% | 91% | 227% | 8 / 20 |
|
|
140
|
+
| **Chisle** | **52%** | **69%** | **173%** | **1 / 20** |
|
|
141
|
+
|
|
142
|
+
Chisle wins all four columns: it cut the total 20-task bill **nearly in half** while the specialists managed 20β32%, and it did so with the smallest worst day and a twentieth the backfire rate.
|
|
143
|
+
|
|
144
|
+
<p align="center">
|
|
145
|
+
<img src="assets/benchmark.svg" width="820" alt="Total billed output across 20 tasks as percent of the no-tool baseline. caveman 80% (worst day 424%, backfired 6), ponytail 68% (worst day 227%, backfired 8), Chisle 52% (worst day 173%, backfired 1 β root-caused and fixed).">
|
|
146
|
+
</p>
|
|
147
|
+
|
|
148
|
+
The bar is the whole 20-task bill; the badge is each tool's worst single day. caveman's worst day cost **4.2Γ** a bare model; ponytail's β a tool whose entire job is writing less β **2.3Γ**. Chisle's worst day was 1.7Γ, it happened once, and the fix is measured and merged.
|
|
149
|
+
|
|
150
|
+
On coding tasks Chisle is leanest (June: 22% of baseline vs caveman 46%, ponytail 29%; July: 64% vs 84% and 160%). On pure prose caveman is a hair leaner on a good day β credit where due. And in the July run all 24 answers, every arm, **graded correct**: nobody here buys token savings with wrong answers.
|
|
151
|
+
|
|
152
|
+
#### Task by task
|
|
153
|
+
|
|
154
|
+
Averages hide the interesting part, so here is every cell of the June suite β same six prompts, every arm, no cherry-picking:
|
|
155
|
+
|
|
156
|
+
<p align="center">
|
|
157
|
+
<img src="assets/per-task.svg" width="820" alt="Billed output per task as a percent of the no-tool baseline across the six-task June suite: Chisle is leanest on five of six, caveman wins the cache task at 8% versus Chisle's 12%.">
|
|
158
|
+
</p>
|
|
159
|
+
|
|
160
|
+
Chisle is leanest on **5 of 6**. caveman takes `cache` (8% vs our 12%) β it wins by answering in prose where we still emit working code, which is the trade you would want on a task that asked for code. Note the two prose rows where ponytail lands **above** 100%: a tool built to write less made the model write *more* than using no tool at all. That is the failure mode the worst-case column above is really about.
|
|
161
|
+
|
|
162
|
+
#### Where each tool actually helps
|
|
163
|
+
|
|
164
|
+
| | prose | code judgment | input/context | worst-case guard | publishes failures |
|
|
165
|
+
|---|:---:|:---:|:---:|:---:|:---:|
|
|
166
|
+
| caveman | β
| β | β | β 424% | β |
|
|
167
|
+
| ponytail | β | β
| β | β 227% | β |
|
|
168
|
+
| headroom | β | β | β
proxy | β | β |
|
|
169
|
+
| **Chisle** | β
| β
| β
hook | **173%, 1/20** | β
|
|
|
170
|
+
|
|
171
|
+
The row that matters is the last one. Every tool here looks good on its best day; the numbers above are the only ones in this class published alongside the run that went wrong. [Full comparison β](docs/comparison.md)
|
|
172
|
+
|
|
173
|
+
### Input axis β tool-output compression (Claude Code)
|
|
174
|
+
|
|
175
|
+
Measured over 171 real sessions ([receipts](benchmarks/results/2026-07-07-input-axis.md)): tool output is **67.5%** of context content, and every byte of it is re-billed on *every subsequent request* in the session (median: 171 requests). A `PostToolUse` hook shrinks it before the model reads it β deterministic, zero LLM, zero network:
|
|
176
|
+
|
|
177
|
+
| tier | what it does | loss |
|
|
178
|
+
|---|---|---|
|
|
179
|
+
| **scrub** | strips ANSI escapes, collapses blank runs and `line repeated NΓ` | none |
|
|
180
|
+
| **elide** | oversized output β head + tail, error-like lines salvaged from the cut | bounded, guarded |
|
|
181
|
+
| **dedup** | byte-identical repeat of a tool's previous output (same session) β one-line marker | none β the copy is already in context |
|
|
182
|
+
|
|
183
|
+
Replayed over the same 171 sessions: **~61k tokens** (full) / **~103k** (ultra) saved one-shot, ~46% off every eligible output β floor, not estimate, since each saved byte also stops being re-sent on every later request. Correctness rules: allowlist only (`Bash`, `Agent`, `WebFetch`, `WebSearch`, `Grep`, `Glob`, `mcp__*`) β never `Read`/`Edit`, whose exact bytes feed later edits. Honest ledger: dedup scored **0 hits** on this corpus (rtk-filtered at source); it's kept for the test-rerun case, kill-switchable, and labeled speculative until it earns a number. Replay it on your own transcripts:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
node benchmarks/replay-compress.js # what it would have saved you
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Thresholds track the `/chisle` level (lite 16k / full 8k / ultra 5k chars). `stop chisle`, `CHISLE_COMPRESS=0`, `CHISLE_COMPRESS_SCRUB=0`, `CHISLE_COMPRESS_DEDUP=0` β every tier has an off switch.
|
|
190
|
+
|
|
191
|
+
### Prevention β the context diet
|
|
192
|
+
|
|
193
|
+
The biggest context whale (whole-file `Read`s β 5.6M chars in the measured corpus) can't be compressed without breaking later edits. So the ruleset attacks it upstream, in every agent: grep for the symbol first, read only the matching region, narrow at the source (`ls dir` not `ls -R`, pipe long output through `tail`/`grep`), never re-read what's already in context.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## What the output sounds like
|
|
198
|
+
|
|
199
|
+
**"Why React component re-render?"** (full)
|
|
200
|
+
> New object ref each render. Inline object prop = new ref = re-render. `useMemo`.
|
|
201
|
+
|
|
202
|
+
**"Why React component re-render?"** (ultra)
|
|
203
|
+
> Inline obj prop β new ref β re-render. `useMemo`. Why inline object at all?
|
|
204
|
+
|
|
205
|
+
**"Add a cache for API responses."** (ultra)
|
|
206
|
+
> No cache until profiler says so. When it does: `@lru_cache`. Hand-rolled TTL cache = bug farm with hit rate.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Usage
|
|
211
|
+
|
|
212
|
+
| Command | Effect |
|
|
213
|
+
|---------|--------|
|
|
214
|
+
| *(nothing)* | On automatically at `full` every session after install |
|
|
215
|
+
| `/chisle` | Re-activate at default level if you'd stopped it |
|
|
216
|
+
| `/chisle lite` | Tighter prose, flags the minimal alternative |
|
|
217
|
+
| `/chisle full` | Full compression + YAGNI ladder enforced |
|
|
218
|
+
| `/chisle ultra` | Extremist β abbreviate prose, delete before add, challenge requirements |
|
|
219
|
+
| `stop chisle` | Deactivate (ruleset *and* input-side compression) |
|
|
220
|
+
| `normal mode` | Deactivate |
|
|
221
|
+
|
|
222
|
+
Natural language works too: "activate chisle", "chisle mode", "chislify this". Across every level, code symbols, function/API names, and error strings stay verbatim β only the noise around them compresses.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## How it works
|
|
227
|
+
|
|
228
|
+
Before writing code, the agent stops at the first rung that holds:
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
1. Does this need to exist? β no: skip it (YAGNI)
|
|
232
|
+
2. Already in this codebase? β reuse it, don't rewrite
|
|
233
|
+
3. Stdlib does it? β use it
|
|
234
|
+
4. Native platform feature? β use it
|
|
235
|
+
5. Installed dependency? β use it
|
|
236
|
+
6. One line? β one line
|
|
237
|
+
7. Only then: the minimum that works
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
The ladder runs *after* reading the code β lazy about the solution, never about understanding. Lazy is not negligent: trust-boundary validation, data-loss handling, security, and accessibility are never on the chopping block.
|
|
241
|
+
|
|
242
|
+
Mark deliberate simplifications so "later" doesn't quietly become "never":
|
|
243
|
+
|
|
244
|
+
```js
|
|
245
|
+
// chisle: global lock, per-account locks if throughput matters
|
|
246
|
+
// chisle: O(n) scan, index this when table exceeds ~10k rows
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Config
|
|
252
|
+
|
|
253
|
+
**On by default.** After install, CHISLE activates automatically at `full` every session β no `/chisle` needed. Change the default level, or set `off` to stay dormant until you type `/chisle`:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# env var (highest priority)
|
|
257
|
+
export CHISLE_DEFAULT_MODE=ultra
|
|
258
|
+
|
|
259
|
+
# config file (persists across shells)
|
|
260
|
+
~/.config/chisle/config.json β { "defaultMode": "ultra" }
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Resolution: env var β config file β `full`. Valid: `off`, `lite`, `full`, `ultra`.
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Prior art & what stacks with it
|
|
268
|
+
|
|
269
|
+
Chisle borrows the best published token-saving techniques and implements the ones that fit a zero-dep hook; the rest stack cleanly alongside it:
|
|
270
|
+
|
|
271
|
+
| technique | source | in Chisle? |
|
|
272
|
+
|---|---|---|
|
|
273
|
+
| Prose compression persona | [caveman](https://github.com/JuliusBrussee/caveman) | β
+ code judgment it lacks |
|
|
274
|
+
| YAGNI/lazy-code ruleset | [ponytail](https://github.com/dietrichgebert/ponytail) | β
+ prose discipline it lacks |
|
|
275
|
+
| Tool-output elision (head/tail) | [headroom](https://github.com/headroomlabs-ai/headroom)-style, proxy-free | β
hook, no proxy β works on subscription OAuth |
|
|
276
|
+
| ANSI strip / log crush / dedup | headroom transforms | β
scrub + dedup tiers |
|
|
277
|
+
| Command rewriting at the source | RTK-style `PreToolUse` ([writeup](https://andrewpatterson.dev/posts/token-savings-rtk-headroom/)) | β stacks β RTK shrinks at source, Chisle catches what it can't reach (subagents, MCP, web) |
|
|
278
|
+
| MCP/codebase-graph indexing | context-mode, [token-optimizer-mcp](https://github.com/ooples/token-optimizer-mcp) | β stacks β orthogonal layer |
|
|
279
|
+
| CLAUDE.md dieting | [community guides](https://www.firecrawl.dev/blog/claude-code-token-efficiency) | β
`/chisle-audit` flags bloated docs/config prose |
|
|
280
|
+
|
|
281
|
+
## Multi-agent
|
|
282
|
+
|
|
283
|
+
Primarily a Claude Code plugin, but ships to every agent with a rules/context file β Cursor, Windsurf, Cline, Kiro, Codex, Gemini, Copilot. Per-agent copies generated by `scripts/build-rules.js` (a condensed mirror of the skill β edit both, CI checks sync). See [`docs/agent-portability.md`](./docs/agent-portability.md). Input-side compression is Claude Code-only for now: no other agent exposes a post-tool output rewrite hook.
|
|
284
|
+
|
|
285
|
+
## FAQ
|
|
286
|
+
|
|
287
|
+
**Doesn't injecting a persona every turn cost tokens?**
|
|
288
|
+
Yes β a one-time ruleset at session start (~1.8k tokens) plus a ~40-token reminder per turn. Output is where it pays back: coding answers shrink 40β60% (benchmarks), and output bills several Γ higher than input, so net is positive after the first couple of turns. On a one-line throwaway prompt the overhead can exceed the saving. The input-side hook has no such tradeoff β it only ever removes tokens.
|
|
289
|
+
|
|
290
|
+
**Will it golf my code into clever one-liners?**
|
|
291
|
+
No. Boring over clever. Deletion beats addition; obfuscation isn't deletion.
|
|
292
|
+
|
|
293
|
+
**Does it cut corners on safety?**
|
|
294
|
+
Never. Input validation, data-loss handling, security, and accessibility are off the table. Lazy about solutions, not about reading the problem.
|
|
295
|
+
|
|
296
|
+
**Can the output compressor eat a line I needed?**
|
|
297
|
+
Designed not to: allowlist keeps `Read`/`Edit` exact, error-looking lines are salvaged from any elided region, dedup only fires on byte-identical same-session repeats, and every tier has a kill switch. If it still bites you, file an issue β that's a bug, not the design.
|
|
298
|
+
|
|
299
|
+
**Should the star count worry me?**
|
|
300
|
+
Everyone starts at zero. Run `npx chisle --dry-run`, see what it'd do, decide. And if the receipts convinced you, [a star](https://github.com/JayPokale/Chisle/stargazers) is how the next person finds them β it's also the only payment a zero-dep MIT tool will ever ask for.
|
|
301
|
+
|
|
302
|
+
β [More FAQ and competitor comparison](docs/comparison.md)
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Contributing
|
|
307
|
+
|
|
308
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). Edit the skill (`skills/chisle/SKILL.md`) **and** the condensed rule body in `scripts/build-rules.js`, regenerate copies and chart, run the tests. CI enforces all three.
|
|
309
|
+
|
|
310
|
+
Built by [Jay Pokale](https://github.com/JayPokale) with [Claude](https://claude.com/claude-code), [Antigravity](https://antigravity.google), and [Codex](https://openai.com/blog/openai-codex/) as co-engineers β the input-compression hook, the benchmark verification, and several of the bug hunts documented in the changelog were pair-work.
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
npm test # 59 tests: flag safety, tracker, settings merge, installer, compressor
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## License
|
|
317
|
+
|
|
318
|
+
[MIT](LICENSE). The shortest license that works.
|
|
319
|
+
|
|
320
|
+
## Contributors
|
|
321
|
+
|
|
322
|
+
<a href="https://github.com/JayPokale/Chisle/graphs/contributors">
|
|
323
|
+
<img src="https://contrib.rocks/image?repo=JayPokale/Chisle" alt="GitHub contributors">
|
|
324
|
+
</a>
|
|
325
|
+
|
|
326
|
+
**AI co-engineers** (pair-work credited in commit trailers and the changelog):
|
|
327
|
+
|
|
328
|
+
<p>
|
|
329
|
+
<a href="https://claude.com/claude-code"><img src="https://img.shields.io/badge/π€_Claude-input_axis_Β·_benchmarks_Β·_bug_hunts-d97757?style=flat-square" alt="Claude (Anthropic)"></a>
|
|
330
|
+
<a href="https://openai.com/codex/"><img src="https://img.shields.io/badge/π€_Codex-early_iterations-10a37f?style=flat-square" alt="Codex (OpenAI)"></a>
|
|
331
|
+
<a href="https://antigravity.google/"><img src="https://img.shields.io/badge/π€_Antigravity-early_iterations-4285f4?style=flat-square" alt="Antigravity (Google)"></a>
|
|
332
|
+
</p>
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
<p align="center">
|
|
337
|
+
Saved you tokens? <a href="https://github.com/JayPokale/Chisle">β Star the repo</a> β it costs zero tokens and keeps the benchmarks running.
|
|
338
|
+
</p>
|