A MyThingsLab My[X] tool: given a "field of study" issue
(e.g. "Computer Science, undergrad-equivalent depth"), decomposes the field
into a curriculum — an ordered set of topics with prerequisites — and opens
each as its own issue labeled both my-uni and my-researcher so
MyResearcher picks it up on its own schedule and produces a cited study
brief for it.
MyUni is deliberately upstream of MyResearcher, not a duplicate: MyUni
decides what the topics of a field are; MyResearcher's plan mode orders
topics it's given. The two are coupled only through the issue tracker.
# Decompose a field issue into up to 12 topic issues.
myuni plan --issue 7 --repo MyThingsLab/study --engine claude-cli
# Cap the curriculum size, dry-run against the noop engine:
myuni plan --issue 7 --max-topics 6 --engine noop
# Report a field's coverage: which topics have a brief, which are pending.
myuni status --issue 7 --repo MyThingsLab/studyEach plan invocation makes exactly one Engine call. Against the default
--engine noop (zero tokens), the field issue's own title becomes the sole
topic — an honest degrade, never a fabricated curriculum. Re-running against
the same field issue extends the curriculum: already-opened topics are
deduped by title, never re-proposed. status makes zero Engine calls: a
topic counts as briefed once its issue is closed (the merged research PR says
Closes #N), pending otherwise.
MyUni never builds or ingests a knowledge corpus itself, and never calls MyResearcher directly — it only opens issues MyResearcher already watches for.
The live deployment is the MyThingsLab/study
repo, which hosts both the issues and the committed briefs:
- A human files a field issue (e.g. "Physics") labeled
my-uni. myuni plan --issue N --repo MyThingsLab/study --engine claude-clidecomposes it into topic issues (≤--max-topicsper run), each labeledmy-uni+my-researcherand carrying apart-of: #Nmarker.myresearcher brief --issue T --repo MyThingsLab/studydiscovers sources (arXiv keyless; the web backend needsTAVILY_API_KEY) and opens a PR committingresearch/<topic>.md, whose bodyCloses #T.- A human merges the brief PR; the topic issue closes;
myuni statusshows the field's coverage tick up. Re-runningplanlater proposes only new topics.
Step 3 is not yet scheduled: the fleet cycle
(fleet-dispatch/fleet_cycle.py, systemd fleet-cycle.timer) does not run
myresearcher brief against open my-researcher issues — briefs are produced
by manual invocations until that consumption loop is wired in. Both CLIs need
an authenticated Claude CLI (CLAUDE_CONFIG_DIR=~/.claude-personal on the
fleet host) for --engine claude-cli; the default noop degrades honestly.
python -m venv .venv && source .venv/bin/activate
pip install -e ../my-things-core -e ../my-guard -e ".[dev]"
pytestSee CLAUDE.md for the tool's seams and HARNESS.md
for the inherited build rules.
MIT — see LICENSE.