Acceptance Patterns
Acceptance is up to the developer. The framework gives the agent governed candidate material; the agent decides whether to accept, reject, review, refine, or explicitly materialise selected fields through its host platform.
The Core Principle
Large Language Models act as probabilistic generators, producing outputs that cannot be trusted implicitly. Generative Layers addresses this by keeping raw outputs as candidate material outside the host agent's belief base. The host agent operates as a symbolic gatekeeper: it inspects fields, records peer review or other evidence, previews admissibility, and then records a final accept or reject decision. Acceptance does not automatically insert a BDI belief; it makes the candidate accepted GL-side knowledge, after which the host agent may explicitly materialise selected fields using its own belief-update or domain-action mechanisms.
View current examples repositoryImplemented Acceptance Patterns
The following patterns are reusable implementation patterns. They show concrete ways to validate, inspect, review, refine, compare, accept, or reject candidate material using the same governance lifecycle across ASTRA, Jason, and JaCaMo. Any update to the host belief base remains an explicit step in the agent program.
Application-Level Governance Blueprints
The blueprints below show application designs for developers and future research work, using command combinations to compose larger governed BDI architectures.
- Product Owner Agent: Uses
call(poBind, "backlog", "llm.answer", "ANSWER", specPrompt, "stories", projectContext)to draft backlog material;candidate(storyRes)resolves the candidate andget(storyCand, "stories")extracts generated stories. - Developer Agent: Uses
call(devBind, "implement_story", "llm.answer", "ANSWER", storyPrompt, "code,language", devContext)to produce candidate code, then resolves the candidate withcandidate(codeRes). - Tester Agent: Compiles and tests the generated code outside GL; it may use
check(codeRes)only for GL validation/status, then records test evidence withjudge(codeCand, "tester", verdict, confidence, rationale), where the verdict isAPPROVEorREJECT_VERDICT. - Security Auditor Agent: Runs static/security checks outside GL and records the audit with
judge(codeCand, "security_auditor", verdict, confidence, rationale), using the same verdict values. - Governance Plan: Evaluates
decide(codeCand). If inadmissible, it callsreject(codeCand, "failed audit")and starts a new correctivecall. If admissible, it callsaccept(codeCand, "all checks passed"); the host agent then stores, builds, or publishes the code through its own domain plan.
- Triage Agent: Uses
call(triageBind, "clinical_lookup", "llm.answer", "ANSWER", symptomsPrompt, "lookup_keys", "")to generate search terms;candidate(keyRes)andget(keyCand, "lookup_keys")expose them to the search plan. - Search Agent: Queries trusted clinical repositories outside GL and may assert retrieved papers into the local BDI belief base through normal host-agent adoption logic.
- Diagnostic Agent: Uses
call(diagBind, "draft_report", "llm.answer", "ANSWER", patientPrompt, "finding,risk,citations", evidenceContext)to produce a candidate report, then resolves it withcandidate(diagRes). - Safety Review: Reads fields with
get(diagCand, "citations")andget(diagCand, "risk"), checks them against trusted evidence outside GL, then records evidence withjudge(diagCand, "safety_auditor", verdict, confidence, rationale). - Resolution Plan: Evaluates
decide(diagCand). If inadmissible, it callsreject(diagCand, "unsupported report"); if admissible, it callsaccept(diagCand, "verified report")before any explicit BDI/domain adoption of the report.
- Scouter Agent: Uses
call(scoutBind, "market_scan", "llm.answer", "ANSWER", marketPrompt, "item,price,trend", marketContext), resolvescandidate(marketRes), and extracts opportunity fields withget. - Negotiator Agent: Uses
call(negotiatorBind, "counter_offer", "llm.answer", "ANSWER", negotiationPrompt, "offer,price", negotiationContext)to draft a candidate counter-offer. - Budget Guard: Extracts
get(offerCand, "price"), checks the proposed price against the agent's budget rules outside GL, and records the result withjudge(offerCand, "budget_guard", verdict, confidence, rationale). - Commit Plan: Evaluates
decide(offerCand). If inadmissible, it callsreject(offerCand, "outside budget"); if admissible, it callsaccept(offerCand, "within budget"), after which the host agent may commit or send the contract through its own domain action.
- Monitor Agent: Receives real-time telemetry from smart sensors and updates BDI beliefs or recovery goals outside GL.
- Planner Agent: Uses
call(plannerBind, "route_plan", "llm.answer", "ANSWER", anomalyPrompt, "route,load_estimate", gridContext)to generate a candidate routing plan and resolves it withcandidate(routeRes). - Validation Guard: Runs a simulation outside GL using
get(routeCand, "route")andget(routeCand, "load_estimate"), then records the simulation result withjudge(routeCand, "load_simulator", verdict, confidence, rationale). - Decision Loop: Evaluates
decide(routeCand). If inadmissible, it callsreject(routeCand, "capacity violation predicted")and issues a new correctivecall. If admissible, it callsaccept(routeCand, "safe route confirmed"); only then may the host agent execute the recovery action through its own domain layer.
- Perception Agent: Records player choices and updates social relationship beliefs within the BDI belief base outside GL, for example
player_relation(NPC, player, hostile). - Dialogue Agent: Uses
call(dialogueBind, "npc_dialogue", "llm.answer", "ANSWER", dialoguePrompt, "dialogue,tone", sceneContext)to generate a candidate dialogue line and resolves it withcandidate(dialogueRes). - Lore Auditor: Reads
get(dialogueCand, "dialogue")andget(dialogueCand, "tone"), checks them against world lore and content policy outside GL, then records the result withjudge(dialogueCand, "lore_auditor", verdict, confidence, rationale). - Adopt & Speak: Evaluates
decide(dialogueCand). If admissible, the agent callsaccept(dialogueCand, "lore compliant")and then records or speaks the line through its own game-domain action; otherwise, it callsreject(dialogueCand, "lore or tone violation")and starts a retry plan.