MyThingsLab · fleet dashboard

48 tools, one loop

Repos
48
across 3 shelves
CI on main
48/48
all green
Open PRs
2
across the fleet
Open issues
123
across the backlog

Explore

1 tool with a web app
my-server

surfaces the fleet — a read-only view of the shared ledger, plus

myserver serve — localhost:8787

Development harness

14 tools runs the autonomous cycle

the rule engine — evaluates an `Action` to allow / ask / deny,

✓ CI0 PR1 issue
build: local-first gate: pre-commit (ruff + pytest-fast) + slow marker (2026-07-06T13:08:45Z)

(no purpose seam found)

✓ CI0 PR8 issues
build: append-only JSONL ledger — the shared-memory contract every tool writes to (2026-07-06T11:57:24Z)

curate a `TODO.md` — a repo's own (`mytodo repo`) or an org-wide

✓ CI0 PR0 issues
build: implemented plan/sources/render/prioritize/curator/cli; 23 tests green (ruff+pytest, incl GITHUB_ACTIONS=true); dogfooded org roll-up over live org issues (2026-07-08T09:15:49Z)

takes one picked issue (a `Candidate` from `my-orchestrator`,

✓ CI0 PR0 issues
build: filled CLAUDE.md seams; own-contract worker tool, no Engine call (2026-07-09T09:15:26Z)

(no purpose seam found)

✓ CI0 PR18 issues
build: fleet_test.py makes HARNESS.md's pre-ship rule executable: one command runs every sibling suite against the local editable core, with --unattended for the CI view; first live run immediately caught three stale checkouts and a venv editable install pointing at a dead ~/.claude/jobs tmp clone (hence the per-repo PYTHONPATH=src override). Gap-fill: tests+CI for merge_order_prs.py (kept: computes cross-repo order merge_ready doesn't) and the two notify scripts (CI now installs my-telegram-bot --no-deps), plus the fleet's first cross-tool integration tests (my-reporter's real CLI over a real ledger, marked slow). (2026-07-12T09:22:34Z)

reads a target repo's `dev-ledger/` entries since the last

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh + clean_git_env replace local copies; the possibly-empty-tree make_target_repo stays local by design. (2026-07-12T10:15:27Z)

Renders the fleet's status two ways — an org-wide front page

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: the dispatch-table FakeGh became fake_gh wiring over the shared FakeGh (repo/issue/pr/run/api handlers); the empty-tree make_site_repo stays local by design. (2026-07-12T10:23:31Z)

keeps `MyThingsLab/mythingslab.github.io` — the fleet's

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh (callable api handler)/make_git_repo/GitRepo replace local copies; the per-tool dict-reply ScriptedEngine stays local (unique shape), SpyEngine call sites became ScriptedEngine(''). (2026-07-12T10:08:04Z)

reads every backlog across the fleet — open issues per repo, and

✓ CI0 PR1 issue
build: Mechanical migration to mythings.testing: local SpyEngine/FakeRunner replaced by shared ScriptedEngine/FakeGh (issue-list handler keeps the --repo parsing); manifest/repo-root builders stay local. (2026-07-12T10:16:45Z)

produce and maintain a priority-ordered, multi-item plan — "here's

✓ CI0 PR0 issues
build: Pilot migration to mythings.testing: local SpyEngine/FakeGh deleted; SpyEngine(result=EngineResult) call sites became ScriptedEngine(str); the tracking-issue gh double is gh_tracking() over shared FakeGh; _attended_env autouse now wraps the promoted attended_env fixture (the promotion docs/tools/README.md deferred until a third consumer). Planner-specific manifest/repo-root builders stay local. (2026-07-12T09:34:33Z)

keep the fleet's GitHub Project board (and any linked org-wide

✓ CI0 PR1 issue
build: Mechanical migration to mythings.testing: local SpyEngine replaced by shared ScriptedEngine; _attended_env autouse now wraps the promoted attended_env fixture; the projector-specific FakeGh (state-parsing REST double) and FakeProjects stay local. (2026-07-12T10:12:52Z)

reads the shared `Ledger` and each repo's `dev-ledger/`, and

✓ CI0 PR0 issues
build: Pilot migration to mythings.testing: FakeRunner/entry/make_ledgers deleted from conftest, replaced by FakeGh/ledger_entry/make_ledgers imports; gh_comment() and the tmp_path/'repo' root shape stay local as domain wiring. No pytest_plugins line — this suite uses only plain helpers, and a top-level import alongside registration would skip assertion rewriting. (2026-07-12T09:29:31Z)

