Add Uint Support
pytorch/pytorch
Add unsigned integer (uint) type support to PyTorch operators by updating ATDISPATCH macros.
Run the CLOSED training loop on a MOSS/duck policy without a human having to ask "is it done yet": launch through the lab, block until the run finishes, print the standard report and the per-term…
$ npx skills add jonathanhawkins/microduck-lab --skill train-loop -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jonathanhawkins/microduck-lab train-loop --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/train-loop .claude/skills/train-loop && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "train-loop" agent skill from https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loop into .claude/skills/train-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-loop", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loopType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jonathanhawkins/microduck-lab --skill train-loop -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jonathanhawkins/microduck-lab train-loop --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/train-loop .agents/skills/train-loop && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "train-loop" agent skill from https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loop into .agents/skills/train-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-loop", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jonathanhawkins/microduck-lab --skill train-loop -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jonathanhawkins/microduck-lab train-loop --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/train-loop .cursor/skills/train-loop && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "train-loop" agent skill from https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loop into .cursor/skills/train-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-loop", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jonathanhawkins/microduck-lab.git --path .claude/skills/train-loop--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jonathanhawkins/microduck-lab --skill train-loop -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jonathanhawkins/microduck-lab train-loop --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/train-loop .gemini/skills/train-loop && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "train-loop" agent skill from https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loop into .gemini/skills/train-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-loop", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jonathanhawkins/microduck-lab train-loopInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jonathanhawkins/microduck-lab --skill train-loop -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/train-loop .github/skills/train-loop && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "train-loop" agent skill from https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loop into .github/skills/train-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-loop", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jonathanhawkins/microduck-lab --skill train-loop -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jonathanhawkins/microduck-lab train-loop --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/train-loop .opencode/skills/train-loop && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "train-loop" agent skill from https://github.com/jonathanhawkins/microduck-lab/tree/main/.claude/skills/train-loop into .opencode/skills/train-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "train-loop", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
train-loopRun the CLOSED training loop on a MOSS/duck policy without a human having to ask "is it done yet": launch through the lab, block until the run finishes, print the standard report and the per-term…
Train Loop is an agent skill from jonathanhawkins/microduck-lab. Run the CLOSED training loop on a MOSS/duck policy without a human having to ask "is it done yet": launch through the lab, block until the run finishes, print the standard report and the per-term reward budget, then adjust and relaunch. Use whenever a training run is started and its result matters. Trigger on: "train it again", "when it's done check the results", "tune the rules and retrain", "let me know when training finishes", "is it still training".
Its SKILL.md is about 950 tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in AI & LLM Engineering, covering Deep learning. The repository describes itself as: Train RL policies for the Pollen Microduck 🦆 on an ordinary Mac, no CUDA GPU, and watch them learn live in the browser. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit bbf0326. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvcurlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv and curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Train Loop loads about 947 tokens when it runs. Until then it costs about 117 tokens; SKILL.md has 453 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jonathanhawkins/microduck-lab at commit bbf0326, republished under its Apache-2.0 licence (© jonathanhawkins). 453 words, ~947 tokens.
.claude/skills/train-loop/SKILL.md (or your agent's skills folder).A human should not have to poll an agent for "is it done". Run the waiter in the BACKGROUND: it exits when the run ends, which re-invokes the agent with the report already computed.
uv run python scripts/watch_training.py 127.0.0.1:8788 40It blocks on GET /teach/status, then exports the finished run (never judge a
raw checkpoint — export-walk bakes the normalizer in) and prints:
scripts/pick_report.py — picks, can displacement, base command, chassis
turn, floor dragging, torque saturation, and the wrist-vs-axis SLOPE with
its p-value.scripts/reward_budget.py — what each reward term is worth per episode.1. Evaluate a policy under the flags it TRAINED with. eval_env_kwargs(run)
reads them off run.json — what the policy SAW (OBS_FLAGS) and what it was
ALLOWED TO DO (DYN_FLAGS). Getting this wrong does not look like an error, it
looks like a RESULT:
| the mistake | what it reported | the truth |
|---|---|---|
| attitude slots filled for an axis-blind policy | 0/12 picks | 10/12 |
publish_size omitted from the guard | 3 grips | 63 |
base_lock omitted from the guard | 23.7 deg of chassis turn | 0.3 deg |
All three happened on 2026-09-25, and the last two happened AFTER a guard was
written — because the guard covered some flags and read as covering all of
them. A new flag that changes the observation goes in OBS_FLAGS; one that
changes the dynamics goes in DYN_FLAGS.
2. Read the reward budget after ANY change to what a term measures. Retargeting the progress term from the chassis to the gripper without rescaling dropped it from ~+18 per episode to +1.47, and two full runs trained with almost no approach shaping before anyone noticed. Changing what a term MEASURES changes its MAGNITUDE.
3. Check a new knob's reachable set before believing in it. Print the share of ticks it fires on. A rung calibrated under different semantics from where it was applied fired on 1 of 40 episodes instead of the predicted 15%.
Knobs reach the env as MICRODUCK_MOSS_* in the /teach request's env, and
Body.train_env_kwargs copies them into run.json so the run records what it
trained on. Add every new knob there, or the run is unreproducible and the
loop above cannot evaluate it correctly.
curl -s -X POST http://127.0.0.1:8788/teach -H 'Content-Type: application/json' \
-d '{"text":"pick up the can","robot":"moss","initFrom":"<donor>",
"env":{"MICRODUCK_MOSS_PICK_RUNG":"2","MICRODUCK_MOSS_BASE_LOCK":"1"},
"steps":800000,"weights":{}}'Restart the lab BEFORE launching if any env module changed (the stage previews
in-process; the trainer is a subprocess), and confirm the trainee is really on
stage — see the two sections in microduck_local/AGENTS.md.
Warm starting into a NEW observation slot needs the normalizer reseeded
first: a donor trained with a slot dead carries variance ~1e-10 there, so a
real value arrives as a z-score in the thousands and the policy stops working.
Copy the donor run, overwrite obs_rms.mean/var for those slots with the
MEASURED distribution, warm-start from the copy.
© jonathanhawkins, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/train-loop of jonathanhawkins/microduck-lab.
Open the folder on GitHubat commit bbf0326
Train Loop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Train Loop this skilljonathanhawkins/microduck-lab | 129 | — | ~947 | Automated safety check: Pass | Apache-2.0 | |
| Add Uint Supportpytorch/pytorch | 104k | 2 repos | ~2.3k | Automated safety check: Pass | Custom licence | |
| Segment Anything Model GuideOrchestra-Research/AI-Research-SKILLs | 13k | 9 repos | ~3.3k | Automated safety check: Pass | MIT | |
| Add Oponnx/onnx | 22k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| CLIP Image-Text MatchingOrchestra-Research/AI-Research-SKILLs | 13k | 8 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Add Function Bodyonnx/onnx | 22k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 |
pytorch/pytorch
Add unsigned integer (uint) type support to PyTorch operators by updating ATDISPATCH macros.
Orchestra-Research/AI-Research-SKILLs
Guide to using Meta's Segment Anything Model for zero-shot image segmentation with point, box or mask prompts, or automatic mask generation.
onnx/onnx
Add a new ONNX operator or update an existing operator to a new opset version.
Orchestra-Research/AI-Research-SKILLs
Explains OpenAI's CLIP model for zero-shot image classification, image-text similarity, semantic image search and content moderation, with install steps and code patterns.
onnx/onnx
Add a function body definition to an ONNX operator, defining how it decomposes into simpler ops.
PaddlePaddle/Paddle
A skill your agent uses when working with Paddle's distributed training system: understanding parallelism strategies (DP, ZeRO, TP, PP, SP), semi-automatic parallel with ProcessMesh + shardtensor…
jonathanhawkins/microduck-lab
Record a /sim WORLD scenario — the living room, the playroom tidy loop, a soccer pitch, any scenario JSON — to an mp4, a captioned contact sheet and an events log, headless and under a seed, then…
jonathanhawkins/microduck-lab
Render a microduck policy rollout to video AND to a frame contact sheet with per-frame diagnostics burned in, then READ the sheet to see what the policy actually does.
jonathanhawkins/microduck-lab
Debug the playroom tidy loop (Track 12) — trace one run state by state, see every release, landing and fall with context, and re-measure the walker facts the brain's constants rest on.
jonathanhawkins/microduck-lab
Restart the microduck dev stack — the duck-lab backend (farm, :8788) and the duck-viewer dev server (:63317).
jonathanhawkins/microduck-lab
Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console.
jonathanhawkins/microduck-lab
Look at what the ACTIVE teach run is practicing right now: renders the live checkpoint under the trainer's own env knobs (actuator, spawn mix, reward gates — read from the live trainer process) and…
Categories
Run the CLOSED training loop on a MOSS/duck policy without a human having to ask "is it done yet": launch through the lab, block until the run finishes, print the standard report and the per-term…. Train Loop is an agent skill from jonathanhawkins/microduck-lab. Run the CLOSED training loop on a MOSS/duck policy without a human having to ask "is it done yet": launch through the lab, block until the run finishes, print the standard report and the per-term reward budget, then adjust and relaunch.
Train Loop fits situations like: A training run is started and its result matters; : train it again; its done check the results; tune the rules and retrain.
Run `npx skills add jonathanhawkins/microduck-lab --skill train-loop -a claude-code`. Or copy the skill folder (.claude/skills/train-loop in jonathanhawkins/microduck-lab) into .claude/skills/train-loop in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jonathanhawkins/microduck-lab --skill train-loop -a codex`. Or copy the skill folder (.claude/skills/train-loop in jonathanhawkins/microduck-lab) into .agents/skills/train-loop in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jonathanhawkins/microduck-lab --skill train-loop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/train-loop, .gemini/skills/train-loop, .github/skills/train-loop and .opencode/skills/train-loop in your project.
Going by SKILL.md and its folder, Train Loop needs the command-line tools its instructions call (uv and curl). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uv and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Train Loop is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 947 tokens (SKILL.md is roughly 3.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Train Loop: Add Uint Support (pytorch/pytorch, 104k stars), Segment Anything Model Guide (Orchestra-Research/AI-Research-SKILLs, 13k stars), Add Op (onnx/onnx, 22k stars) and CLIP Image-Text Matching (Orchestra-Research/AI-Research-SKILLs, 13k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jonathanhawkins (a GitHub user) maintains it in jonathanhawkins/microduck-lab, which has 129 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 1, 2026.
Source: jonathanhawkins/microduck-lab on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.