simplicio-cli 0.2.12__tar.gz → 0.4.1__tar.gz
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.
- {simplicio_cli-0.2.12/simplicio_cli.egg-info → simplicio_cli-0.4.1}/PKG-INFO +300 -26
- simplicio_cli-0.4.1/README.md +663 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/pyproject.toml +6 -1
- simplicio_cli-0.4.1/simplicio/adaptive.py +60 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/bench.py +32 -7
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/init.py +5 -4
- simplicio_cli-0.4.1/simplicio/mapper.py +207 -0
- simplicio_cli-0.4.1/simplicio/observability.py +32 -0
- simplicio_cli-0.4.1/simplicio/pipeline.py +100 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/precedent.py +19 -0
- simplicio_cli-0.4.1/simplicio/prompt.py +56 -0
- simplicio_cli-0.4.1/simplicio/providers.py +142 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/templates/simplicio_prompt.md +2 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/templates/userpromptsubmit-hook.sh +8 -0
- simplicio_cli-0.4.1/simplicio/utils/__init__.py +8 -0
- simplicio_cli-0.4.1/simplicio/utils/cache.py +84 -0
- simplicio_cli-0.4.1/simplicio/utils/http_client.py +72 -0
- simplicio_cli-0.4.1/simplicio/utils/serialization.py +45 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1/simplicio_cli.egg-info}/PKG-INFO +300 -26
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio_cli.egg-info/SOURCES.txt +7 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio_cli.egg-info/requires.txt +5 -0
- simplicio_cli-0.2.12/README.md +0 -394
- simplicio_cli-0.2.12/simplicio/pipeline.py +0 -28
- simplicio_cli-0.2.12/simplicio/prompt.py +0 -25
- simplicio_cli-0.2.12/simplicio/providers.py +0 -63
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/LICENSE +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/setup.cfg +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/__init__.py +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/cache.py +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/cli.py +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/detect.py +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/skill_router.py +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio/templates/SKILL.md +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio_cli.egg-info/dependency_links.txt +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio_cli.egg-info/entry_points.txt +0 -0
- {simplicio_cli-0.2.12 → simplicio_cli-0.4.1}/simplicio_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simplicio-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Portable task-to-code pipeline that works with any LLM. Turn a one-line task into a verified code change — diff + test + verify loop. +55 pts on a 156-check benchmark, 21% faster, ~same tokens.
|
|
5
5
|
Author-email: Wesley Simplicio <wesleybob4@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -31,6 +31,11 @@ Requires-Dist: sentence-transformers>=2.2
|
|
|
31
31
|
Requires-Dist: numpy>=1.23
|
|
32
32
|
Requires-Dist: anthropic>=0.30
|
|
33
33
|
Requires-Dist: openai>=1.30
|
|
34
|
+
Requires-Dist: simplicio-mapper>=0.6.0
|
|
35
|
+
Requires-Dist: simplicio-prompt>=1.9.0
|
|
36
|
+
Requires-Dist: httpx>=0.27
|
|
37
|
+
Requires-Dist: orjson>=3.10
|
|
38
|
+
Requires-Dist: diskcache>=5.6
|
|
34
39
|
Provides-Extra: bench
|
|
35
40
|
Requires-Dist: fpdf2>=2.7; extra == "bench"
|
|
36
41
|
Dynamic: license-file
|
|
@@ -46,7 +51,9 @@ Dynamic: license-file
|
|
|
46
51
|
[](output/imagegen/simplicio-cli-readme-hero.png)
|
|
47
52
|
|
|
48
53
|
> *"hide the Delete button for non-admins"* → diff + test + applied + verified.
|
|
49
|
-
>
|
|
54
|
+
> **Zero API key inside Claude Code** (auto-installs, uses your subscription) — or
|
|
55
|
+
> bring your own key for any provider: OpenRouter, OpenAI, Anthropic, GLM,
|
|
56
|
+
> DeepSeek, Ollama.
|
|
50
57
|
|
|
51
58
|
```bash
|
|
52
59
|
pip install simplicio-cli
|
|
@@ -56,10 +63,125 @@ pip install simplicio-cli
|
|
|
56
63
|
|
|
57
64
|
## Why it works — the numbers
|
|
58
65
|
|
|
66
|
+
Two complementary benchmarks measure different things. Read them in order.
|
|
67
|
+
|
|
68
|
+
### 1. Execution benchmark — real project, real tasks, real test suite (the "does it work" answer)
|
|
69
|
+
|
|
70
|
+
**This is not regex pattern-matching. This is not a synthetic toy harness in
|
|
71
|
+
isolation.** Run against [`wesleysimplicio/sistema-sindico`](https://github.com/wesleysimplicio/sistema-sindico)
|
|
72
|
+
— a real condominium-management system in pure PHP 8, public on GitHub, with a
|
|
73
|
+
real PHPUnit suite (`vendor/bin/phpunit --configuration phpunit.xml.dist`).
|
|
74
|
+
|
|
75
|
+
For each task the model is asked for a **real engineering change** — add a new
|
|
76
|
+
method to an existing production class (permission helper, env parser,
|
|
77
|
+
rate-limit key builder, repository SQL builder, route introspection, etc.).
|
|
78
|
+
The generated file replaces the original in a working copy of the real repo;
|
|
79
|
+
a **hidden PHPUnit test** (never shown to the model, asserting BOTH true and
|
|
80
|
+
false states of the required behaviour) is dropped into
|
|
81
|
+
`tests/unit/Core/Hidden/`; the **entire production suite runs** (every
|
|
82
|
+
pre-existing test of the real codebase plus the hidden one). **Pass =
|
|
83
|
+
`phpunit` exit code 0** — the same green/red signal the project's CI would use
|
|
84
|
+
to merge a PR. The model's change must be *correct* (the new test passes) AND
|
|
85
|
+
must *not break existing behaviour* (every prior test still passes).
|
|
86
|
+
|
|
87
|
+
All sides emit the complete file (identical output shape); the only variable
|
|
88
|
+
is the wrapping prompt.
|
|
89
|
+
|
|
90
|
+
4 tasks · **9 models** (3 small · 3 mid · 3 frontier) · 2 sides = **36 runs per side**, scored by `vendor/bin/phpunit` exit code on 2026-05-28. Both sides emit the complete file; the only variable is whether the goal is wrapped in the simplicio contract:
|
|
91
|
+
|
|
92
|
+
| Tier | Model | Without simplicio | With simplicio | Gain |
|
|
93
|
+
|---|---|---|---|---|
|
|
94
|
+
| small | **Llama 3.2 1B** (`meta-llama/Llama-3.2-1B-Instruct`) | 0% | 0% | 0 pts |
|
|
95
|
+
| small | **Gemma 3n e4B** (`google/gemma-3n-E4B-it`) | 0% | 0% | 0 pts |
|
|
96
|
+
| small | **Gemma 3 4B** (`google/gemma-3-4b-it`) | 0% | **75%** | **+75 pts** |
|
|
97
|
+
| mid | **Qwen 2.5 7B** (`qwen/qwen-2.5-7b-instruct`) | 0% | **25%** | **+25 pts** |
|
|
98
|
+
| mid | **Llama 3.1 8B** (`meta-llama/Llama-3.1-8B-Instruct`) | 50% | **100%** | **+50 pts** |
|
|
99
|
+
| mid | **Gemma 3 12B** (`google/gemma-3-12b-it`) | 50% | **75%** | **+25 pts** |
|
|
100
|
+
| frontier | **Gemini 3.5 Flash** (`google/gemini-3.5-flash`) | 75% | **100%** | **+25 pts** |
|
|
101
|
+
| frontier | **Claude Opus 4.7** (`anthropic/claude-opus-4.7`) | 50% | **100%** | **+50 pts** |
|
|
102
|
+
| frontier | **GPT-5.5** (`openai/gpt-5.5`) | 75% | **100%** | **+25 pts** |
|
|
103
|
+
| **Headline (9 models · 4 tasks · 36 runs/side)** | | **33%** | **64%** | **+31 pts** |
|
|
104
|
+
|
|
105
|
+
> Every model with baseline capability to emit valid PHP gains **+25 to +75
|
|
106
|
+
> points** when the task is wrapped in the simplicio contract. The **two
|
|
107
|
+
> sub-2B/4B-MoE models score 0% on both sides** — they can't produce a
|
|
108
|
+
> parseable PHP file regardless of prompt — so the contract has nothing to
|
|
109
|
+
> amplify. Honest scope: simplicio multiplies capable models, it does not
|
|
110
|
+
> create capability in tiny ones. Three frontier models hit **100%** with the
|
|
111
|
+
> contract.
|
|
112
|
+
|
|
113
|
+
Full report: [`bench/results_exec_sindico.md`](bench/results_exec_sindico.md) ·
|
|
114
|
+
[`bench/results_exec_sindico.pdf`](bench/results_exec_sindico.pdf). Reproduce:
|
|
115
|
+
clone `sistema-sindico` (public), `composer install`, then
|
|
116
|
+
`BENCH_BASE_URL=… BENCH_API_KEY=… BENCH_MODELS=…
|
|
117
|
+
python3 bench/run_exec_sindico.py`. Hidden tests live under
|
|
118
|
+
`bench/sindico_hidden/`; harness in `bench/run_exec_sindico.py`.
|
|
119
|
+
|
|
120
|
+
### 2. Contract-adherence benchmark — structural checks across many models
|
|
121
|
+
|
|
122
|
+
The tables below measure something **narrower and complementary**: did the
|
|
123
|
+
model produce **the right shape of actionable output** (target-file mention +
|
|
124
|
+
DIFF block + TEST block + contract-state keywords) on a raw one-line prompt
|
|
125
|
+
vs. the simplicio contract. Scoring is via **deterministic regex** on the
|
|
126
|
+
output — it's not a proof that the code compiles or passes runtime tests.
|
|
127
|
+
That's what the execution benchmark above is for. The two answer different
|
|
128
|
+
questions: this one measures *contract adherence at scale across many models*;
|
|
129
|
+
the execution one measures *runtime correctness on a real codebase*.
|
|
130
|
+
|
|
59
131
|
Same model. Same task. Only the prompt changes. **Measured, reproducible, deterministic.**
|
|
60
|
-
**
|
|
61
|
-
|
|
62
|
-
at least **+14 points** when
|
|
132
|
+
**Seventeen models tested across four runs** — three local Ollama models on an
|
|
133
|
+
M1 MacBook (8 GB), five sub-4B tiny models, six frontier 2026 models, and three
|
|
134
|
+
mid-tier 7B–12B open models. Every one gained at least **+14 points** when
|
|
135
|
+
wrapped in simplicio's 6-layer contract.
|
|
136
|
+
|
|
137
|
+
#### Hugging Face — Qwen2.5-Coder, re-run on 2026-05-27 (latest mapper, 10 cases/side, 156 checks)
|
|
138
|
+
|
|
139
|
+
First batch of the smaller→larger re-benchmark against the latest
|
|
140
|
+
`simplicio-mapper` artifacts. The 1.5B runs on CPU via `transformers`
|
|
141
|
+
(Hugging Face Inference Providers does not serve it); the 3B and 7B run
|
|
142
|
+
through the HF router (`https://router.huggingface.co/v1`).
|
|
143
|
+
|
|
144
|
+
| Model | Without simplicio | With simplicio | Gain |
|
|
145
|
+
|---|---|---|---|
|
|
146
|
+
| **Qwen 2.5 Coder 7B** (`Qwen/Qwen2.5-Coder-7B-Instruct`) | 38% | **96%** | **+58 pts** |
|
|
147
|
+
| **Qwen 2.5 Coder 3B** (`Qwen/Qwen2.5-Coder-3B-Instruct`) | 34% | **94%** | **+60 pts** |
|
|
148
|
+
| **Qwen 2.5 Coder 1.5B** (`Qwen/Qwen2.5-Coder-1.5B-Instruct`, local CPU) | 30% | **92%** | **+62 pts** |
|
|
149
|
+
| **HF avg (3 models · 10 cases · 156 checks)** | **34%** | **94%** | **+60 pts (+172%)** |
|
|
150
|
+
|
|
151
|
+
> Monotonic from smaller to larger: pass-rate with simplicio climbs **92% →
|
|
152
|
+
> 94% → 96%** as the model grows, while the raw-prompt baseline stays at
|
|
153
|
+
> **30–38%**. The 1.5B model gains the most (**+62 pts**) — the contract does
|
|
154
|
+
> the heaviest lifting where the model is weakest. Reproduce:
|
|
155
|
+
> `BENCH_BASE_URL=https://router.huggingface.co/v1 BENCH_API_KEY=<hf-token>
|
|
156
|
+
> BENCH_MODELS="local:Qwen/Qwen2.5-Coder-1.5B-Instruct,Qwen/Qwen2.5-Coder-3B-Instruct,Qwen/Qwen2.5-Coder-7B-Instruct"
|
|
157
|
+
> python3 bench/run_offline.py`.
|
|
158
|
+
|
|
159
|
+
Side-by-side delta vs the previously published numbers (same regex methodology,
|
|
160
|
+
all 17 README models re-measured):
|
|
161
|
+
[`bench/results_comparison.md`](bench/results_comparison.md) ·
|
|
162
|
+
[`bench/results_comparison.pdf`](bench/results_comparison.pdf). Headline on the
|
|
163
|
+
14 models with clean data: **with simplicio averaged 86% → 88% (+2 pts); without
|
|
164
|
+
simplicio 36% → 36% (+1 pt)** — the new run reproduces the published numbers
|
|
165
|
+
within noise. Three frontier models (Claude Opus 4.7, Qwen 3.7 Max, DeepSeek V4
|
|
166
|
+
Pro) show `n/a` for the new column: their OpenRouter calls hit account-level
|
|
167
|
+
HTTP 402 / provider failures on >50% of requests this round, so the sample is
|
|
168
|
+
too small to publish; their old numbers still stand.
|
|
169
|
+
|
|
170
|
+
#### Local offline — qwen2.5-coder on Ollama, M1 8 GB, run on 2026-05-27 (30 runs/side, 156 checks)
|
|
171
|
+
|
|
172
|
+
| Model | Without simplicio | With simplicio | Gain |
|
|
173
|
+
|---|---|---|---|
|
|
174
|
+
| **Qwen 2.5 Coder 7B** (`qwen2.5-coder:7b`) | 36% | **92%** | **+56 pts** |
|
|
175
|
+
| **Qwen 2.5 Coder 3B** (`qwen2.5-coder:3b`) | 34% | **82%** | **+48 pts** |
|
|
176
|
+
| **Qwen 2.5 Coder 1.5B** (`qwen2.5-coder:1.5b`) | 32% | **88%** | **+56 pts** |
|
|
177
|
+
| **Local avg (3 models · 10 cases · 156 checks)** | **34%** | **87%** | **+53 pts (+156%)** |
|
|
178
|
+
|
|
179
|
+
> **Zero API key, zero network.** Bench ran fully offline against
|
|
180
|
+
> `http://localhost:11434/v1` (Ollama's OpenAI-compatible endpoint). A
|
|
181
|
+
> 1.5B-param model running on a 4-year-old laptop reaches **88%** pass-rate
|
|
182
|
+
> with simplicio's contract — same hardware, same model, raw prompt = 32%.
|
|
183
|
+
> Reproduce: `BENCH_BASE_URL=http://localhost:11434/v1 BENCH_API_KEY=ollama
|
|
184
|
+
> BENCH_MODELS="qwen2.5-coder:7b" python3 bench/run_offline.py`.
|
|
63
185
|
|
|
64
186
|
#### Tiny models — sub-4B, run on 2026-05-26 (50 runs/side, 260 checks)
|
|
65
187
|
|
|
@@ -98,11 +220,12 @@ at least **+14 points** when wrapped in simplicio's 6-layer contract.
|
|
|
98
220
|
| **Qwen 2.5 7B** (`qwen/qwen-2.5-7b-instruct`) | 34% | **88%** | **+54 pts** |
|
|
99
221
|
| **Mid-tier avg (3 models · 10 cases · 156 checks)** | **35%** | **90%** | **+55 pts (+156%)** |
|
|
100
222
|
|
|
101
|
-
> **Across all
|
|
223
|
+
> **Across all 17 models tested across four runs**, the average gain is **+51
|
|
102
224
|
> points**. Smallest: **+14 pts** (Llama 3.2 1B — the contract still moves a
|
|
103
|
-
> 1B-param model). Largest: **+62 pts** (GPT-5.5). The contract helps
|
|
104
|
-
>
|
|
105
|
-
> of the six frontier models hit
|
|
225
|
+
> 1B-param model). Largest: **+62 pts** (GPT-5.5). The contract helps local
|
|
226
|
+
> Ollama models on a 4-year-old laptop, tiny sub-4B models, frontier reasoning
|
|
227
|
+
> models, and mid-tier 7B–12B alike — five of the six frontier models hit
|
|
228
|
+
> **100% pass-rate**.
|
|
106
229
|
|
|
107
230
|
### Output-quality signals (rate across all 60 frontier runs)
|
|
108
231
|
|
|
@@ -149,6 +272,26 @@ test JUDGE contract written as testable states
|
|
|
149
272
|
verify PROOF ran it — did it actually pass? loop-fix up to 3x
|
|
150
273
|
```
|
|
151
274
|
|
|
275
|
+
### Rich mapper integration
|
|
276
|
+
|
|
277
|
+
When `simplicio-mapper` has generated `.simplicio/project-map.json` and
|
|
278
|
+
`.simplicio/precedent-index.json`, `simplicio-cli` consumes them directly:
|
|
279
|
+
|
|
280
|
+
- exact target file metadata, roles, imports and exports
|
|
281
|
+
- entry points, test files, modules, entities and architecture signals
|
|
282
|
+
- recent changes and changed-file context
|
|
283
|
+
- precedent snippets ranked from `precedent-index.json`
|
|
284
|
+
|
|
285
|
+
If those artifacts are missing, the CLI falls back to the older target-file
|
|
286
|
+
inspection path, so existing projects keep working.
|
|
287
|
+
|
|
288
|
+
### Adaptive retry and observability
|
|
289
|
+
|
|
290
|
+
The retry loop now validates generated output before applying/testing it,
|
|
291
|
+
classifies failures, and sends targeted retry feedback. Bench and pipeline runs
|
|
292
|
+
can append lightweight JSONL records to `.simplicio/runs.jsonl` with prompt
|
|
293
|
+
variant, model/provider, estimated tokens, target, mode and failure class.
|
|
294
|
+
|
|
152
295
|
**The idea in one line: don't ask the model to guess — hand it the path.**
|
|
153
296
|
Each layer terminates one decision the model would otherwise hallucinate.
|
|
154
297
|
Relevant > complete — inject the *right* context, never *all* of it.
|
|
@@ -158,12 +301,109 @@ Relevant > complete — inject the *right* context, never *all* of it.
|
|
|
158
301
|
## Install
|
|
159
302
|
|
|
160
303
|
```bash
|
|
161
|
-
pip install simplicio-cli # from PyPI
|
|
304
|
+
pip install simplicio-cli # from PyPI (pulls simplicio-mapper + simplicio-prompt)
|
|
162
305
|
# or
|
|
163
306
|
pip install -e . # from this repo
|
|
164
307
|
```
|
|
165
308
|
|
|
166
|
-
|
|
309
|
+
The install ships **three Simplicio packages** that play distinct roles:
|
|
310
|
+
|
|
311
|
+
- **`simplicio-cli`** (this repo) — the 6-layer task contract + verify loop.
|
|
312
|
+
The default wrapper for one-shot code edits. *Headline: +31 pts vs raw
|
|
313
|
+
baseline on real PHPUnit (see Section 1).*
|
|
314
|
+
- **`simplicio-mapper`** — emits `.simplicio/project-map.json` and
|
|
315
|
+
`precedent-index.json` so the CLI can target the right file/precedent
|
|
316
|
+
without guessing.
|
|
317
|
+
- **`simplicio-prompt`** (≥1.7.0) — the Tuple-Space + Yool agent runtime
|
|
318
|
+
kernel (`kernel.subagent_runtime.SubagentRuntime`) for orchestrated work:
|
|
319
|
+
real parallel subagent fan-out on any OpenAI-compatible provider, with
|
|
320
|
+
bounded lane concurrency, a receipt cache, jittered backoff and a
|
|
321
|
+
circuit breaker. *On one-shot code tasks it's net-neutral and not the
|
|
322
|
+
right tool (use simplicio-cli for those); on orchestrated multi-step /
|
|
323
|
+
fan-out work it's the engine.* Our chosen fan-out default for this
|
|
324
|
+
project is **N=200** subagents — the level where harder tasks start to
|
|
325
|
+
recover from per-call noise (partial Qwen2.5-Coder-3B data:
|
|
326
|
+
`env_get_int` at N=64 → 0 PHPUnit passes of 64; at higher N some tasks
|
|
327
|
+
flip to passing). The fan-out benchmark
|
|
328
|
+
(`bench/run_fanout.py`) measures both real PHPUnit pass-rate and a
|
|
329
|
+
structural regex check on every subagent and surfaces the gap; full
|
|
330
|
+
ongoing numbers in [`bench/results_fanout.md`](bench/results_fanout.md) ·
|
|
331
|
+
[`bench/results_fanout.pdf`](bench/results_fanout.pdf).
|
|
332
|
+
|
|
333
|
+
Each is independently published on PyPI; ship them as a set so the CLI's
|
|
334
|
+
mapper-rich precedent ranking, contract-shaped prompts, and (when called
|
|
335
|
+
for) real subagent fan-out all work out of the box without extra setup.
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## How you use it — pick your path
|
|
340
|
+
|
|
341
|
+
simplicio-cli has **three distinct entry points**. Same engine, three front doors — pick the one that matches what you already pay for:
|
|
342
|
+
|
|
343
|
+
| You have | Path | LLM call goes through | Need API key? |
|
|
344
|
+
|---|---|---|---|
|
|
345
|
+
| **Claude Code** (Pro / Max / Team / API) | Skill + hook auto-installed in `~/.claude/` | Claude Code itself, using your logged-in session | **No** |
|
|
346
|
+
| **Claude Code OAuth or Codex CLI / ChatGPT Plus** | `simplicio task` with `SIMPLICIO_MODEL=claude-cli/<m>` or `codex-cli/<m>` | Shell-out to `claude -p` / `codex exec` (subprocess uses your existing login) | **No** |
|
|
347
|
+
| **API key** for any provider (Anthropic, OpenAI, OpenRouter, GLM, DeepSeek, Ollama…) | `simplicio task` standalone CLI | The provider SDK directly | **Yes** — set `SIMPLICIO_API_KEY` |
|
|
348
|
+
|
|
349
|
+
**Most users land on Path 1.** `pip install simplicio-cli` puts the binary on PATH; the first invocation auto-installs the skill + hook in `~/.claude/` (idempotent, opt-out via `SIMPLICIO_SKIP_AUTO_INIT=1`). From that moment, every code-edit prompt you type **inside Claude Code** is silently routed through simplicio's 6-layer contract — no extra config, no key, no cost beyond your existing Claude subscription.
|
|
350
|
+
|
|
351
|
+
**Path 2 — subscription shell-out (zero key).** If you have a Claude Pro/Max session (`claude login`) or a ChatGPT Plus + Codex CLI session (`codex login`) and want to drive simplicio from CI, scripts, or any context **outside** Claude Code, set `SIMPLICIO_MODEL=claude-cli/<model>` or `codex-cli/<model>`. simplicio spawns the CLI as a subprocess; the call rides your existing OAuth session — no API key required. A recursion guard (`SIMPLICIO_HOOK_GUARD=1`) is injected so the inner CLI does not re-fire simplicio's own hook.
|
|
352
|
+
|
|
353
|
+
**Path 3 is for environments without any logged-in CLI** — a remote server, a build runner, a notebook, a different LLM provider. You bring an API key (Anthropic, OpenRouter, OpenAI, GLM, DeepSeek, Ollama…), simplicio calls the provider directly.
|
|
354
|
+
|
|
355
|
+
### Path 1 example — inside Claude Code
|
|
356
|
+
|
|
357
|
+
After `pip install simplicio-cli && simplicio smoke` (which triggers auto-bootstrap), just type your task in Claude Code:
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
hide the Delete button for non-admins in src/app/screen/screen.component.html
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Claude Code sees the skill (semantic match) and the hook hint (`[SIMPLICIO_PROMPT_HINT]` on stderr — deterministic classifier). It runs simplicio's 6-layer contract under the hood. You see the diff + tests + verification — same as before, just dramatically more accurate.
|
|
364
|
+
|
|
365
|
+
### Path 2 example — subscription shell-out, zero key
|
|
366
|
+
|
|
367
|
+
You already pay for Claude Pro/Max or ChatGPT Plus + Codex CLI. simplicio
|
|
368
|
+
piggybacks on that login — no extra bill, no key to manage.
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
# Option A — Claude Code subscription (run `claude login` once)
|
|
372
|
+
export SIMPLICIO_MODEL=claude-cli/sonnet # or claude-cli/opus, claude-cli/default
|
|
373
|
+
unset SIMPLICIO_API_KEY # explicitly: no key needed
|
|
374
|
+
|
|
375
|
+
simplicio task "hide Delete button for non-admins" --stack angular \
|
|
376
|
+
--target src/app/screen/screen.component.html
|
|
377
|
+
|
|
378
|
+
# Option B — Codex CLI subscription (run `codex login` once)
|
|
379
|
+
export SIMPLICIO_MODEL=codex-cli/gpt-5 # or codex-cli/default
|
|
380
|
+
simplicio task "..." --stack angular --target ...
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
How it works: simplicio shells out to `claude -p "<prompt>"` (or `codex exec "<prompt>"`) as a subprocess, captures stdout, runs the test loop. The inner CLI authenticates via your existing OAuth session in `~/.claude/` or `~/.codex/`. simplicio sets `SIMPLICIO_HOOK_GUARD=1` in the subprocess env so the inner Claude Code session does **not** re-fire simplicio's own UserPromptSubmit hook (no infinite recursion).
|
|
384
|
+
|
|
385
|
+
### Path 3 example — standalone with API key
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
export SIMPLICIO_API_KEY=sk-or-v1-… # OpenRouter key
|
|
389
|
+
export SIMPLICIO_MODEL=anthropic/claude-opus-4
|
|
390
|
+
export SIMPLICIO_BASE_URL=https://openrouter.ai/api/v1
|
|
391
|
+
|
|
392
|
+
simplicio index --stack angular # one-time, builds embedding cache
|
|
393
|
+
simplicio task "hide Delete button for non-admins" \
|
|
394
|
+
--stack angular \
|
|
395
|
+
--target src/app/screen/screen.component.html \
|
|
396
|
+
--criteria "- no admin perm: button absent from DOM
|
|
397
|
+
- with admin perm: button present" \
|
|
398
|
+
--constraints "- don't touch save flow
|
|
399
|
+
- build passes"
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
Provider-agnostic — see [Configure](#configure--any-llm-nothing-hardcoded) for the full matrix.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
### Path 1 deep-dive — auto-activation in Claude Code
|
|
167
407
|
|
|
168
408
|
`pip install` puts `simplicio` on your PATH. To make Claude Code
|
|
169
409
|
**automatically** route code-edit tasks through simplicio, a skill + hook
|
|
@@ -239,8 +479,14 @@ user prompt. UserPromptSubmit is the right pre-hook for routing decisions.
|
|
|
239
479
|
| Preview without writing | `simplicio init --dry-run` |
|
|
240
480
|
| Skill-only (no hook) | Copy `.skills/simplicio-cli/SKILL.md` to `~/.claude/skills/simplicio-cli/SKILL.md` manually, skip `simplicio init` |
|
|
241
481
|
|
|
482
|
+
---
|
|
483
|
+
|
|
242
484
|
## Configure — any LLM, nothing hardcoded
|
|
243
485
|
|
|
486
|
+
> Applies to **Path 2** (standalone CLI). Path 1 users can skip this entire
|
|
487
|
+
> section — Claude Code handles the LLM call with the model and key already
|
|
488
|
+
> tied to your subscription.
|
|
489
|
+
|
|
244
490
|
| Provider | SIMPLICIO_MODEL | SIMPLICIO_BASE_URL |
|
|
245
491
|
|---|---|---|
|
|
246
492
|
| OpenRouter | `anthropic/claude-opus-4` | `https://openrouter.ai/api/v1` |
|
|
@@ -258,25 +504,53 @@ your `base_url` — so **any** OpenAI-like provider works without code changes.
|
|
|
258
504
|
simplicio smoke # prints provider config + one test call
|
|
259
505
|
```
|
|
260
506
|
|
|
261
|
-
|
|
507
|
+
### The pipeline (both paths)
|
|
262
508
|
|
|
263
|
-
|
|
264
|
-
# index once (caches embeddings; re-run after big changes)
|
|
265
|
-
simplicio index --stack angular
|
|
509
|
+
Whichever entry point you use, each task runs through the same engine:
|
|
266
510
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
511
|
+
```
|
|
512
|
+
precedent (from cache)
|
|
513
|
+
→ skill match
|
|
514
|
+
→ 6-layer prompt
|
|
515
|
+
→ LLM generates diff + test + Playwright
|
|
516
|
+
→ apply diff
|
|
517
|
+
→ run SIMPLICIO_TEST_CMD
|
|
518
|
+
→ pass? done : send the error back → fix → retry (up to 3x)
|
|
275
519
|
```
|
|
276
520
|
|
|
277
|
-
|
|
278
|
-
(
|
|
279
|
-
|
|
521
|
+
The 6-layer contract is what moves pass-rate from 41% to 99% on frontier
|
|
522
|
+
models (see [the numbers](#why-it-works--the-numbers) above). The retry loop
|
|
523
|
+
is what catches the remaining edge cases — measured separately in the
|
|
524
|
+
[4-quadrant bench](#4-quadrant-bench--agent--simplicio-matrix).
|
|
525
|
+
|
|
526
|
+
### Common questions
|
|
527
|
+
|
|
528
|
+
**"I have a Claude Pro subscription but no API key — does this work?"** Yes,
|
|
529
|
+
on Path 1. Install simplicio-cli, open Claude Code, type your task as normal.
|
|
530
|
+
Claude Code makes the LLM call with your subscription; simplicio shapes the
|
|
531
|
+
prompt. No key needed.
|
|
532
|
+
|
|
533
|
+
**"I want to run it in CI / a script / outside Claude Code."** Path 2. Get an
|
|
534
|
+
API key from any of the providers above (OpenRouter is the cheapest way to
|
|
535
|
+
try multiple models behind one key), set `SIMPLICIO_API_KEY` +
|
|
536
|
+
`SIMPLICIO_MODEL` + optional `SIMPLICIO_BASE_URL`, run `simplicio task ...`.
|
|
537
|
+
|
|
538
|
+
**"I have Codex CLI / ChatGPT Plus and don't want to pay for an API key."**
|
|
539
|
+
Not auto-wired yet. Workarounds: (a) get an OpenRouter key (~$2 covers
|
|
540
|
+
thousands of tasks at small-model rates), (b) wait for the shell-out provider
|
|
541
|
+
that pipes through `claude -p` / `codex exec` using your subscription —
|
|
542
|
+
tracked, not shipped.
|
|
543
|
+
|
|
544
|
+
**"Will Claude Code use simplicio for *every* prompt now?"** No. The skill
|
|
545
|
+
only triggers on prompts that look like code edits (the description is
|
|
546
|
+
specific). The hook fires `simplicio detect` on every prompt but only emits
|
|
547
|
+
a hint when the deterministic classifier scores ≥ 3 (verbs + file extensions
|
|
548
|
+
+ code nouns − read-only cues). "What does this function do?" gets no
|
|
549
|
+
nudge. "Add a delete confirmation to UserList.tsx" does.
|
|
550
|
+
|
|
551
|
+
**"How do I turn it off?"** See [Disable / re-enable](#disable--re-enable)
|
|
552
|
+
above. Two ways: env var (`SIMPLICIO_SKIP_AUTO_INIT=1` before first call) or
|
|
553
|
+
delete the hook entry from `~/.claude/settings.json`.
|
|
280
554
|
|
|
281
555
|
---
|
|
282
556
|
|