simplicio-loop 1.0.5__tar.gz → 3.4.0__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.
Files changed (51) hide show
  1. {simplicio_loop-1.0.5/simplicio_loop.egg-info → simplicio_loop-3.4.0}/PKG-INFO +17 -1
  2. simplicio_loop-3.4.0/README.md +537 -0
  3. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/pyproject.toml +15 -1
  4. simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/README.md +99 -0
  5. simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/action_gate.py +275 -0
  6. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/hooks.claude.json +1 -0
  7. simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/simplicio_dashboard.py +870 -0
  8. simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/simplicio_watch.py +83 -0
  9. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-loop/SKILL.md +158 -6
  10. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/SKILL.md +55 -11
  11. simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/agentsview-adapter.md +210 -0
  12. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/extension-points.md +5 -4
  13. simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/headroom-adapter.md +246 -0
  14. simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/lmcache-adapter.md +632 -0
  15. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/orchestration.md +10 -1
  16. simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-capture.md +124 -0
  17. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-economy.md +56 -0
  18. simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/understand-anything-adapter.md +591 -0
  19. simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/video-evidence.md +111 -0
  20. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0/simplicio_loop.egg-info}/PKG-INFO +17 -1
  21. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/SOURCES.txt +15 -1
  22. simplicio_loop-3.4.0/simplicio_loop.egg-info/requires.txt +22 -0
  23. simplicio_loop-3.4.0/tests/test_action_gate.py +108 -0
  24. simplicio_loop-3.4.0/tests/test_loop_e2e.py +110 -0
  25. simplicio_loop-3.4.0/tests/test_worker_selftests.py +48 -0
  26. simplicio_loop-3.4.0/tests/test_worker_smoke.py +64 -0
  27. simplicio_loop-1.0.5/README.md +0 -358
  28. simplicio_loop-1.0.5/simplicio_loop.egg-info/requires.txt +0 -2
  29. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/LICENSE +0 -0
  30. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/MANIFEST.in +0 -0
  31. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/PYPI.md +0 -0
  32. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/setup.cfg +0 -0
  33. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/__init__.py +0 -0
  34. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/hooks.json +0 -0
  35. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/learn_stop.py +0 -0
  36. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/loop_capture.py +0 -0
  37. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/loop_stop.py +0 -0
  38. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/orient_clamp.py +0 -0
  39. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/orient_rewrite.py +0 -0
  40. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-compress/SKILL.md +0 -0
  41. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-learn/SKILL.md +0 -0
  42. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-orient/SKILL.md +0 -0
  43. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-review/SKILL.md +0 -0
  44. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/azure-devops-adapter.md +0 -0
  45. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/quality-safety-delivery.md +0 -0
  46. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/standing-loop-247.md +0 -0
  47. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/web-evidence.md +0 -0
  48. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/cli.py +0 -0
  49. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/dependency_links.txt +0 -0
  50. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/entry_points.txt +0 -0
  51. {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simplicio-loop
3
- Version: 1.0.5
3
+ Version: 3.4.0
4
4
  Summary: The Universal Looping AI Orchestrator — a runtime-agnostic super-plugin (6 skills) that drains any queue of work end-to-end on any LLM/runtime.
5
5
  Author-email: Wesley Simplicio <wesleybob4@gmail.com>
6
6
  License: MIT
@@ -21,6 +21,22 @@ Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: simplicio-mapper
23
23
  Requires-Dist: simplicio-cli
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7; extra == "dev"
26
+ Provides-Extra: ml
27
+ Requires-Dist: model2vec>=0.3; extra == "ml"
28
+ Requires-Dist: numpy>=1.21; extra == "ml"
29
+ Provides-Extra: onnx
30
+ Requires-Dist: onnxruntime>=1.16; extra == "onnx"
31
+ Requires-Dist: huggingface_hub>=0.20; extra == "onnx"
32
+ Requires-Dist: tokenizers>=0.15; extra == "onnx"
33
+ Requires-Dist: numpy>=1.21; extra == "onnx"
34
+ Requires-Dist: pillow>=9; extra == "onnx"
35
+ Provides-Extra: kompress
36
+ Requires-Dist: onnxruntime>=1.16; extra == "kompress"
37
+ Requires-Dist: huggingface_hub>=0.20; extra == "kompress"
38
+ Requires-Dist: tokenizers>=0.15; extra == "kompress"
39
+ Requires-Dist: numpy>=1.21; extra == "kompress"
24
40
  Dynamic: license-file
25
41
 
26
42
  # simplicio-loop
@@ -0,0 +1,537 @@
1
+ # 🔁 simplicio-tasks — The Universal Looping AI Orchestrator
2
+
3
+ <p align="center">
4
+ <img src="assets/simplicio-loop-hero.jpg" alt="simplicio-loop" width="920" />
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://github.com/wesleysimplicio/simplicio-loop/stargazers"><img src="https://img.shields.io/github/stars/wesleysimplicio/simplicio-loop?style=social" alt="Stars"></a>
9
+ <a href="#-the-11-skills--accelerators"><img src="https://img.shields.io/badge/skills-11-7C3AED" alt="11 skills"></a>
10
+ <a href="#-source-adapters"><img src="https://img.shields.io/badge/source%20adapters-5-00E08A" alt="5 source adapters"></a>
11
+ <a href="#-11-runtimes-one-protocol"><img src="https://img.shields.io/badge/runtimes-11-2563EB" alt="11 runtimes"></a>
12
+ <a href="#-the-44-extension-points"><img src="https://img.shields.io/badge/extension%20points-44-00E08A" alt="44 extension points"></a>
13
+ <a href="#-token-economy"><img src="https://img.shields.io/badge/tokens-up%20to%2096%25%20fewer-green" alt="Up to 96% fewer tokens"></a>
14
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License"></a>
15
+ </p>
16
+
17
+ <p align="center">
18
+ <a href="#-tldr">TL;DR</a> ·
19
+ <a href="#-the-11-skills--accelerators">11 Skills</a> ·
20
+ <a href="#-source-adapters">Source Adapters</a> ·
21
+ <a href="#-11-runtimes-one-protocol">11 Runtimes</a> ·
22
+ <a href="#-the-loop">The Loop</a> ·
23
+ <a href="#-token-economy">Token Economy</a> ·
24
+ <a href="#-token-economy">Capture Engine</a> ·
25
+ <a href="#-install--use">Install</a>
26
+ </p>
27
+
28
+ <p align="center">
29
+ <strong>🌍 Languages:</strong><br>
30
+ <a href="README.md">🇬🇧 English</a> |
31
+ <a href="READMEs/README.pt-BR.md">🇧🇷 Português</a> |
32
+ <a href="READMEs/README.es-ES.md">🇪🇸 Español</a> |
33
+ <a href="READMEs/README.fr-FR.md">🇫🇷 Français</a> |
34
+ <a href="READMEs/README.de-DE.md">🇩🇪 Deutsch</a> |
35
+ <a href="READMEs/README.it-IT.md">🇮🇹 Italiano</a> |
36
+ <a href="READMEs/README.ja-JP.md">🇯🇵 日本語</a> |
37
+ <a href="READMEs/README.ko-KR.md">🇰🇷 한국어</a> |
38
+ <a href="READMEs/README.zh-CN.md">🇨🇳 简体中文</a> |
39
+ <a href="READMEs/README.ru-RU.md">🇷🇺 Русский</a> |
40
+ <a href="READMEs/README.pl-PL.md">🇵🇱 Polski</a> |
41
+ <a href="READMEs/README.tr-TR.md">🇹🇷 Türkçe</a> |
42
+ <a href="READMEs/README.nl-NL.md">🇳🇱 Nederlands</a> |
43
+ <a href="READMEs/README.hi-IN.md">🇮🇳 हिन्दी</a> |
44
+ <a href="READMEs/README.ar-SA.md">🇸🇦 العربية</a>
45
+ </p>
46
+
47
+ ---
48
+
49
+ ## ⚡ TL;DR
50
+
51
+ **simplicio-tasks** is a runtime-agnostic **super-plugin** — one autonomous looping
52
+ orchestrator (invoked as **`/simplicio-tasks`**) plus **five satellite skills** — that turns any
53
+ strong LLM (Claude, Codex, Copilot, Gemini, Cursor, local models) into a self-driving worker. You
54
+ point it at a body of work — *"finish all the open issues"*, *"clear the CI queue"*, *"drain the Jira board"* — and it
55
+ runs the whole lifecycle on its own:
56
+
57
+ > **discover → understand → decide → act → verify → correct → record → repeat**
58
+
59
+ It discovers work from any source (GitHub Issues, Jira, Azure DevOps, agentsview sessions, and
60
+ more), dedups, auto-scales an agent fleet to your machine, implements each item through a quality
61
+ loop that **runs the code (not just compiles it)**, opens PRs, resolves CI/review feedback, merges,
62
+ and keeps watching **24/7** for new work — all behind safety gates and a hard cost kill-switch.
63
+
64
+ ```text
65
+ /simplicio-tasks termine as issues abertas
66
+ → identity + pre-flight (kill-switch, auth, watcher)
67
+ → discover 50 issues · dedup · build dependency DAG
68
+ → autoscale fleet = 14 · pipeline implement→review→merge
69
+ → each item: read body+ACs → orient code → plan → edit → run → verify → PR
70
+ → merge · close with evidence · rollback if main breaks
71
+ → keep looping every ~2 min until the queue is dry (evidence-gated, never a false "done")
72
+ ```
73
+
74
+ Three things make it different: it is a **super-plugin of focused skills**, it runs the **same
75
+ protocol on 11 runtimes**, and it does all of this with **aggressive, honest token economy**.
76
+
77
+ ---
78
+
79
+ ## 📘 Official capability record (v3.4.0)
80
+
81
+ The complete, official roster of what `simplicio-tasks` ships — every capability below is **real,
82
+ runnable, and tested** (`python3 scripts/check.py`: claims-audit 4/4 + 24 tests). Each links to its
83
+ deep section and its worker.
84
+
85
+ | Capability | What it does | Proof / worker | Details |
86
+ |---|---|---|---|
87
+ | 🎬 **Video evidence** (`video_evidence`) | Renders a **deterministic MP4** demo of a screen/feature with [hyperframes](https://github.com/heygen-com/hyperframes) — fulfils `/simplicio-tasks faça um vídeo demonstrativo da tela X` and doubles as CI-reproducible proof a UI change works | `scripts/video_evidence.py` · BLOCKED (never fake-pass) without Node 22+/FFmpeg | [§ Video evidence](#-video-evidence--demo-videos-via-hyperframes) |
88
+ | 🧠 **Attempt memory + stall detector** | A durable run-journal (`.orchestrator/loop/journal.jsonl`) + a stall detector so the loop **changes strategy instead of oscillating**; incremental triage (`since`) reads only the delta each turn | `scripts/loop_journal.py` · `selftest` 9/9 | [§ Anti-oscillation](#-attempt-memory--stall-detector-anti-oscillation) |
89
+ | 🔒 **Fail-closed safety gate** (`action_gate`) | A `PreToolUse`/git-pre-push hook that **mechanically blocks** force-push, history rewrite, mass-delete, destructive DDL, infra teardown, and secret-laden commits/pushes — Step 5 made executable, not prose | `hooks/action_gate.py` · `selftest` 15/15 | [§ Safety](#-safety-non-negotiable) |
90
+ | 🔬 **Local verification** | A test suite (worker selftests + an **e2e of the loop driver** proving evidence-gated exit) + a **claims-audit** (referenced scripts exist · counts consistent · `_bundle ≡ source`) — all local, **no paid CI** | `scripts/check.py` · `scripts/claims_audit.py` · `tests/` | [§ Tests & local checks](#-tests--local-checks-no-paid-ci) |
91
+ | ✅ **Honest savings** | The savings line is now **evidence-gated, not mandatory** — a number is shown only with a measured receipt (clamp/signatures/cache/`deterministic_edit`/ledger); never fabricated | token-economy contract | [§ Token economy](#-token-economy) |
92
+ | 💳 **Open-core billing** | A deterministic, privacy-preserving meter→invoice over the metering the loop already produces (kill-switch + `savings_ledger`) — three tiers (seat/run/metered) | `scripts/billing_aggregator.py` · `selftest` 11/11 | [PRICING.md](PRICING.md) |
93
+
94
+ Two loop **modes** make termination explicit: **converge** (a single hard task — ends on the
95
+ evidence-gated `<promise>` or a stall escalation) vs **drain** (a queue — ends when the source
96
+ re-query stays empty K rounds). Both still obey the universal exits (promise+evidence,
97
+ `max_iterations`, budget, STOP).
98
+
99
+ > Loop scoring across this line of work: **7.5** (strong design, unproven) → **9** (attempt memory +
100
+ > anti-oscillation) → **9.5** (reproducible local proof) → **~10** (enforced safety + complete loop
101
+ > semantics). The verification infra now catches the project's own regressions as it grows.
102
+
103
+ ---
104
+
105
+ ## 🧠 The 11 skills & accelerators
106
+
107
+ The orchestrator core + five satellites + five accelerators/integrations. Each satellite is
108
+ **optional** — when loaded, the orchestrator delegates to it (richer + cheaper); when absent, the
109
+ inline protocol covers 100%. Accelerators are **auto-detected** — present = used, absent = LLM
110
+ fallback.
111
+
112
+ | # | Capability | Absorbs | What it does | Token impact |
113
+ |---|---|---|---|---|
114
+ | 1 | 🔁 **simplicio-tasks** | — | The orchestrator loop: 44 extension points, dual-path router, self-audit convergence | Core |
115
+ | 2 | ♾️ **simplicio-loop** | [ralph-loop](https://github.com/cursor/plugins/tree/main/ralph-loop) | Hardened Ralph loop: evidence-gated `<promise>` exit, max_iterations cap | Loop drive |
116
+ | 3 | 🧱 **simplicio-orient** | [rtk](https://github.com/rtk-ai/rtk) + [caveman](https://github.com/JuliusBrussee/caveman) | Terminal-first execution, output-reduction catalog, tee-cache, signatures-read | L0 deterministic |
117
+ | 4 | 🔥 **simplicio-review** | [thermos](https://github.com/cursor/plugins/tree/main/thermos) | Parallel adversarial review on distinct rubrics → deduped verdict | Quality gate |
118
+ | 5 | 🗜️ **simplicio-compress** | [caveman](https://github.com/JuliusBrussee/caveman) | Output + memory compression, fail-closed `transform_guard` | 40-60% fewer |
119
+ | 6 | 🎓 **simplicio-learn** | [teaching](https://github.com/cursor/plugins/tree/main/teaching) | Post-run retrospective → durable, deduped lessons in memory | Smarter each run |
120
+ | 7 | 🧭 **Understand Anything** | [Egonex-AI](https://github.com/Egonex-AI/Understand-Anything) | Knowledge graph orient: semantic search, guided tours, dependency graph | **L0 zero tokens** |
121
+ | 8 | 📊 **agentsview** | [kenn-io](https://github.com/kenn-io/agentsview) | Session analytics, cost tracking, stalled-session discovery | **L1** SQL only |
122
+ | 9 | ⚡ **LMCache** | [LMCache](https://github.com/LMCache/LMCache) | KV cache between loop turns — 40-70% TTFT reduction on local models | GPU time ↓ |
123
+ | 10 | 🗜️ **Simplicio capture engine** | `engine/simplicio_engine.py` (native, stdlib-only; savings-schema compatible with the OSS [headroom](https://github.com/headroomlabs-ai/headroom) project) | Transparent capture proxy: forwards to the real provider, measures + deterministically compresses, writes `proxy_savings.json` | **deterministic** |
124
+ | 11 | 🎬 **video_evidence (hyperframes)** | [hyperframes](https://github.com/heygen-com/hyperframes) | Renders a **deterministic MP4** demo video of a screen/feature — fulfils `/simplicio-tasks faça um vídeo demonstrativo da tela X` AND doubles as CI-reproducible proof a UI change works | Evidence producer |
125
+
126
+ Each skill lives under [`.claude/skills/`](.claude/skills); each accelerator has a reference doc
127
+ under `.claude/skills/simplicio-tasks/references/` (the video producer:
128
+ [`video-evidence.md`](.claude/skills/simplicio-tasks/references/video-evidence.md), worker
129
+ [`scripts/video_evidence.py`](scripts/video_evidence.py)).
130
+
131
+ ---
132
+
133
+ ## 📡 Source adapters
134
+
135
+ The orchestrator discovers work from any source via pluggable adapters. Each exposes six verbs:
136
+ `list_ready`, `get_details`, `claim`, `update_status`, `attach_evidence`, `close`.
137
+
138
+ | Source | Adapter | Purpose |
139
+ |---|---|---|
140
+ | GitHub Issues/PRs | `gh` CLI (native) | Primary work-item source |
141
+ | Jira / Asana / ClickUp / Linear / Notion | host connector | Board/project management |
142
+ | Trello / Azure DevOps | `az boards` adapter | Azure work tracking |
143
+ | **agentsview sessions** | `scripts/agentsview_adapter.py` | Stalled session recovery + cost observability |
144
+ | Local files / CI queue | filesystem / CI API | Internal work tracking |
145
+
146
+ See each adapter's reference doc under `.claude/skills/simplicio-tasks/references/`.
147
+
148
+ |---
149
+
150
+ ## 🌐 11 runtimes, one protocol
151
+
152
+ One universal skill core + one set of hooks drives every runtime. An adapter is thin: it tells a
153
+ runtime *where to load the skills*, *how to arm the loop*, and *how to bind native speed*. **The
154
+ skill names no runtime; the runtime detects the skill.**
155
+
156
+ | Runtime | Skill load | Loop drive | Native bind |
157
+ |---|---|---|---|
158
+ | **Claude Code** | `.claude/skills/` + plugin | `Stop` hook | MCP |
159
+ | **Codex** | `AGENTS.md` | self-paced | MCP / adapter |
160
+ | **VS Code (Copilot)** | `copilot-instructions.md` | tasks | MCP |
161
+ | **Cursor** | `.cursor-plugin/` | `stop`+`afterAgentResponse` | MCP / rules |
162
+ | **Antigravity** | rules / `AGENTS.md` | self-paced | MCP |
163
+ | **Kiro** | `.kiro/steering/` | specs | MCP |
164
+ | **OpenCode** | `AGENTS.md` | self-paced | MCP |
165
+ | **Gemini** | `GEMINI.md` | self-paced | MCP / adapter |
166
+ | **Aider** | `CONVENTIONS.md` | self-paced | — (LLM fallback) |
167
+ | **Hermes** | native recall | native loop | **native** |
168
+ | **OpenClaw** | plugin SDK | native scheduler | **native** |
169
+
170
+ The promise: **same protocol, same gates, same safety on all 11 — only the speed differs.**
171
+ `orient_clamp.py` (token economy) works on every runtime with zero wiring. See
172
+ [`adapters/MATRIX.md`](adapters/MATRIX.md).
173
+
174
+ ---
175
+
176
+ ## 🗺️ The full flow — from demand to delivery
177
+
178
+ Every layer the orchestrator acts on, in order — from reading the demand (issues, tasks, assigns)
179
+ to delivering merged, evidenced work, then looping 24/7 for more.
180
+
181
+ ```mermaid
182
+ flowchart TD
183
+ subgraph SRC["1 · Demand sources (any adapter)"]
184
+ direction LR
185
+ S1["GitHub Issues / PRs / CI"]
186
+ S2["Jira · Azure DevOps · Linear · ClickUp · Notion · agentsview · Understand Anything (orient)"]
187
+ S3["Assigns · TODO/FIXME · CVE · local files · LMCache (inference accelerator)"]
188
+ end
189
+ SRC --> PF
190
+ subgraph PF["2 · Pre-flight gates"]
191
+ direction LR
192
+ P1["cost kill-switch budget · agentsview cost check"]
193
+ P2["source auth + scopes"]
194
+ P3["arm 24/7 watcher"]
195
+ end
196
+ PF --> DISC
197
+ subgraph DISC["3 · Discover + normalize"]
198
+ direction LR
199
+ D1["source_adapter: list metadata only"]
200
+ D2["normalize to canonical schema"]
201
+ D3["dedup id+title+fingerprint+branch/PR"]
202
+ D4["dependency DAG"]
203
+ end
204
+ DISC --> INTK
205
+ subgraph INTK["4 · Deep intake (per item)"]
206
+ direction LR
207
+ I1["body + ALL comments"]
208
+ I2["extract acceptance criteria"]
209
+ I3["orient code · signatures-only reads or Understand Anything knowledge graph"]
210
+ I4["plan + AC checklist + complexity"]
211
+ end
212
+ INTK --> RT{"5 · Route"}
213
+ RT -->|"small and every item complexity at most 3"| FAST["Fast-path: solo, one targeted test"]
214
+ RT -->|"large queue or any medium+"| POOL
215
+ subgraph POOL["6 · Continuous worker pool (autoscaled, conflict-aware)"]
216
+ direction LR
217
+ W1["claim · branch · worktree if overlap"]
218
+ W2["deterministic_edit"]
219
+ W3["quality loop: edit-lint-test-fix"]
220
+ end
221
+ FAST --> QG
222
+ POOL --> QG
223
+ subgraph QG["7 · Quality gates"]
224
+ direction LR
225
+ Q1["AC gate = real DoD"]
226
+ Q2["WORKS not just compiles · web_verify (Playwright) · video_evidence (hyperframes MP4)"]
227
+ Q3["adversarial review · thermos rubrics"]
228
+ end
229
+ QG --> SG
230
+ subgraph SG["8 · Safety gates (non-negotiable)"]
231
+ direction LR
232
+ G1["secret-scan"]
233
+ G2["irreversible-op human gate"]
234
+ G3["4-state verdict · attestation"]
235
+ end
236
+ SG --> DEL
237
+ subgraph DEL["9 · Deliver"]
238
+ direction LR
239
+ L1["commit · push · Draft PR"]
240
+ L2["close in-source + evidence"]
241
+ L3["verify reality, not self-report"]
242
+ end
243
+ DEL --> FB
244
+ subgraph FB["10 · Feedback loop to merge-ready"]
245
+ direction LR
246
+ F1["CI fail -> fix root cause"]
247
+ F2["review comments -> adjust"]
248
+ F3["branch behind main -> additive rebase"]
249
+ end
250
+ FB -->|"merged and closed"| DONE(["done + evidence + measured savings (only if a receipt exists)"])
251
+ WATCH["11 · 24/7 watcher · simplicio-loop evidence-gated promise · max-iterations cap · cost kill-switch · LMCache KV cache warm"]
252
+ FB -. "poll new work / comments / checks" .-> WATCH
253
+ DONE -. "idle until new work" .-> WATCH
254
+ WATCH -. "re-feed the goal" .-> DISC
255
+ ```
256
+
257
+ ---
258
+
259
+ ## 🔁 The loop
260
+
261
+ The **Evidence-Gated Loop** is the core mechanism. It re-feeds the same goal each turn so the
262
+ agent sees its own prior work. Exit is ONLY via:
263
+
264
+ 1. **Evidence-gated `<promise>`** — the turn that emits the promise MUST also carry concrete
265
+ proof (passing test, merged PR, closed-item re-query). A promise with no evidence = ignored.
266
+ 2. **`max_iterations` cap** — hard safety backstop
267
+ 3. **Budget kill-switch** — `daily_usd_ceiling` halts the loop when spent
268
+ 4. **STOP signal** — `.orchestrator/STOP` or channel command
269
+
270
+ Between turns, LMCache (when available) caches the KV state so re-feed costs near-zero prefill.
271
+
272
+ ### 🧠 Attempt memory + stall detector (anti-oscillation)
273
+
274
+ A re-feed loop that remembers nothing oscillates — try X, fail, try X again — until the cap burns.
275
+ simplicio-loop keeps a **durable run-journal** (`.orchestrator/loop/journal.jsonl`, append-only:
276
+ `iteration · action · hypothesis · gate · error-fingerprint`) and a **stall detector**
277
+ ([`scripts/loop_journal.py`](scripts/loop_journal.py), deterministic + model-free):
278
+
279
+ - **Error fingerprint** — the failing gate output is reduced to a stable hash with line numbers,
280
+ paths, hex/uuids, timestamps and durations normalized away, so the *same* bug is recognized
281
+ across turns even when the incidental text differs.
282
+ - **Stall = K identical-fingerprint failures in a row** (default K=3). A changing fingerprint means
283
+ the loop is moving (PROGRESS); the same one K times means it is spinning (STALLED).
284
+ - On STALLED the loop does **not** re-feed the same goal — it names the **dead-end actions** to
285
+ avoid, then **switches strategy** or **escalates to the human gate** with the fingerprint.
286
+ - `loop_journal.py resume` is read at the top of every turn, so a fresh process continues without
287
+ re-deriving prior attempts (real resume) and never retries a known dead-end.
288
+
289
+ ```bash
290
+ loop_journal.py resume # what was tried + dead-ends to avoid
291
+ loop_journal.py record --iteration N --action "…" --gate fail --gate-output test.log
292
+ loop_journal.py stall --k 3 --exit-code # PROGRESS → re-feed · STALLED → switch/escalate
293
+ ```
294
+
295
+ ---
296
+
297
+ ## 🎬 Video evidence — demo videos via hyperframes
298
+
299
+ The loop can **create demonstration videos** of a screen/feature on request, and reuse that video
300
+ as proof a change works. The producer is [**hyperframes**](https://github.com/heygen-com/hyperframes)
301
+ (by HeyGen) — it renders HTML/CSS/media compositions to a **deterministic MP4** ("same input, same
302
+ frames, same output"), so the demo is a CI-reproducible artifact, not a throwaway recording. No API
303
+ keys; local render via headless Chrome + FFmpeg (Node 22+).
304
+
305
+ Two ways it fires — both via the `video_evidence` extension point (worker
306
+ [`scripts/video_evidence.py`](scripts/video_evidence.py), contract
307
+ [`references/video-evidence.md`](.claude/skills/simplicio-tasks/references/video-evidence.md)):
308
+
309
+ 1. **On request — the video IS the deliverable.** Ask for it directly and the orchestrator routes
310
+ the work-item to the hyperframes producer:
311
+
312
+ ```text
313
+ /simplicio-tasks faça um vídeo demonstrativo da tela de login do sistema
314
+ → detect: video-creation request → drive the screen with web_verify (per-step screenshots)
315
+ → scaffold a hyperframes composition → npx hyperframes render → deterministic MP4
316
+ → attach the MP4 to the PR as evidence + close with the link
317
+ ```
318
+
319
+ 2. **As proof — the video backs a code change.** After a UI change, the same MP4 walkthrough is the
320
+ strongest "works, not just compiles" receipt (Step 4b) and a valid evidence-gated `<promise>`
321
+ for the loop — a video that never rendered yields **BLOCKED**, never a fake pass.
322
+
323
+ The two evidence producers chain: `web_verify` (Playwright) captures the per-step screenshots,
324
+ `video_evidence` (hyperframes) assembles them into a captioned, deterministic MP4 walkthrough.
325
+ Evidence is always a **file path + boolean verdict** — never video bytes in context (token economy).
326
+
327
+ ```bash
328
+ # one-shot, outside the loop
329
+ python3 scripts/video_evidence.py detect --goal "grave um vídeo da tela de checkout"
330
+ python3 scripts/video_evidence.py verify --name checkout-demo \
331
+ --frames .orchestrator/tee/web --title "Checkout" --issue 42 [--upload --pr 42]
332
+ ```
333
+
334
+ ---
335
+
336
+ ## 📊 Token economy
337
+
338
+ | Technique | Savings |
339
+ |---|---|
340
+ | `deterministic_edit` (L0) | 100% of edit tokens (file written mechanically, never by LLM) |
341
+ | Terminal-first execution | Facts from shell, not LLM hallucination |
342
+ | Output-reduction catalog | Caps per command type (`CAP_ERRORS=20`, `CAP_WARNINGS=10`, `CAP_LIST=20`) — `orient_clamp.py` |
343
+ | Tee+CCR cache on failure | Never re-run a failed command — read the cached output |
344
+ | Signatures-only reads | `simplicio signatures <file>` — 870-line file → 65 lines (**93% saved**), bodies stripped |
345
+ | `simplicio-compress` | Terse prose + one-time memory compaction |
346
+ | `orient_clamp.py` | Clamp + tee on every shell command, zero wiring |
347
+ | Native response cache | repeated deterministic (temp=0) request → served from cache, skips the LLM call (**100% on hit**) — `simplicio cache`, on by default (`SIMPLICIO_CACHE=0` to disable) |
348
+ | Simplicio capture proxy + MCP | 60-95% fewer tokens on tool outputs via a transparent compression daemon |
349
+
350
+ Savings only count on a verified-correct outcome. Baseline = the cheapest sensible non-orchestrated
351
+ path to the same result. **Savings reporting is evidence-gated, not mandatory:** a savings figure is
352
+ shown only when a turn actually ran an economy-producing command and the number traces to a
353
+ measured receipt (clamp tee, signatures-read, cache hit, `deterministic_edit`, `savings_ledger`).
354
+ No measured economy → no savings line; the orchestrator never fabricates a baseline or a percentage.
355
+ See `references/token-economy.md`.
356
+
357
+ ### 🔎 Running `simplicio-tasks`: economy vs measurement (per runtime)
358
+
359
+ Two different things happen when you call **`simplicio-tasks`**, and they behave differently per runtime:
360
+
361
+ - **Economy** — compression, output clamps, signatures-only reads, `deterministic_edit` — applies **every
362
+ time the skill runs and loads `simplicio-orient` / `simplicio-compress`, on any runtime.** It is the
363
+ skill's behavior plus the hooks (strongest where hooks exist: `orient_clamp.py` auto-clamps on Claude and
364
+ Cursor; elsewhere it is instruction-driven).
365
+ - **Measurement** — the Token Monitor's live numbers — only counts traffic that flows **through the
366
+ capture proxy.**
367
+
368
+ | Runtime | Economy (skill) | Measurement (monitor) |
369
+ |---|---|---|
370
+ | **Hermes** | ✓ | ✓ **automatic** — already routed through the proxy (`base_url → :8788`) |
371
+ | **Claude** | ✓ (skill + hooks) | ✗ by default — Claude talks to `api.anthropic.com` directly; measured only once routed (`simplicio wrap claude`, or `ANTHROPIC_BASE_URL → http://127.0.0.1:8788`) |
372
+ | **Codex** | ✓ (skill) | ✗ by default — `simplicio init codex` adds the MCP tools but does not route LLM traffic; measured with `simplicio wrap codex` or an OpenAI base-url pointing at the proxy |
373
+
374
+ So: the **savings happen on every runtime**; the **monitor tallies them automatically on Hermes**, and on
375
+ Claude/Codex after a **one-time routing step** (`simplicio wrap …` / base-url → `:8788`). Without routing,
376
+ the economy still applies — the monitor just won't count those tokens. `scripts/simplicio-economy.sh wire`
377
+ does this routing for OpenAI-compatible clients at install time.
378
+
379
+ ### 📈 Simplicio Token Monitor
380
+
381
+ A live, always-on view of the savings:
382
+
383
+ - **Web dashboard** — `http://127.0.0.1:9090` — real-time token chart, savings gauge, the LLMs/runtimes
384
+ and **141/144 providers (98%)** we intercept, and a live proxy log.
385
+ - **Menu-bar / tray widget** — live tokens saved in the system tray (macOS rumps · Windows/Linux pystray).
386
+ - **One module** — `scripts/simplicio-economy.sh {status|up|wire}` brings up the capture proxy + monitor +
387
+ tray + the `simplicio-dev-cli` deterministic operator and reports the whole stack.
388
+
389
+ Install registers all three as auto-start services (macOS launchd · Linux systemd · Windows Startup) via
390
+ `scripts/setup_simplicio.sh`, or the cross-platform `python3 scripts/install_services.py install`. After
391
+ install the monitor + capture run **without invoking the loop** — see `references/token-capture.md`.
392
+
393
+ ### 🛠️ The capture engine — one native module, every command
394
+
395
+ [`engine/simplicio_engine.py`](engine/simplicio_engine.py) is the native Simplicio capture engine
396
+ (stdlib-only, fail-open) — a **full reimplementation of the upstream
397
+ [headroom](https://github.com/headroomlabs-ai/headroom) surface with no external dependency**. Run any
398
+ command via the [`scripts/simplicio-engine`](scripts/simplicio-engine) wrapper (e.g. `simplicio-engine doctor`):
399
+
400
+ | Command | What it does |
401
+ |---|---|
402
+ | `proxy` | the transparent capture proxy — routes each model to its **real** provider, compresses + measures + caches (no model swap) |
403
+ | `doctor` | proxy reachability + lifetime savings |
404
+ | `cache` | native response cache (`stats`/`clear`) — a repeated deterministic request is served from cache, skipping the LLM call |
405
+ | `signatures` | signatures-only view of a source file (bodies stripped, ~93% fewer tokens to read code) |
406
+ | `semantic` | reversible extractive (semantic-lite) compression |
407
+ | `kompress` | **ONNX** semantic token-pruning via the real `kompress-v2-base` model |
408
+ | `detect` | content-type detection + smart per-block routing |
409
+ | `rag` | TF-IDF (or `--ml` embedding) retrieval over the CCR memory store |
410
+ | `memory` | CCR compress-cache-retrieve store (`remember`/`recall`/`forget`/`list`/`stats`) |
411
+ | `mcp` | native stdio MCP server (compress / retrieve / stats tools) |
412
+ | `init` / `wrap` | register Simplicio into a client (Claude / Codex / Copilot / OpenClaw) · run a client with capture routing |
413
+ | `report` / `audit` / `capture` / `evals` | savings report · audit a tree for compression opportunity · dry-run a request · compression regression gate |
414
+
415
+ ### 🧠 Optional real ML models — `pip install "simplicio-loop[onnx]"`
416
+
417
+ Four **real**, public (Apache-2.0) ONNX models run natively — the same models the upstream uses.
418
+ Without the extra, the deterministic stdlib path covers everything; models download on first use.
419
+
420
+ | Model | Command | Use |
421
+ |---|---|---|
422
+ | `kompress-v2-base` | `simplicio kompress` | semantic token pruning |
423
+ | `technique-router-onnx` | `simplicio router` | technique routing |
424
+ | `all-MiniLM-L6-v2-onnx` | `simplicio embed` · `rag --ml` | embeddings + semantic RAG |
425
+ | `siglip-image-encoder-onnx` | `simplicio image` | image-compression content verifier |
426
+
427
+ ### ⚙️ Native Rust performance core (optional)
428
+
429
+ [`rust/`](rust) ships four crates ported + rebranded from the upstream (Apache-2.0; `NOTICE` credits it):
430
+ `simplicio-core` (compressors + smart-crusher), `simplicio-py` (PyO3 bindings), `simplicio-proxy`
431
+ (axum reverse proxy), `simplicio-parity` (Rust↔Python parity harness). Build with `maturin` — the Python
432
+ engine works fully without them; the crates only add native speed.
433
+
434
+ |---
435
+
436
+ ## 🏛️ Design pillars (in detail)
437
+
438
+ Four mechanisms sustain the orchestration power:
439
+
440
+ | Pillar | Focus | Lives in |
441
+ |---|---|---|
442
+ | **DAG + pipeline** | parallelism by dependency, staged per item | `references/orchestration.md` (Step 3 pool + pipeline) |
443
+ | **Isolation by worktree** | parallel edits without corrupting the tree, merge-gated | `references/orchestration.md` |
444
+ | **Adversarial verify** | panel of skeptics before "delivered" | `references/quality-safety-delivery.md` · skill `simplicio-review` |
445
+ | **Loop budget cap** | anti-infinite-loop, dual exit | `references/standing-loop-247.md` · skill `simplicio-loop` |
446
+
447
+ ---
448
+
449
+ ## 🚀 Install & use
450
+
451
+ ```bash
452
+ git clone https://github.com/wesleysimplicio/simplicio-loop
453
+ cd simplicio-loop
454
+
455
+ # install for your runtime (omit <runtime> to auto-detect)
456
+ bash scripts/install.sh <runtime> [--global] # macOS / Linux
457
+ pwsh scripts/install.ps1 <runtime> [-Global] # Windows
458
+ # <runtime> ∈ claude codex vscode cursor antigravity kiro opencode gemini aider hermes openclaw
459
+ ```
460
+
461
+ Or, on Claude Code / Cursor, add it as a marketplace plugin:
462
+
463
+ ```
464
+ /plugin marketplace add wesleysimplicio/simplicio-loop
465
+ /plugin install simplicio-loop@simplicio
466
+ ```
467
+
468
+ Then:
469
+
470
+ ```
471
+ /simplicio-tasks finish all the open issues
472
+ ```
473
+
474
+ The only requirement is **python3** on PATH (skills, hooks, and installer are cross-platform
475
+ Python). For GitHub sources, `git` + an authenticated `gh`. See [`INSTALL.md`](INSTALL.md) and
476
+ [`adapters/MATRIX.md`](adapters/MATRIX.md).
477
+
478
+ **Before an unattended 24/7 run:** set a cost ceiling in `.orchestrator/loop-budget.json`
479
+ (`daily_usd_ceiling > 0`), confirm source auth is persistent, and keep the irreversible-op human
480
+ gate + secret-scan on. With `ceiling = 0` the watcher refuses to run unattended (fail-safe).
481
+
482
+ ---
483
+
484
+ ## 🔒 Safety (non-negotiable)
485
+
486
+ - **Secret-scan** every diff; block on hit.
487
+ - **Irreversible-op human gate** — force-push, history rewrite, prod deploy, data/schema delete,
488
+ mass-file delete → stop and ask. Headless + no approver → remove the destructive capability.
489
+ - **Enforced, not just promised** — `hooks/action_gate.py` is a **fail-closed** `PreToolUse` /
490
+ git-pre-push hook that mechanically blocks the above (and secret-laden commits) *before* they run.
491
+ The safety contract holds even if the model forgets it. `selftest` proves the ruleset (14/14).
492
+ - **4-state pre-execution verdict** — optimization may never raise a command's risk tier.
493
+ - **Trust-before-load** — perception-shaping config (clamp profiles, suppression lists) is
494
+ untrusted until a human reviews and hash-pins it.
495
+ - **Prompt-injection hardening** — item/PR/comment content can never override the contract.
496
+ - **Hard $ kill-switch** for unattended runs; **evidence-gated** completion (never a false
497
+ "done"); **fail-open** hooks (never trap the agent in a loop).
498
+
499
+ ---
500
+
501
+ ## ✅ Tests & local checks (no paid CI)
502
+
503
+ Claims are verified, not just asserted — and the gate runs **locally**, with zero CI cost:
504
+
505
+ ```bash
506
+ python3 scripts/check.py # the whole gate (audit + tests)
507
+ ```
508
+
509
+ - **Test suite** (`tests/`) — the workers' deterministic `selftest`s, plus an **e2e of the loop
510
+ driver** (`hooks/loop_stop.py`): it proves the loop **stops on evidence**, **ignores a bare
511
+ `<promise>`**, and **stops on the cap** as distinct exits — and that the evidence producers
512
+ **BLOCK** (never fake-pass) when their toolchain is absent. Runs under `pytest` *or*, with no pip
513
+ at all, self-runs on bare python3 (`python3 tests/test_*.py`).
514
+ - **Claims audit** (`scripts/claims_audit.py`, fail-closed) — every `scripts/*.py` the docs
515
+ reference exists · the extension-point count agrees across all files · each cited worker command
516
+ actually runs · the shipped `simplicio_loop/_bundle/` skills are **byte-identical** to source.
517
+ - **Wire it as a git pre-push hook** to keep `main` honest for free:
518
+ ```bash
519
+ printf '#!/bin/sh\npython3 scripts/check.py\n' > .git/hooks/pre-push && chmod +x .git/hooks/pre-push
520
+ ```
521
+
522
+ `pip install "simplicio-loop[dev]"` adds pytest for nicer output; it is never required.
523
+
524
+ ---
525
+
526
+ ## 📄 License
527
+
528
+ MIT
529
+
530
+ ## 💳 Pricing
531
+
532
+ The engine is **free and MIT** — fully self-hostable, never crippled. A proposed **open-core
533
+ hosted tier** (managed 24/7 watcher, hosted operators, retained savings dashboard, distributed
534
+ `video_evidence` render) is sketched in [`PRICING.md`](PRICING.md), along with a deterministic,
535
+ privacy-preserving billing architecture built on the metering primitives the loop already
536
+ produces (`loop-budget.json` kill-switch + `savings_ledger`). It is a proposal — nothing is billed
537
+ today.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simplicio-loop"
7
- version = "1.0.5"
7
+ version = "3.4.0"
8
8
  description = "The Universal Looping AI Orchestrator — a runtime-agnostic super-plugin (6 skills) that drains any queue of work end-to-end on any LLM/runtime."
9
9
  readme = "PYPI.md"
10
10
  requires-python = ">=3.8"
@@ -29,6 +29,20 @@ dependencies = [
29
29
  "simplicio-cli",
30
30
  ]
31
31
 
32
+ # Optional: the real embedding backend for `simplicio semantic --ml` / `simplicio rag --ml`.
33
+ # The native engine itself is stdlib-only; this only enables embedding-based semantic dedup +
34
+ # meaning retrieval. `pip install "simplicio-loop[ml]"`.
35
+ [project.optional-dependencies]
36
+ # Dev/test: the suite ALSO self-runs on bare python3 (`python3 scripts/check.py`), so pytest is
37
+ # only a convenience for nicer output / IDE integration — never required.
38
+ dev = ["pytest>=7"]
39
+ ml = ["model2vec>=0.3", "numpy>=1.21"]
40
+ # ONNX model commands (the REAL headroom models, downloaded on first use):
41
+ # kompress -> chopratejas/kompress-v2-base (~274MB) · router -> chopratejas/technique-router-onnx (~32MB)
42
+ # embed -> Qdrant/all-MiniLM-L6-v2-onnx (~90MB). `pip install "simplicio-loop[onnx]"`.
43
+ onnx = ["onnxruntime>=1.16", "huggingface_hub>=0.20", "tokenizers>=0.15", "numpy>=1.21", "pillow>=9"]
44
+ kompress = ["onnxruntime>=1.16", "huggingface_hub>=0.20", "tokenizers>=0.15", "numpy>=1.21"]
45
+
32
46
  [project.urls]
33
47
  Homepage = "https://github.com/wesleysimplicio/simplicio-loop"
34
48
  Repository = "https://github.com/wesleysimplicio/simplicio-loop"