Simplicio-loop

Latest version: v3.50.0

Safety actively analyzes 1035885 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 26

3.50.0

- **Multi-Issue Planning & Squads**:
- `simplicio-loop squads plan` accepts file paths, stdin `-`, and inline JSON (1803).
- Topological dependency resolution parses `Blocked by:`, `Depends on:`, and contract markers from issue bodies, computes non-conflicting execution waves (`wave_index`), and passes contracts to agents (1804).
- Agent loop triage step and governance decision matrix in `SKILL.md` require mandatory preview before squad execution and merges (1810).
- **Self-Update & Installation**:
- `simplicio-loop self-update` detects PEP 668 externally managed environments (`EXTERNALLY-MANAGED`) and safely routes via pipx or `--break-system-packages` with warnings (1802).
- `simplicio-loop install` deduplicates `owned ->` paths, resets stale/resynced counters per pass, wraps long target lists cleanly, and adds `--prune-project-copies` (1808).
- **Diagnostics & Observability**:
- Bare `simplicio-loop doctor` runs the full system and stack health overview by default (1809).
- **Dashboard Reliability & Networking**:
- Daemon restart preserves `state.json` and active auth tokens without resetting sessions (1805).
- Port binding filters specifically on `LISTEN` status and `127.0.0.1`, applies `SO_REUSEADDR`, and supports automatic port assignment via `--port auto` (1806).
- Remote access supports `--allow-host`, automatic Tailscale `.ts.net` host recognition, and returns structured 403 responses explaining security requirements (1807).
- **Agent Governance**:
- Updated `AGENTS.md` with guidelines for multi-issue squad workflows, dependency waves, and operational utilities.

3.49.0

- The dev login switch `SIMPLICIO_247_NO_LOGIN` is gone. The login gate of the 24/7 tick is the only path again (1604).
- A new attempt on an issue that has a branch on origin uses `loop/issue-N-r2`, then `-r3`. The first attempt keeps `loop/issue-N`. The merge train and the review read the real branch of the PR. An issue with an open PR gets no second PR.
- The review gate runs the PR code in a jail with no network. It refuses a PR that adds or changes a symlink. Production code that is not Python needs a human review (T2).
- The review gate runs the tests that import a shared test helper when the helper changes. A mutation sample with fewer than 5 live mutants no longer fails on one equivalent mutant.
- Only comments by an authorized login can carry the independent review marker. The closing keyword check also reads `GH-N` and the URLs of issues and pull requests.
- The planner CLI of `claude` runs with no tools, no MCP, no skills and no saved session. Each step records `tool_surface` and its reason.
- `login --no-browser` removes the display variables of the child process. It exits with code 2 when it cannot install the stand-ins for the browser.
- The model catalog lists only ids that the installed CLIs accept. `python -m simplicio_loop.model_probe` probes each family and role.
- The dashboard counts `requests_over_tier`. The execution report records the cache read and write tokens that the provider measured.

