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.
- {simplicio_loop-1.0.5/simplicio_loop.egg-info → simplicio_loop-3.4.0}/PKG-INFO +17 -1
- simplicio_loop-3.4.0/README.md +537 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/pyproject.toml +15 -1
- simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/README.md +99 -0
- simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/action_gate.py +275 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/hooks.claude.json +1 -0
- simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/simplicio_dashboard.py +870 -0
- simplicio_loop-3.4.0/simplicio_loop/_bundle/hooks/simplicio_watch.py +83 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-loop/SKILL.md +158 -6
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/SKILL.md +55 -11
- simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/agentsview-adapter.md +210 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/extension-points.md +5 -4
- simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/headroom-adapter.md +246 -0
- simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/lmcache-adapter.md +632 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/orchestration.md +10 -1
- simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-capture.md +124 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/token-economy.md +56 -0
- simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/understand-anything-adapter.md +591 -0
- simplicio_loop-3.4.0/simplicio_loop/_bundle/skills/simplicio-tasks/references/video-evidence.md +111 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0/simplicio_loop.egg-info}/PKG-INFO +17 -1
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/SOURCES.txt +15 -1
- simplicio_loop-3.4.0/simplicio_loop.egg-info/requires.txt +22 -0
- simplicio_loop-3.4.0/tests/test_action_gate.py +108 -0
- simplicio_loop-3.4.0/tests/test_loop_e2e.py +110 -0
- simplicio_loop-3.4.0/tests/test_worker_selftests.py +48 -0
- simplicio_loop-3.4.0/tests/test_worker_smoke.py +64 -0
- simplicio_loop-1.0.5/README.md +0 -358
- simplicio_loop-1.0.5/simplicio_loop.egg-info/requires.txt +0 -2
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/LICENSE +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/MANIFEST.in +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/PYPI.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/setup.cfg +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/__init__.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/hooks.json +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/learn_stop.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/loop_capture.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/loop_stop.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/orient_clamp.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/hooks/orient_rewrite.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-compress/SKILL.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-learn/SKILL.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-orient/SKILL.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-review/SKILL.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/azure-devops-adapter.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/quality-safety-delivery.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/standing-loop-247.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/_bundle/skills/simplicio-tasks/references/web-evidence.md +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop/cli.py +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/dependency_links.txt +0 -0
- {simplicio_loop-1.0.5 → simplicio_loop-3.4.0}/simplicio_loop.egg-info/entry_points.txt +0 -0
- {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:
|
|
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 = "
|
|
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"
|