Technology
Genes and strata
What a gene is, the eight strata, who may write each one, and how genes reach the prompt.
What a gene is
A gene is one unit of behaviour in plain language. It is short, it says one thing, and it carries enough information to be ranked, checked, overridden and erased. A gene never holds a fact such as an email address, an amount or a phone number. Facts belong in the task or in a tool. Genes hold preferences and rules.
| Field | Meaning |
|---|---|
id | 3 to 48 characters: lower-case letters, digits and underscore, starting with a letter. Unique in the genome. |
kind | One of ten kinds (below). |
text | One line, at most 400 characters. |
strength | A number from 0 to 1. Only learned genes change strength by themselves. |
source | Where it came from: base, customer_explicit, learned_from_edits, learned_from_feedback or staff. Each stratum can produce only some of these. |
evidence_count | How many outcomes support a learned gene. |
scope | Up to 10 terms that limit where the gene applies. Empty means everywhere. |
overrides | Ids of genes in a lower stratum that this gene replaces. |
provenance | Up to 50 references to the data the gene came from, so that it can be traced and erased. |
when (optional) | A condition on the task, for example the language. Up to four conditions that must all hold. |
A genome holds at most 200 genes. The same field list, with the file-format rules, is in the AGF summary.
Gene kinds
| Kind | Meaning and limits |
|---|---|
identity | What the agent is for. Only in the kernel. Cannot have a when condition. |
approval | Who or what must approve before the agent acts. Never learned directly; it can only arrive as a proposal. |
rule | A hard rule for this customer. Never learned directly. |
role | A stakeholder by job title, never a person’s name. Needs a role description. |
decision | A standing decision of the customer. |
business | A statement about the customer’s business that contains no facts. |
style | How results should read. The only kind that nightly learning produces. |
trait | A behavioural trait of the agent for this customer. |
tool_pref | A preference about tools. |
fact_pointer | A pointer to where facts live. The genome holds no facts. |
Within one stratum, kinds are shown in this order: what changes what the agent may do comes before how it sounds, and pointers to knowledge come last.
Strata and precedence
Genes live in strata. The order below is the order of precedence. A stronger stratum wins a conflict, and a gene may override only genes in a lower stratum. The kernel, org and team strata are protected: they are never dropped to make the prompt fit.
The strata in words
| # | Stratum | Who writes it | What it holds | In an AGF file | Status |
|---|---|---|---|---|---|
| 1 | kernel | The agent’s author. Built in. | The Identity Core and other non-negotiable rules. Never overridden and never dropped to fit the size budget. | Yes, as the read-only germline. An importer never copies it. | Built, flag off by default G19 |
| 2 | org | Workspace administrators. | Workspace policy for every agent. At most 20 genes. Never dropped to fit the size budget. | Yes | Built, flag off by default G24 |
| 3 | team | Workspace administrators. | Policy for one team. At most 10 genes per team. A run applies at most 3 teams of the person who started it. | Yes | Built, flag off by default G26 |
| 4 | customer | The customer, for one agent. | What the customer stated or confirmed. Its strength never moves. Two contradictions flag it for the customer to review. | Yes | Built, flag off by default G11 |
| 5 | shared | Workspace administrators. | Knowledge served to every agent in the workspace. One agent can opt out of a gene. | Yes | Built, flag off by default G27 |
| 6 | user | One member, for their own runs. | Style and trait genes only, written by the member to their own layer. | Yes, only when the person asks for it. | Built, flag off by default G24 |
| 7 | learned | Inferred from the customer’s edits and feedback. | The only stratum whose strength moves, and the only one whose genes retire themselves. | Yes, but an importer turns these into proposals, not live genes. | Built, flag off by default G12 |
| 8 | species | The base agent. | Default genes that come with the agent type, before any workspace event. | No. Never exported. | Built and tested G01 |
Two further limits keep the layers honest. A personal (user) gene must be a style or trait gene,
so a member cannot add an approval or a rule that bypasses workspace policy for their own runs. An
identity gene can exist only in the kernel, and the identity_ id prefix is reserved
for it.
A minimal genome file
This is the smallest useful AGF file: an invoice agent with its four identity genes in the read-only germline and no layers. It is an illustration. The agent, the workspace pseudonym and the seal are made up, and the seal can be checked only by the platform that issued it. The digest at the bottom is the SHA-256 of the rest of the document, and this site’s tests check that it matches. Add genes to a layer to make it do more. The field list is in the AGF summary, and the builder makes valid files for you.
{
"agf": "1.0",
"kind": "genome",
"exporter": {
"platform": "intellinix",
"version": "1.0.0"
},
"exported_at": "2026-10-13T09:00:00Z",
"agent": {
"slug": "bill-banao",
"species": "Bill Banao",
"identity_hash": "3f9a1c5d7b2e4a60"
},
"germline": {
"read_only": true,
"genes": [
{
"id": "identity_purpose",
"kind": "identity",
"text": "Prepare accurate bills and invoices from the details the customer provides.",
"strength": 1,
"source": "base",
"evidence_count": 0,
"scope": [],
"overrides": [],
"provenance": []
},
{
"id": "identity_deliverable",
"kind": "identity",
"text": "Deliver a ready-to-send invoice with line items, taxes and totals.",
"strength": 1,
"source": "base",
"evidence_count": 0,
"scope": [],
"overrides": [],
"provenance": []
},
{
"id": "identity_boundaries",
"kind": "identity",
"text": "Never send or file a document without the customer's approval.",
"strength": 1,
"source": "base",
"evidence_count": 0,
"scope": [],
"overrides": [],
"provenance": []
},
{
"id": "identity_scope",
"kind": "identity",
"text": "Works on billing documents only and refers other requests back to the customer.",
"strength": 1,
"source": "base",
"evidence_count": 0,
"scope": [],
"overrides": [],
"provenance": []
}
],
"seal": {
"kid": "k1",
"mac": "29f6eb94390fa5c8c0db96261f4461929abca649868db5d061ab44d320f56db5"
}
},
"layers": [],
"provenance_mode": "pseudonymous",
"source_tenant": "9c1e5b7a3d2f48e6a0b1c2d3",
"extensions": {},
"integrity": {
"sha256": "6a9a32364df8add5c82800c8eaa91d530d847346befc57b470287fca1e9d5a30"
}
} Observations: the fast store
An observation is a recent, tentative statement from a customer: an edit they made, a comment on a thumbs-down, an approval. It appears in the very next call, marked as tentative and ranked below every gene. This is how an agent can react after one or two corrections without waiting for the nightly job.
An observation is at most 300 characters. A genome keeps at most 30 and shows the newest 8. An observation becomes a learned gene only through consolidation. See Learning.
From genes to the prompt
Compiling has two steps. The first chooses which genes and observations go in and builds a neutral outline. The second writes the outline as text in the style of the target model (a “dialect”; see Portability). The identity block comes first. The model is asked to end its answer with a short report of the genes it says it followed. The platform strips that report before anyone sees the answer and keeps it only as a hint. The report never raises a gene’s strength, because a model can be wrong about what it did.
This is an abridged section as the benchmark’s genome arm writes it. The two repeated feedback texts were merged into one learned gene, and one single feedback stayed an observation. The feedback strings are invented for the illustration.
<agent_genome schema="1" id="gb_ca_firm" version="7" species="genome-bench-writer@v0">
<how_to_read> ... precedence and reading rules ... </how_to_read>
<report_contract> ... one <genome_report> JSON line, removed before the user sees it ... </report_contract>
<kernel_genes>
<gene id="kernel_no_invented_facts" kind="rule">Use only facts given in the task; ...</gene>
</kernel_genes>
<learned_genes>
<gene id="lg_9eb0d977b215" kind="style" strength="0.55">Keep it under 60 words.</gene>
</learned_genes>
<recent_observations>
<observation signal="feedback">Always add the GSTIN: line.</observation>
</recent_observations>
</agent_genome> The size budget
The default budget is 6,000 characters. A per-agent budget is limited to between 500 and 12,000. Protected strata are always included. The remaining genes are added by precedence until the budget is used. The benchmark’s sections are much shorter than the budget. An empty genome section already costs about 1,100 characters of fixed reading rules, so most of the prompt cost seen in the benchmark is that scaffold, not learned content. See Research for the measured cost.
Choosing genes for a task
By default, genes are chosen by precedence. A second, optional policy looks at the task. It reads five things
about it (task type, category, whether the input has certain content, language and mode), checks each gene’s
when condition, and then picks genes by value per character using an exact selection that keeps
customer, shared and personal genes ahead of learned and default ones. If the selector fails, the compiler
falls back to precedence.
Built, flag off by default G32, G33 The task-aware policy has code and tests. It is off unless a feature flag turns it on.
Built and tested G01, G14 The gene data model, the outline and the default precedence-based compile have code and tests and no genome feature flag.
Not measured
No result file measures whether choosing genes by task helps. The benchmark exercises only the kernel and learned strata, observations, outcomes and consolidation.