- `truncate_error_with_cause` now has callers. Four places that cut an error message keep both the start (the cause) and the end of it, with a marker for the cut: the `simplicio-mapper index` failure (`map_service_mapper`), the failed-job message in the fabric journal (`fabric_scheduler`), the tick error in the watcher status (`watcher247/__main__`), and the version-probe error (`strict_mode`). Each has a test (Part of 1665).
- The 24/7 watcher has a second executor. `SIMPLICIO_247_EXECUTOR=author` runs the author flow in the worktree of the item instead of the plan flow. `SIMPLICIO_247_AUTHOR_ROUNDS` sets the rounds (default 3, maximum 10). An `ok` result uses the same delivery path. A failed result releases the claim with the reason. Another value stops the service at start (Part of 1669).
- `setup` does not run a program from a PATH entry that is relative, writable by others, or owned by another user. It also skips an entry under a folder anyone can rewrite, and `~/.local/bin` (however spelled or linked). Host detection, the tool checks and the `gh` and `git` GitHub login sources skip these entries. The probes get a PATH without them. `setup` prints each entry with its reason (`path_warnings` in `--json`). It also names an agent CLI that sits only in such an entry (`ignored_hosts`), with the fix. Group write on a folder that root or the user owns (Homebrew, Debian `/usr/local/bin`) stays accepted. `setup` still uses the `gh` and `uv` files that it installed. `setup.json` records their SHA256 (`installs`), taken when it checked them. `setup` runs only that exact file while the SHA256 matches and `~/.local/bin` is private. `git credential fill` and `gh auth token` run in an empty folder outside any repository. A `credential.helper` in the local `.git/config` cannot run code now. A `uv` file that `setup` did not install is no longer run by `uv python install` (Part of 1657).
- `setup` installs only the `gh` and `uv` releases pinned in `simplicio_loop/setup_pins.json` (tag and SHA256 per platform; ADR 0011). It refuses an archive that does not match its pin before it opens the file. A tool or platform without a pin is skipped with `no_pin`. `scripts/update_release_pins.py` writes new pins; a maintainer checks each archive with `gh attestation verify` first. The install steps (`uv python install`, the system package manager) keep the proxy and certificate variables (`install_env`); the `--version` probes do not. New tests run the real `github_cred._run` with a real program (no shell), and cover `--yes` for `dnf` and `pacman`, as root and with `sudo -n` (Part of 1657).
- Per-user daemon (`simplicio-loop daemon serve/status/stop`) that imports the loop, Mapper and dev-cli once and forks one child per command. The client sends stdin, stdout, stderr and environment. The parent never runs command code. Inside a daemon command, Mapper and dev-cli calls fork from the daemon instead of starting a new process. Idle exit after 900 seconds. Explicit opt-out with `SIMPLICIO_LOOP_DAEMON=0`. Windows and frozen binaries run in-process. The `simplicio-loop` console script is now the thin client `simplicio_loop.daemon.client:main`.

3.48.1

- Vendor `danyuchn/asd-ste100-skill` as `.claude/skills/asd-ste100` and require it for agent-facing text (PR bodies, release notes, errors) in the loop delivery step. Install: `npx skills add danyuchn/asd-ste100-skill`.
- header-change: .claude/skills/simplicio-loop/SKILL.md (new "Agent-facing text" section), .claude/skills/asd-ste100/SKILL.md and .claude/skills/asd-ste100/references/writing-rules.md (new contract headers)
- header-change: .claude/skills/frontend-design/SKILL.md (new contract header and model-sees sections)

3.48.0

- Sync `packages/mapper` with simplicio-mapper v0.26.35 and the Fast unification (1395): native SFAST v2 mmap binary snapshot engine (`store/snapshot.py`, `store/segments.py`), TurboQuant 4-bit, FWHT and Pareto scoring (`store/neural/`), PlanDAG decomposition with `understand` and `plan` (`processor.py`), strict changeset validation with `expected_sha256` (`changeset.py`).
- New mapper CLI commands: `understand`, `plan` and `changeset`; the index engine can emit an SFAST v2 snapshot; `store/fast_link.py` supports the native Fast with no external dependencies.
- Fix: `mapper/parse.py` handles `previous_map` whose files are a dict.
- Tests: 62 passed, 15 subtests across the mapper suite plus the unified Fast E2E flow.
- Dashboard telemetry contract `simplicio.dashboard-event/v1` (1398, epic 1397): `contracts/dashboard-event/v1/schema.json` + `SCHEMA.md` pin one envelope (`schema, event_id (ULID), seq, ts, run_id, task_id, scope, source, kind, phase, lane, iteration, severity, payload, refs, producer_version`) and the kind catalog. `scripts/dashboard_events.py` (stdlib, Python 3.8+) appends to `<run_dir>/events.jsonl` under an exclusive lock with a gap-free per-run `seq`, redacts secret-like payload keys/values, truncates payloads over 32 KiB, rotates by size and never raises into a producer (diagnostics on stderr and in a JSONL file). The runner (`_transition`, `_emit_event`, `arm_run`), `technical_debt`, and the `action_gate`, `user_prompt_submit` and `loop_stop` hooks emit through it; runs without the stream are rebuilt from `transitions.jsonl` and `state.json` as `derived: true` events. Measured overhead p95 0.16 ms per event (no fsync; `SIMPLICIO_DASHBOARD_EVENTS_FSYNC=1` for durable appends). New gate `scripts/check_dashboard_event_contract.py` (schema + fixture drift + kind catalog) runs in `scripts/check.py`. `scripts/_locked_append.py` exposes `exclusive_lock()`. Docs: `docs/DASHBOARD_EVENTS.md`.

