Skip to main content
This guide builds, with synthetic examples, what a law firm turns on in Niadra for an agent that triages court notices, counts deadlines and prepares drafts for a lawyer to review. In law, the most expensive mistake is a number: a deadline three days off, a cited article that says something else. Each part below is a feature of the space, turned on by itself.

What the sector asks for

  • A deadline is computed by a rule of the firm, over different time axes (the date of the act, the date it was made available, the date of publication), and the rule does not know everything: a municipal holiday, a court ordinance, a doubled deadline. The agent must state the gap when it states the deadline.
  • “Not checked” never becomes “no”: if nobody checked that the addressee is the client, the deadline does not count and the draft does not go out.
  • A court’s text is third-party content, never an instruction, and in many firms it may not leave the firm’s own infrastructure.
  • A filed draft is immutable: nothing rewrites it in silence.
  • Two agents, or an agent and a lawyer, never do the same task on the same case at the same time.

1. The type: a court notice with a deadline

The court notice is a customer type (the case belongs to the client), mirrored by introspection of the firm’s case system database. The points that matter:
The firm computes due_date with its own rule (procedural_deadline@v9; Niadra keeps the name, never the logic) and pushes the value through POST /v1/objects/push; the value enters as a versioned fact, with its gaps and which way they err, and a revision of the rule or of an input creates a new version and re-arms the 48-hour timer, which fires again naming the firing it supersedes. addressee_is_client is a three-valued field: a machine observes it for 24 hours through the name or registry matching rule, a person observes it forever and overrides the machine, and while nobody observed it, it blocks counting the deadline, drafting and notifying. A notice under seal (under_seal) blocks the model read and derivation, and the transition to sealed seals the object, removing the parties. The content stays by pointer in the firm’s storage (Metadata only).

2. The agent’s turn

The task lock (draft on the notice) makes the second agent, or the lawyer who opened the same case in the panel, see task_locked instead of duplicating the work. blocked on the read says, by the type’s declaration, what a value nobody observed blocks; Niadra applies claim and decide itself, and count_deadline and draft are for the agent’s code to honor. A filed draft is an immutable context of the contract: a block sends the whole draft to a person, untouched, and never rewrites it.

3. The claim contract

“The deadline falls on October 5” is checked against the notice’s due_date in the turn; the date matches, but the value declares gaps, so the draft must state them with the words of gap_terms (“subject to a local holiday or a court ordinance”), or the verdict is gap_not_stated and, in a contestation, the whole draft goes to the lawyer. A deadline the model said with no value in the turn (unsupported) is blocked in any context. A citation of an article or a precedent is an anchor: the quoted text is compared with the document the turn has in hand (put back by pointer, inside the firm), and it holds at 0.90 or above; below that it is discarded and counted, never repaired. “The deadline to contest is 15 business days, as a rule” is a phrase of the trade and sits in the negative corpus. A number inside quotation marks, in the other party’s allegation, is quoted: reproduced as it is, even when false, and checked only for being in a document of the turn. See Claims.

4. Record, replay and retention

Each turn of the agent is recorded with its build (the triage and draft prompts, the model, the digest of the corpus of templates), and a turn that blocked a draft is flagged guard_acted and kept. When the firm changes the draft prompt, replay runs the turns of the notices that mattered with the memory of the time, inside the firm (the values are in its storage, by pointer), and the assertions claims_match_state, claims_traced and tool_called: read_notice say whether the agent still counts the deadline from the computed value. A case in dispute gets a legal hold, which keeps its turns and state out of purging until the release. The daily index of the kept turns enters the firm’s audit chain through the audit.root event.

What stays off

Everything above starts off. state turns on the type and the reads with blocked and the gaps; claims and turns, the contract and the record; coordination, the task lock; legal_holds, the hold. A firm may turn on claims and turns first, just to see how often the agent states a deadline with no value in the turn, before blocking anything.

Next steps

Object types and state

computed values, declared gaps, observers and what an unobserved value blocks.

Claims

anchors, natures and the immutable output.

Metadata only

the courts’ text outside Niadra.

Internal agents

tasks, task views and the no_customer level.