A shared toolbox of small CLI utilities, callable directly by both the human and the assistant (and, eventually, by Praxis models at inference time) so neither side has to relay numbers off charts or read/copy/paste data between contexts. Each tool is single-purpose and runs as python tools/<name>.py.
- Naming: verb-prefixed (
fetch_metrics.py,get_runs.py, ...), not bare nouns. Tools read as actions; this also leaves room for them to land in a model-callable tool schema later without renaming. - Dependencies: prefer stdlib. A tool should run from a clean checkout without forcing the user into the project venv or a heavy install.
- Output: human-readable by default, with a
--jsonflag when the tool produces structured data the assistant might want to parse. - Scope: small and focused. New capability = new file, not a new flag on an existing tool.
fetch_metrics.py- hits the running web app's/api/metrics(and/api/dynamicswith--dynamics) and prints a per-series summary table (n, latest, first, min/max, slope per 1k steps, missing count, unicode sparkline) for the current run or--run <hash>. Pass--filter <regex>to narrow series,--jsonfor machine output,--host host:portto point at a non-default server.generate_print_samples.py- materializes the defaultprintdata (25 formats x N) and traces the engagement reward over it, to eyeball the dynamics before any model exists.index_kb.py- builds the knowledge-base FTS5 search index the web app serves at/api/kb/search, readingdocs/,next/, andbuild/runs/directly.
The paper's living-document inputs (
variables.tex,framing.tex,geometries.tex,inlines.tex) are no longer tools - they are part of the codebase underpraxis/pillars/. Regenerate them withpython -m praxis.pillars.build, then build the PDF.