3.47.0

- Restore full loop protocol (pre-monorepo way of working) on the monorepo (1392): the full loop protocol is back as the skill's entry point; turbo is a tool the operate step may use, not the skill's entry. It starts the task, describes it (goal and acceptance criteria frozen in the task anchor), decomposes it (task backlog), iterates turn by turn (triage, decide, operate, verify, journal), gates done on evidence, and delivers with PR evidence.
- Restored v3.43 `SKILL.md` body adapted to the monorepo stack: bound operators are `packages/mapper` (`simplicio-mapper` survey) and `packages/dev-cli` (`simplicio-dev-cli` mutation) from the one wheel; state dir is `.simplicio-loop/`; all dead instructions depending on Runtime, Hub, remote workers or Fast are removed.
- Frontmatter description stops saying "Invoking it runs simplicio-loop turbo". Pinned headers updated with `header-change: .claude/skills/simplicio-loop/SKILL.md`. The `.simplicio-loop/` gitignore line and single `SIMPLICIO-LLM-ORIENTATION` block are preserved.
- Extension points: audited 50 named binding points restored, verified, and consistent across documentation and table count.
- All 29 protocol scripts and commands answer `--help` with exit code 0 (`coordinator.py`, `cross_agent_wiki.py`, `hierarchical_planner.py`, `video_evidence.py`, `web_verify.py`, `worktree_cleanup.py`, `az_boards_adapter.py`, `check.py`, `repo_conventions.py`, `pr_evidence.py`, etc.).
- Regenerated mirrors via `sync_plugin.py`, `sync_bundle.py`, and `refresh_orientation_pins.py`.
- Updated token-budget baseline for `SKILL.md` (14,210 tokens, 7,983 words).
- header-change: .claude/skills/simplicio-loop/SKILL.md (frontmatter description stops saying "Invoking it runs simplicio-loop turbo.")

3.46.1

- Restore simplicio-loop 50 extension points: restored `control_policy` and `prototype_judge` modules, unit tests, and reference documentation (`references/control-policy.md`, `references/extension-points.md`), bringing the audited extension points count from 48 back to 50.
- Quality Delivery Flow & Host Mode: full flow contract preserved with two-command hot path (`simplicio-loop "<task>"` and `simplicio-loop turbo --apply - <<'PLAN'`), 7-dimension adaptive DoD, verification, delivery contract, PR evidence, and GitHub issue drain.
- Monorepo structure maintained (`packages/mapper`, `packages/dev-cli`, `simplicio-loop` at root; no Fast, no Runtime, no MCP force).
- Subprocess and Network Guard Isolation: fixed subprocess invocation under `core_network_guard` across `apply.py`, `lane_verifiers.py`, `turbo_cli.py`, and `wave_worktree.py` using `asyncio.create_subprocess_exec` / `subprocess.run` with system shell executable, preventing network-guard bypass errors.
- Hermetic test robustness: made `matplotlib` import optional in benchmark reporting to allow unit tests (`test_turbo10_unit.py`) to run in lean environments without matplotlib installed.
- Increased core gate deadline to ensure full 51-shard test suite passes reliably on cold/loaded environments.

Page 1 of 26

© 2026 Safety CLI Cybersecurity Inc. All Rights Reserved.