And learns the pattern.
pip install evoducenpm install evoduceExact reasons returned so the AI can fix it.
Bring your rules to the decision system you already use.
Four tools on one engine. Use one on its own, or chain them so your AI suggests, gets checked, fixes what failed, and only then commits.
Is this change safe? A yes or no against your must-have rules, with the exact conflict when it's no.
/v1/verifyMust-have rules still decide; nice-to-haves add a score and list what the change misses.
/v1/verify/gradedWhen suggestions compete, keep the most valuable set that still fits every rule.
/v1/optimizeAdd an approved change and get the updated model back. Re-check the whole thing at any time.
/v1/accept · /prove · /auditAI will keep getting better at suggesting changes. What it can't do is vouch for them. These are the properties a check needs, whichever model wrote the change.
A pass means every rule holds, every time. The answer is a formal proof, not a model grading its own work.
Every rejection names the rule it breaks and shows the conflict, which is exactly what your AI needs to fix it.
Must-haves block a change; nice-to-haves only score it. When suggestions compete, the best set that fits wins.
Claude, an open-source model or your own fine-tune. Evoduce checks the change, not who wrote it.
Your categories, rules and existing terms as JSON, or build them in the visual editor. Store it wherever you like.
A pass means it's safe to accept. A rejection tells you which rule it breaks and why.
Hand the reason back to your AI to fix, then accept the passing version and get the updated model back.
curl https://$EVODUCE_HOST/v1/verify \ -H "Authorization: Bearer $EVODUCE_KEY" \ -H "Content-Type: application/json" \ -d '{ "vocabulary": '"$(cat vocab.json)"', "proposal": { "name": "sliding_on", "duration": "temporary", "type": "contact", "symmetric": true } }'
# pip install evoduce from evoduce import Client nse = Client() # reads EVODUCE_API_KEY r = nse.verify(vocab, "sliding_on", duration="temporary", type="contact") if r.sat: vocab = nse.accept(vocab, "sliding_on", ...).vocabulary else: retry_with(r.violated_rules, r.counterexample)
// npm install evoduce import { Client } from "evoduce"; const nse = new Client({ apiKey: process.env.EVODUCE_API_KEY }); const r = await nse.verify(vocab, { name: "sliding_on", duration: "temporary", type: "contact", }); if (!r.sat) console.log(r.violated_rules, r.counterexample);
Use your verified terms as typed Choice options. Evoduce checks the rules you give it first, asks Jev or another configured decision model only when needed, and proposes reusable rules from confident answers.
Name the allowed terms and the structural rules they must follow. New terms enter only after verification.
NS VocabularyPredicate names become Choice options. Use Jev now, or route the same question to a configured open model.
state + questions → choiceConfident answers teach decision rules. When facts force one answer, the solver returns it without another model call.
facts → rules → answerEach template is a real vocabulary from the evaluator's examples. Open one in the playground, break it, then fix it.
Scopes as access level × resource × boundary. Catches a scope the model proposes twice or leaves unclassified.
Relations with direction, temporality and domain. Asymmetric relations must declare their inverse.
Valence × arousal × intensity. Every new emotion has to land on all three axes.
Contact, proximity and containment over time. Shows symmetric relations and inverse pairs.
A soft "prefer reviewed" rule that scores items without blocking them. Try the Graded button.
Run requests from Jev's docs through Evoduce. See when your rules answer, when Jev does, and what the layer can learn.
Open the examples →Design categories, rules and terms in the visual editor. It checks everything as you type and exports the JSON.
Open the editor →This is the live API, no key required, rate-limited per IP. Edit the vocabulary or the proposal, then choose an operation.
// choose an operation
Your first verified extension takes about a minute.
Get a free API key →