Skip to content

v3.45.2

Choose a tag to compare

@wesleysimplicio wesleysimplicio released this 29 Sep 16:58
· 257 commits to main since this release
e68d609
  • The real skill path is two commands. Measured on 3.45.1 (deepseek-v4.1-flash through OpenCode), the direct turbo engine was 88-96% faster and 48-80% cheaper than plain OpenCode, but a host agent invoking /simplicio-loop took 9-20 turns, and every turn re-sends the whole conversation (120k-540k prompt tokens). It tied with or lost to plain OpenCode: 38-45 s against 30 s for 1 task, and 324-496 s and $0.020 against 112 s and $0.008 for 4 hard tasks. The archived sessions show where the turns went: loop_progress.py render --turn-header, a script the target repository does not have; ls, cat and read of the tree and the tests; --help; a scratchpad and a journal written by hand; the plan written to plan.json as a separate tool call; the model's own test run; a re-read of the result. The model also used --provider openrouter on its own, because the docs and the help mention it.
  • simplicio-loop turbo --repo R --apply - [--verify V] reads the JSON plan from stdin, as UTF-8 bytes (a plan in Portuguese survives a cp1252 or C locale). An empty stdin, or a terminal on stdin, is failed with turbo_plan_missing instead of a hang; --apply FILE is the same code path. The needs_plan request now ends with the ONE next command in heredoc form, so the model writes the plan and applies it in a single tool call: simplicio-loop turbo --repo <R> --apply - --verify "<V>" <<'PLAN', the plan, PLAN. Two commands, two tool calls (smoke with the real CLI, network denied: request, then apply, status ok).
  • The request is compact: tasks (each task text once), map (the Mapper map cut to the named files, for several tasks too, as JSON instead of an escaped string), files (the current text of the named files, each once; a file past 6000 characters ends with how much was cut), format, rules (one line: write the plan from the file contents above, do not open, list or read other files, do not run tests yourself, run the command below once) and apply. plan_path, prompt, the second copy of the task list and the planner's "reply with JSON only" text are gone, and step 1 writes nothing into the repository (no request.json, no plan.json cleanup).
  • The skill body (frontmatter unchanged), its SIMPLICIO-LLM-ORIENTATION block, docs/LLM_MAX_SPEED_ORIENTATION.md, llms.txt, the AGENTS.md quick flow, the host rules, docs/ECOSYSTEM_LLM_GUIDE.md, the OpenCode adapter README, references/full-flow.md and the orient command card say it plainly: exactly two commands; do not explore, list or read files; do not run tests yourself (--verify does); no plan file, scratchpad, journal or turn header for a task run. The loop's own Contract, State and Drive sections, Bounded delivery and the references/full-flow.md pointer now say they are for queue goals and re-fed goals, and the turn header is skipped when its script is missing. None of these names --provider or OPENROUTER_API_KEY any more; turbo --help and docs/CLI_COMMANDS.md describe --provider openrouter as headless automation only that agents invoking the skill must not use, and the engine notes moved to bench/llm_ab/STANDARD.md. SKILL.md is 1935 tokens (o200k_base), from 1858 before the rewrite.
  • .simplicio-loop/ no longer shows up as untracked. Cloud workers reported it: the turbo path (the default skill flow since 3.45) never called state_dir.ensure_state_dir, so not even the <git-dir>/info/exclude line was written, while Mapper, the survey marker and dev-cli all write under that directory. ensure_state_dir now also appends .simplicio-loop/ to the repository's .gitignore when that file exists and no stripped, non-comment line already covers the directory (.simplicio-loop, /.simplicio-loop/, .simplicio-loop/*, /.simplicio-loop/** and the other variants); it never creates a .gitignore, keeps CRLF line endings, adds a missing final newline first, and leaves a file it cannot read as UTF-8 or write untouched. This repository's own .gitignore (.simplicio-loop/*) is not edited. turbo calls it before anything is written under the directory: after the request validates its tasks, before dev-cli applies a plan, and in provider mode; a blocked call or a missing --repo creates nothing. The skill body and its orientation block say the directory is local run state: keep it in .gitignore (the engine adds it when the file exists) and never commit it.
  • The turbo hedge only fires on real tails: SIMPLICIO_TURBO_HEDGE_AFTER defaults to 10 s, was 2.5 s. The 2.5 s came from a simulation with Together only. On the real provider mix normal calls take 1.6-8.0 s (Relace, the slowest, about 8 s) and the one real tail took 19.6 s. In the final benchmark hedge analysis, at 2.5 s the hedge fired on 23% of calls, the duplicate won only 2 of 21, it saved about 0.08 s in total, and the losing duplicates were 47% of the billed cost (the CLI hedged 5 of 12 calls, and 4-task sets cost 45-57% more than in 3.45.0). 10 s is above the ~8 s slowest normal call and still cuts the 20-45 s tails. A test pins that a 5 s call is not hedged by default.
  • The repair after a failed --verify (provider mode) rewrites a file the first plan created. On a create task the model repeated {"find": ""} for a file that now exists and dev-cli refused it as create_target_exists, in 5 of 15 repair attempts, so the repair never got a chance. Only on that path, an operation with an empty find for an existing file becomes a whole-file replacement (find is the file's current text, read as bytes so its line endings survive; anything that cannot be a whole-file find is left to dev-cli), and the repair prompt says the listed files already exist.
  • hooks/action_gate.py reads the heredoc body of simplicio-loop turbo ... --apply - <<'PLAN' as data, so a plan that merely contains a destructive statement (a migration, a runbook) is not blocked for what it says; the gate blocked the tool call that wrote its own test while this was built. Only the exact shape is exempt: one plain simplicio-loop turbo --apply - command with no unquoted operator, and a quoted delimiter that is the last line and appears nowhere earlier. Every other command, and every other reader of a heredoc, is classified in full.
  • python3 scripts/check.py passes on the release tree again (audit, mirror parity, impact tests, loop contract, clean env, token budget, repo budget, conformance). It failed on 3.45.1: since the immutable contract headers (#1342) line 2 of each shared reference of simplicio-loop and simplicio-tasks names its own skill, so the skill-pair parity check reported 12 references as drifted. Only that line is normalized; a body difference behind the header is still flagged.

Upgrade: pip install -U simplicio-loop && simplicio-loop install --global

PyPI: https://pypi.org/project/simplicio-loop/3.45.2/

sha256:

  • simplicio_loop-3.45.2-py3-none-any.whl 4dab62c6968e8666dcd9c96ac3340f2c53b0cca0065d2fef9bb34d47f92d8984
  • simplicio_loop-3.45.2.tar.gz 78f15c5203ad0a2bb23fa826a1d10817b5cd55c1ea3d3001b8adcaaf69f551f6