A MyThingsLab My[X] tool: drafts Jekyll content for a
personal site from a content-change issue. Given an issue (label my-site)
on a Jekyll repo — default lorenzoliuzzo/lorenzoliuzzo.github.io — it infers
the requested kind (project / note / page), gathers the relevant
_data/navigation.yml section plus one existing page of the same kind as a
style anchor, makes one Engine call to draft the new page(s) and nav
entries, and opens a PR.
MySite is the fleet's first tool whose target repo lives outside the
MyThingsLab org — every tool's target repo is already configurable at run
time, just not exercised until now. It edits content only, never the Ruby
toolchain or theme choice — a Gemfile/_config.yml change stays a human,
out-of-band step.
# Draft content for issue #12 on the default site repo, open a PR.
mysite draft --issue 12 --engine claude-cli
# Point at a different repo / local checkout, skip opening a PR:
mysite draft --issue 12 --repo owner/site --repo-root ~/site --no-prEach invocation makes at most one Engine call. If the requested slug
already exists, the run skips before ever calling the Engine. Against the
default --engine noop (zero tokens), the draft degrades to a minimal stub
page — front matter inferred from kind plus the issue body verbatim — an
honest degrade, never fabricated prose.
The Engine may only write files under _pages/, _notes/, or
assets/<kind>/. This is enforced by the writer, not trusted from the
Engine's reply: any file path outside the allowlist is dropped and the run
still succeeds rather than failing outright.
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.