Skip to content
Start a Dossier
Developers

legal-context/v1: carrying the legal frame between agents

An open proposal for one small block that travels with legal work between agents: where the matter sits, who is asking, for whom, and how the answer may be handled. Codossier will send it on every answer of its quick skills, and reads it when your agent sends it.

Status: proposed

This is the specification as proposed. Codossier starts sending and reading the block with its quick skills (triage, consult, document review), not yet available. The shape is published now so agents can be built to it. Other legal vendors are invited to adopt it: it is deliberately small, and the identifier is https://codossier.com/a2a/ext/legal-context/v1.

Why

When an agent hands a legal question to another agent, the frame gets lost: the jurisdiction, whether the asker is a party or their lawyer, whether the answer is privileged. The receiving agent guesses, and the answer comes back without saying what it assumed. This block makes the frame explicit in both directions: what the caller states, and what the answer assumed and how it may be handled.

Declaring it

  • A2A 1.0: in the agent card's capabilities.extensions with uri set to the identifier and required: false. A caller activates it by sending the identifier in the A2A-Extensions header, and puts the block in the message's metadata under the identifier.
  • MCP: in _meta under com.codossier/legal-context, on the tool call in and on the result out.
  • REST: the context object of a quick ask (codossier.quick-ask/1) in, and the legal_context object of the answer (codossier.insight/1) out.

Inbound: what a caller may state

FieldWhereRequiredMeaning
jurisdictionblocknoWhere the matter sits: US-CA for a state, US for federal or general, or a country code.
forumblocknoThe forum, if known: state trial court, federal district court, agency…
audienceblocknoprofessional or individual: the register of the answer.
roleblocknoThe asker's role: party, counsel, advisor, family, other.
matterblocknoA matter of the caller's own to read with the ask. It is read only if the caller's credentials may read it.
on_behalf_ofblocknoThe person an agent acts for, when it acts for someone.
privilegeblocknoattorney_client, work_product, none or unknown, as the caller understands it.

A stated value always beats an inferred one, and comes back marked basis: "stated".

Outbound: what every answer carries

legal_context
{
  "jurisdiction": { "value": "US-CA", "basis": "inferred", "forum": "state trial court" },
  "audience": "individual",
  "role": "party",
  "privilege": "none",
  "handling": "Not privileged. Do not assume confidentiality protections; share only with the person and their counsel.",
  "retention": "kept 12 months under the account; delete it from the account's history",
  "source": "Codossier practitioner knowledge base; not case-law research",
  "notice": "Legal information, not legal advice. No lawyer-client relationship is formed."
}
FieldRule
jurisdiction.basisstated (the caller said so), inferred (read from the text or the document) or default (nothing to go on: US).
privilegework_product only when a professional works a matter they own; none for individuals, because Codossier is not their lawyer; unknown when the caller did not say.
handlingFixed text per privilege label, so a receiving agent can carry it verbatim.
noticePresent for individuals: legal information, not legal advice.

Isolation

  • Naming a matter never widens access: the caller's credentials decide what may be read, as on every other door.
  • No ask reads any matter unless one is named.
  • Values are open lists: a receiver must accept a value it does not know and treat it as unknown.

Versioning

The identifier carries the major version. Additions that a receiver may ignore keep v1; anything that would change the meaning of a field is v2 at a new identifier. The schema is codossier.legal-context/1.0 in the contract registry.