Edit & maintain tools
Once a tool exists, this group of skills handles every kind of change.
update-tool
non-destructive
Trigger: “Change the input X to Y”, “Add an output for Z”, “Make the slider go up to 100”, “Switch to multipart upload”.
Surgical edits to tool.json, main.py, and pyproject.toml. If
dependencies change, runs uv sync. Then revalidates and surfaces the
report.
Routes elsewhere if:
- The change is just a rename ?
rename-tool. - The tool is broken, not being changed ?
debug-tool. - Just updating tags ?
tag-tool.
rename-tool
destructive
Trigger: “Rename foo to bar”, “Change the id from x to y”.
Side effects (listed before confirmation):
- Stop the tool if running (best-effort via
/api/tools/<id>/stop). - Rename the folder via
pathlib.Path.rename(on Windows, open.venvfile handles may raise PermissionError). - Update
tool.jsonidfield. - Rewrite three tables in
pixie.db:runs,tool_state,validation_reports.
The new id must be kebab-case and must not already exist. Validates after rename.
fork-tool
non-destructive
Trigger: “Duplicate this tool”, “Make a copy of foo called bar”, “Fork the lorenz tool”.
Copies the entire tool folder (including .venv/ via uv sync in the
copy) so the duplicate can be customised independently. Useful for
“like this tool but with a different model” scenarios.
archive-tool / unarchive-tool
non-destructive (reversible)
Trigger: “Archive foo”, “Hide bar”, “Mothball baz” / “Unarchive foo”, “Bring back bar”.
Archive:
- Set
tool_state.archived = 1(hides from sidebar by default). - Delete
.venv/to free disk. - Source code remains; runs and reports stay in
pixie.db.
Unarchive:
- Set
archived = 0. uv syncto rebuild.venv/.- Re-validate.
This is the answer when you don’t want the tool around but aren’t ready
to delete it (vs. remove-tool, which is permanent).
remove-tool
destructive (permanent)
Trigger: “Delete the foo tool”, “Uninstall bar”, “Remove the example-compound-interest tool”.
Refuses to delete tools/example-compound-interest/ — the canonical
reference is protected.
Side effects (listed before confirmation):
- Stop the tool (best-effort).
- Recursively delete the folder including
.venv/anddata/. - (Run history and reports for the tool stay in
pixie.dbfor historical accuracy.)
Requires explicit “yes” confirmation. No undo.
lint-tool
non-destructive (read-only)
Trigger: “Lint foo”, “Check the style of bar”, “Scan baz for hardcoded secrets”.
Static checks only — never runs the tool or the validator. Catches:
- Missing
tool.jsonmetadata fields (description, version, category, icon). - Labels not in sentence case.
- Missing input descriptions.
- Heavy imports at module level (slows cold-start).
print()calls inmain.py(should uselogging).requestsinstead ofhttpx.- Hardcoded API keys / tokens / passwords (reports line numbers only,
never values; recognises common prefixes like
sk-,ghp-,xoxb-). .envnot in.gitignore.
Allowed tools: Bash, Read, Glob, Grep. Cannot modify files.
inspect-tool
non-destructive (read-only)
Trigger: “Show me the foo tool”, “Describe bar”, “What does baz do?”
Reads tool.json, main.py, pyproject.toml, README.md and the
latest validation report. Returns a one-page summary: id, name, layout,
inputs (count + types), outputs (count + types), dependencies, secrets,
status. Doesn’t list every run — use view-runs for that.
organise-tool
non-destructive
Trigger: “Tidy the foo tool”, “Restructure bar’s files”, “Organise baz”.
Restructures the tool’s internal Python files into the src/<id>/
layout, adds tests/, notebooks/, CHANGELOG.md skeletons, then
re-validates. For tools that have outgrown the initial flat layout.
migrate-tool-format
non-destructive
Trigger: “Migrate foo to the latest schema”, mentions of “old format” / “schema version” / “deprecated field”.
Upgrades a tool whose tool.json uses an older schema_version to the
current one, preserving behaviour and re-validating. Useful after a
Pixie release that bumps the schema.
revalidate-all
non-destructive (read-only writes only reports)
Trigger: “Re-validate every tool”, “Re-check all tools”, “Audit after upgrade”.
Walks tools/ and runs the validator against every tool. Reports
pass/warn/fail counts. Use after a Python or Pixie upgrade, or when
you’ve just installed a batch of tools.
The skill emits a small per-tool status line so you can spot regressions:
? pass compound-interest? pass lorenz-ode-solver? warn whisper-transcription (slow shutdown — 5.7s)? fail rag-with-citations (sample run failed: APIConnectionError)When done, suggests debug-tool <id> for any failures.