<one line — what this tool does>

✓ CI0 PR0 issues
build: Template tests now consume mythings.testing (FakeGh via a local gh_for(issues) wiring helper, make_git_repo for the real-clone fixture, autouse clean_git_env wrapper in the new conftest); every scaffolded tool inherits the shared fakes instead of copy-pasting them. Draft until core#102 lands on main. (2026-07-12T09:26:55Z)

runs pytest with coverage, finds one uncovered unit, and opens a

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh/make_git_repo replace the local FakeRunner and bare-origin builder; calc fixture sources stay local. (2026-07-12T10:12:05Z)

Services

7 tools stays up, gets consumed

bridges the harness to the user over Telegram: pushes ledger

✓ CI0 PR4 issues
ship: live end-to-end ask-flow verified: real Telegram message sent, user tapped Allow, TelegramPolicy.evaluate() resolved decision=allow in ~3.5s via manual-ask-test.yml workflow_dispatch run 28840280628. Confirms the getUpdates client-timeout fix (PR #5) actually closed the loop, not just passed unit tests (2026-07-07T03:54:38Z)

surfaces the fleet — a read-only view of the shared ledger, plus

✓ CI0 PR0 issues
feature: HTTP/JSON API over the tools: GET /tools, GET /tools/{name}, POST /tools/{name}/issues (enqueue labeled backlog issue, fail-closed bearer-token gated); + coverage step (stale-template fix). 29 tests green (2026-07-08T00:22:37Z)

(no purpose seam found)

✓ CI0 PR0 issues

(no purpose seam found)

✓ CI0 PR0 issues

(no purpose seam found)

✓ CI0 PR22 issues

(no purpose seam found)

✓ CI0 PR0 issues

(no purpose seam found)

✓ CI0 PR0 issues

Casual development

16 tools make or learn something

maintains a unified catalog of a personal book/materials

✓ CI0 PR0 issues
build: Pilot migration to mythings.testing: dropped local ScriptedEngine/SpyEngine/FakeRunner/git-builder/fetch fakes; the stateful gh double became FakeGh with closure handlers (fake_gh), empty_fetch/fake_fetch_factory became fake_fetch wiring, make_repo/read_committed delegate to make_git_repo/GitRepo; EPUB/PDF/OpenLibrary payload builders stay local. clean_git_env re-exported via aliased import + getfixturevalue autouse wrapper (pytest registers imported fixtures under the attribute name; ruff F811 forbids the shadowing-param wrapper). (2026-07-12T09:32:55Z)

given a local CSV file, deterministically profile it

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: inline ScriptedEngine (requests->calls rename) and the comment-only FakeRunner replaced by the shared ScriptedEngine/FakeGh. (2026-07-12T10:18:01Z)

explores a rough idea (a `my-idea`-labeled issue) by

✓ CI0 PR61 issues
build: Mechanical migration to mythings.testing: the payload-JSON engine spy became a scripted() factory over the shared ScriptedEngine; the stateful domain gh doubles stay local (label-creation/topic-dispatch shapes the shared FakeGh doesn't model). (2026-07-12T10:24:54Z)

given a local image file, deterministically extract dimensions,

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: inline ScriptedEngine (requests->calls rename) and the comment-only FakeRunner replaced by the shared ScriptedEngine/FakeGh. (2026-07-12T10:18:27Z)

given a task issue ("convert Markdown to HTML", "typeset a

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh/ScriptedEngine/fake_fetch replace local copies; NPM/PyPI payload tables stay local (insertion-ordered fallback). (2026-07-12T10:05:26Z)

given a natural-language animation concept, run one Engine call

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: inline ScriptedEngine (requests->calls rename) and the comment-only FakeRunner replaced by the shared ScriptedEngine/FakeGh. (2026-07-12T10:18:22Z)

a personal freeform note-capture tool — a note is filed as a

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: the payload-JSON engine spy became a scripted() factory over the shared ScriptedEngine; the stateful domain gh doubles stay local (label-creation/topic-dispatch shapes the shared FakeGh doesn't model). (2026-07-12T10:24:59Z)

given a talk issue labeled `my-presentation` (topic, audience,

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared ScriptedEngine/FakeGh replace local copies; FakeTypster (mytypster CLI boundary) stays local. (2026-07-12T10:14:56Z)

given a topic issue, discovers external sources **live** (web

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: local ScriptedEngine/SpyEngine/FakeRunner/make_repo/branch_file/fetch fakes replaced by shared FakeGh (fake_gh wiring keeps issue-view/bibliography statefulness), ScriptedEngine, fake_fetch tables, make_git_repo/GitRepo; ARXIV/TAVILY payloads stay local. (2026-07-12T10:03:18Z)

given a URL and a question, fetch the page deterministically and

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: inline ScriptedEngine (requests->calls rename) and the comment-only FakeRunner replaced by the shared ScriptedEngine/FakeGh. (2026-07-12T10:18:17Z)

indexes a repo's files and ranks the ones most relevant to a

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh/make_git_repo/clean_git_env replace local copies. (2026-07-12T10:15:50Z)

given a local CSV time-series file, compute an FFT power

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: inline ScriptedEngine (requests->calls rename) and the comment-only FakeRunner replaced by the shared ScriptedEngine/FakeGh. (2026-07-12T10:18:11Z)

given a content or design-change issue (label `my-site`) on a

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh/ScriptedEngine/make_git_repo/GitRepo replace local copies; nav/note payloads and the site tree shape stay local. (2026-07-12T10:07:07Z)

given a document-drafting issue labeled `my-typster` (a report,

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: shared FakeGh/ScriptedEngine/make_git_repo/GitRepo replace local copies; FakeTypst (typst CLI boundary) and template payloads stay local. (2026-07-12T10:06:24Z)

given a "field of study" issue, decomposes the field into a

✓ CI0 PR0 issues
build: Mechanical migration to mythings.testing: the payload-JSON engine spy became a scripted() factory over the shared ScriptedEngine; the stateful domain gh doubles stay local (label-creation/topic-dispatch shapes the shared FakeGh doesn't model). (2026-07-12T10:25:04Z)

(no purpose seam found)

✓ CI0 PR7 issues

Unshelved

11 tools

⚠ Drift made visible, not silent: a new repo lands here until it is classified in shelves.toml.

given a reference-request issue (`doi:`, `arxiv:`, `isbn:`, or

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: shared FakeGh/ScriptedEngine/fake_fetch/make_git_repo/GitRepo replace the local copies; Crossref/arXiv/OpenLibrary payloads and fake_gh issue-view wiring stay local; note insertion-ordered fetch table (works/ before works). (2026-07-12T10:04:25Z)

given a design brief filed as an issue, produces a self-contained

✓ CI0 PR0 issues⚠ not in shelves.toml
scaffold: initialized from my-template via scripts/init.py (2026-07-12T13:33:13Z)

the fleet's human-in-the-loop director. An end-of-day interactive

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: the stateful local FakeGh became fake_gh wiring over the shared FakeGh (create counter + edit->view body kept on gh.body for assertions). (2026-07-12T10:22:29Z)

the learn-loop's **spaced-recall drilling** step. `build` makes

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: inline ScriptedEngine replaced by the shared one (drop-in). (2026-07-12T10:22:16Z)

defines a term from a document corpus (PDFs, notes, slides) and

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: inline engine spy replaced by the shared ScriptedEngine (attribute/counter shims folded into the assertions or a local scripted() payload factory). (2026-07-12T10:20:33Z)

the learn-loop's **summative assessment** step. `grade` takes a

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: inline ScriptedEngine replaced by the shared one (drop-in). (2026-07-12T10:22:23Z)

the fleet's front door for someone who has never opened a

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: inline engine spy replaced by the shared ScriptedEngine (attribute/counter shims folded into the assertions or a local scripted() payload factory). (2026-07-12T10:20:40Z)

the learn-loop's practice-and-assess step. `quiz` draws questions

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: inline ScriptedEngine replaced by the shared one (drop-in). (2026-07-12T10:22:05Z)

bootstraps a brand-new `My[X]` tool repo from a proposal issue —

✓ CI0 PR0 issues⚠ not in shelves.toml
scaffold: initialized from my-template via scripts/init.py (2026-07-12T10:17:19Z)

the learn-loop's **decompose** step. `decompose` reads a course

✓ CI0 PR0 issues⚠ not in shelves.toml
build: Mechanical migration to mythings.testing: inline ScriptedEngine replaced by the shared one (drop-in). (2026-07-12T10:22:11Z)

fleet orchestration/ops tooling — the pick-and-build dispatch

✓ CI2 PR0 issues⚠ not in shelves.toml