feat(intent): NIL Intent — the single model-facing payload (reads + writes)#60
Merged
Conversation
The model emits ONE Intent {about, where[Binding], seek}; IntentResolver
deterministically maps it to a governed lean read over the ReadPlane and returns
an Outcome (result | structured refusal). No tool selection, no filter built by
the model, no keyword matching — the correct path is the only obvious one, so even
a weak model (Haiku) reliably handles "find Dina" under a vague prompt.
- dataplane/intent.py: Intent/Binding/Outcome, REL_TO_OP (fixed enum, not keywords),
pluggable BindingResolver (graph supplies ontology; IdentityResolver default),
IntentResolver for seek=the|all|count over the ReadPlane.
- MCP: single nil_intent tool (routes through the byte-cap backstop).
Proven live on real Odoo: nil_intent(about=res.partner, where=[name contains دينا],
seek=the) → the contact; vague "ابحث عن دينا" on Haiku now finds her via nil_intent.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… resource.*)
nil_intent now carries reads AND writes. A `change{op:create|update|remove, set}`
resolves deterministically through the UNIVERSAL generic-CRUD spine (resource.*) —
no adapter-specific verb map, no keyword matching: OP_TO_RESOURCE maps op→resource
verb; update/remove first resolve the target record(s) by `where` (a read), then
propose per record. Governance is unchanged — a change returns a PREVIEW the gate/
owner commits (HIGH held for approval, MEDIUM two-step).
So the model emits ONE payload for everything; the system resolves+governs+executes.
Proven live on real Odoo: create (executed, id 55) and remove (held HIGH for owner
approval) both via nil_intent(change=...). 435 tests pass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The model emits ONE Intent {about, where[Binding], seek | change}; the system resolves+governs+executes deterministically and returns an Outcome. No tool selection, no filter built by the model, no keyword matching — universal at the contract level.
Proven live on real Odoo: find دينا (read), create (executed id 55), remove (held HIGH for approval). 435 tests pass.
🤖 Generated with Claude Code