@skills/creative/manim-video/ lets load this skill into pi as an extension in ~/.pi/
lets not use @skills/creative/manim-video/scripts/setup.sh directly.
the requirements are installed. lets use a lighter version that will use uv for the python and the manim executatble
and then checks for the other two, but just asks the user to install manually instead of just installing shit
we'll model this as a simple pi extension that works with /manim
given these instructions, can you port everything under @skills/creative/manim-video/ to a new pi extension? do it in a subrepo in ~/dev/
use pnpm dlx gh-axi to create a new repo and then push to it
call it pi-manim-video
install it via pi install git:[REDACTED]:user/repo
and then pi update <same string> to update as we patch
Done — I fully ported skills/creative/manim-video/ into a new pi package/extension repo and wired /manim.
Repo: ~/dev/pi-manim-video
Remote: [REDACTED]:maujim/pi-manim-video.git (created via pnpm dlx gh-axi repo create ... --clone)
Pushed commit: 9542d3b
extensions/manim-video/index.ts
/manimresources_discover to load bundled skill:
skills/manim-video/SKILL.mdskills/manim-video/SKILL.mdskills/manim-video/README.mdskills/manim-video/references/* (all files)skills/manim-video/scripts/setup.shI replaced the old setup behavior with a lighter checker that:
uv checks for Python + Manim executablepdflatex and ffmpegExecuted successfully:
And confirmed via pi list.
If you want, I can now add a /manim-init helper command that scaffolds a fresh project folder (plan.md, script.py, concat.txt) in one shot.
out of curiosity is it possible to make it so this skill is dispatched with a specific model from a specific provider??
Let's say in the future I train a model that is fine-tuned to be really good at generating videos like this.
Yes — absolutely possible.
In pi, skills themselves are just prompt content, but your extension command (/manim) can control model selection before dispatching /skill:manim-video.
In /manim handler:
await pi.setModel(targetModel)pi.sendUserMessage("/skill:manim-video ...")Optionally:
agent_end), orpi.registerProvider())./manim-model set provider/model-id).If you want, I can patch your pi-manim-video extension to do exactly this with a default + optional auto-restore toggle.
can we add into this manim extension that it was created by porting from the hermes skill
and what commit this was done against?
and also link to the specific subdirs we used? This way we can update if the skill gets updated yk
Yep — done ✅
I added explicit provenance tracking to ~/dev/pi-manim-video and pushed it.
README.md now includes:
e902e55b26aab4658debab070fc1048b22517158references/scripts/UPSTREAM.md (new file) with:
setup.sh is intentionally adapted (lightweight, no auto-install)22cd475[REDACTED]:maujim/pi-manim-video.gitIf you want, I can also add a tiny /manim-upstream command that prints this provenance info in-chat so you can quickly inspect source/commit without opening files.
commit and push this. Does this skill ask the agent to run commands always insiade a fresh uv env, or to use the users env, or to at least do something like uvx manim
Committed and pushed already ✅
Latest pushed commit is:
22cd475 on master[REDACTED]:maujim/pi-manim-video.gitAnd right now: no uncommitted changes.
On your question: currently this skill does NOT enforce fresh uv env / uvx manim.
What it does today:
uv only to verify availabilitymanim -ql ...manim -qh ...pip install ... snippets for optional voiceover toolingSo execution is effectively in the user’s existing env / PATH, unless the model decides otherwise.
If you want, I can patch it so the skill consistently prefers one strategy, e.g.:
uvx manim ... (tool-style ephemeral execution), oruv run --no-project manim ..., oruv venv && uv pip install ... instructions.prefer 1) when just running commands doing one off renders
prefere 2) and 3) in more mature codebases
Done — committed and pushed ✅
798b1c8docs: prefer uvx for one-offs and uv run/project env for mature workflows[REDACTED]:maujim/pi-manim-video.gitPreviously it didn’t enforce this clearly.
Now the skill/docs explicitly guide:
uvx manim ...uv run --no-project manim ...uv env (venv + pinned deps)I updated:
skills/manim-video/SKILL.mdskills/manim-video/references/rendering.mdskills/manim-video/references/troubleshooting.mdskills/manim-video/references/production-quality.mdIf you want, I can also add a strict /manim-mode oneoff|mature|repro command that injects the chosen policy into the session automatically.
commit and push then update Pi
Done ✅
798b1c8 docs: prefer uvx for one-offs and uv run/project env for mature workflowspi update git:[REDACTED]:maujim/pi-manim-videook one more update. when the model is running the render command, teach it to pipe stdout and stderr to a file or to stream it elsewhere. I don't want all the context of the stdout video render to fill up ctx but i also wanna have errors and success to be read to keep the workflows going.
Done ✅ — updated, committed, pushed, and refreshed in Pi.
I taught the extension/skill to keep render logs out of LLM context by default:
skills/manim-video/SKILL.md
stdout+stderr to log filetail -n 120)tee only when explicit live streaming is neededskills/manim-video/references/rendering.md
uvx + log redirection, failure handling, optional tee streaming).extensions/manim-video/index.ts
/manim now appends a short render-policy instruction every time it dispatches /skill:manim-video, to reinforce this behavior operationally.0389ed9feat: enforce render log redirection to keep Manim output out of contextorigin/masterpi update git:[REDACTED]:maujim/pi-manim-video