About pythia-verify
pythia-verify is a workflow skill for agents working with Oracle through pythia. It requires session-current command evidence before completion claims and structures the final report around verified and unverified results.
Key features
- 01Evidence required before completion claims
- 02Checks write exit codes
- 03Compares invalid objects with baseline
- 04Runs compile and lint checks
- 05Separates tested from unverified behavior
Use cases
- 01Verifying Oracle changes before reporting completion
- 02Reporting deployment failures and undo steps
- 03Checking whether new invalid objects appeared
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ thaildhe172591/ pythia --skill pythia-verifyAfter installing, type/pythia-verifyin Claude Code to confirm it loaded.
Details
From the project READMEVerifying Before Claiming Done
Announce at start: "Using pythia-verify — checking the evidence before I report."
Phase: Learn → Ask — collect proof from the live database, then report what it shows and what it does not
The most expensive sentence an agent writes is "done" about something that is not. In Oracle it is easy to say: a package can be written and INVALID, a release can stop at statement 7 of 12, a "faster" query can have the same plan. The evidence is three commands away — run them.
The Iron Law
NO COMPLETION CLAIM WITHOUT EVIDENCE FROM THIS SESSION
Evidence is command output you saw after the last change, not a result you remember from before it.
The Checklist
- Every write's verdict — the exit code of each
apply/deploy, read unpiped (| tailreturns tail's 0). Under autopilot:pythia autopilot report, every row. - It compiles —
pythia errors <OBJECT>for every object you touched: empty, or the errors listed. - Nothing else broke —
pythia invalidcompared with the baseline you took inpythia-impact. Anything INVALID now that was VALID then is yours until proven otherwise. - It meets the standard —
pythia lint <files>: zero errors; warnings fixed or named with a reason. - Tables are documented —
pythia cols Tmatches the spec;pythia comments Tsays 0 missing;pythia stats Tlists no unindexed foreign key you created. - Performance claims — the same
pythia explainbefore and after, with the numbers (pythia-tune's report format). - Behaviour — pythia does not run anonymous blocks, so it cannot prove behaviour by itself. Say what was tested (utPLSQL by CI or the developer, a query that shows the new rows) and what was not.
The Report
Done: PKG_ORDER spec+body, T_ORDER_LINE (+6 comments, 1 index)
Evidence: deploy exit 0 (5/5); errors PKG_ORDER: none; invalid: 1, same
as baseline (X_ALREADY_BROKEN); lint: 0 errors, 1 warning (named)
Decisions: status codes N/C/X (agreed); qty NUMBER(12,3) (agreed)
Assumptions: none
Not verified: behaviour under load; ut_pkg_order not run (no utPLSQL here)
Undo: pythia journal restore <entry> (newest first, per object)
Three words are reserved: done (every check passed), broken (exit 3 or new INVALID — say it first), not verified (a check you could not run). Never soften broken into "mostly done".
Red Flags — STOP if you catch yourself thinking
| Thought | Reality |
|---|---|
| "It compiled, so it works" | Compiling proves syntax. Say what proves behaviour, or say it is not verified. |
| "apply said ok earlier" | Earlier was before the last change. Check again. |
| "Those INVALID objects were already broken" | Show the baseline that proves it, or they are yours. |
| "The developer can check the details" | The details are the report. Run the commands. |
| "One statement failed but the rest landed — mostly done" | That is broken, with an undo list. Lead with it. |
| "I'll skip lint, I followed the standard" | Then lint costs one second and says so. |
When NOT to use this skill
- Mid-task, between steps —
pythia-applyalready reads each result; this is the gate before the final word. - Pure exploration with no change made — there is nothing to verify; say what you read.