The AI Coding Memory kit, mapped

Every entity type, relation, status, property and guideline in AI Coding Memory 1.5.0, the schema the author's team runs. Drawn from the kit definition on 2026-11-03. Emails and repository names in the examples are placeholders.

Shared, durable memory for software teams that work with AI coding assistants (Claude Code, Codex, Cursor, ...). Tasks, features, decisions, proposals/hypotheses/questions, errors, PR/deploy events, AI sessions and addressed teammate messages with read state, keyed deterministically so every person and tool lands on the same record, plus a relation graph and the guidelines assistants follow to recall, record and hand off work.

12entity types
219properties
35relations
52linked type pairs
8standards
16playbook templates
6document tags

The map

People · ScopePlanDeliverCoordinateFeature → Project: in_projectTask → Project: in_projectDecision → Project: in_project; Decision → Project: applies_toInquiry → Project: in_projectError → Project: in_projectEvent → Project: in_projectAI Session → Project: in_projectMessage → Project: in_projectTask → Person: owned_by; Task → Person: created_by_personFeature → Person: owned_by; Feature → Person: created_by_personError → Person: owned_by; Error → Person: created_by_personInquiry → Person: owned_by; Inquiry → Person: created_by_person; Inquiry → Person: directed_toProject → Person: owned_by; Person → Project: contributes_toDecision → Person: created_by_person; Decision → Person: decided_byEvent → Person: performed_by; Event → Person: reviewed_byAI Session → Person: driven_byPerson → Person: has_managerMessage → Person: sent_by; Message → Person: sent_toTask → Feature: part_of; Task → Feature: blocked_by; Feature → Task: blocked_by; Task → Feature: related_to; Feature → Task: related_toTask → Event: part_of; Event → Task: implements; Event → Task: shipsEvent → Feature: part_of; Event → Feature: implements; Event → Feature: shipsEvent → Event: part_of; Event → Event: includes; Event → Event: rolls_backTask → Task: subtask_of; Task → Task: blocked_by; Task → Task: duplicate_of; Task → Task: follows_up; Task → Task: related_toTask → Inquiry: blocked_by; Task → Inquiry: duplicate_of; Inquiry → Task: duplicate_of; Task → Inquiry: resolves; Inquiry → Task: concernsTask → Error: blocked_by; Task → Error: duplicate_of; Error → Task: duplicate_of; Task → Error: follows_up; Error → Task: seen_in; Error → Task: tracked_byFeature → Feature: blocked_by; Feature → Feature: depends_on; Feature → Feature: related_toFeature → Inquiry: blocked_by; Inquiry → Feature: concernsFeature → Error: blocked_by; Error → Feature: seen_inError → Error: duplicate_ofError → Inquiry: duplicate_of; Inquiry → Error: duplicate_of; Inquiry → Error: concernsInquiry → Inquiry: duplicate_ofTask → Decision: follows_up; Decision → Task: applies_toEvent → Error: fixes; Error → Event: seen_in; Error → Event: introduced_byError → AI Session: seen_in; AI Session → Error: worked_onDecision → Decision: supersedesDecision → Feature: applies_toDecision → Inquiry: resolves; Inquiry → Decision: concernsEvent → Inquiry: resolves; Inquiry → Event: concernsAI Session → Task: worked_onAI Session → Feature: worked_onAI Session → Decision: worked_onAI Session → Inquiry: worked_onAI Session → Event: worked_onAI Session → Message: worked_onAI Session → AI Session: continuesMessage → Message: replies_toMessage → Task: regardingMessage → Feature: regardingMessage → Error: regardingMessage → Decision: regardingMessage → Inquiry: regardingMessage → Event: regardingPerson: A human on the team, a Personize user or not. Keyed by work email.Personkey: emailProject: A repository or product. The scope of every other record.Projectkey: project_keyFeature: A user-visible capability or initiative that groups tasks, decisions and errors.Featurekey: feature_keyTask: A unit of proposed or accepted work with an owner, status and priority.Taskkey: task_keyDecision: A technical or product decision with its rationale; changed only by superseding.Decisionkey: decision_keyInquiry: A proposal, hypothesis or open question (see kind) that needs an outcome.Inquirykey: inquiry_keyEvent: Something with an external id that happened: PR, commit, deploy, release, CI run.Eventkey: event_keyError: A distinct failure, keyed by a normalized-signature fingerprint so repeats land on one record.Errorkey: error_keyAI Session: One AI coding-assistant session (Claude Code, Codex, Cursor, ...) driven by one person.AI Sessionkey: session_keyMessage: A note from one teammate (or their AI assistant) to one recipient, with read state. One record per recipient.Messagekey: message_keyCustomer Account: A refreshable cache of a customer account used by routines: tier, cadence and a health reference. Values are caches, not the source of truth; refresh them from the source. Left empty until customer-level intelligence is enabled for your organization.Customer Accountkey: account_keyMetric Snapshot: One captured metric value for one routine and period, with its source.Metric Snapshotkey: snapshot_key
work link, colored by the type it starts from link to the project or to a person thicker line = more relation types between the two

Hover a line for its relation names. A loop on a box means the type links to itself (for example a task that is a subtask of another task).

Relations (35)

Rows are where an edge starts, columns where it ends. All 35 are declared relations: the assistant writes them when it saves a record.

From ↓ / To →PersonProjectFeatureTaskDecisionInquiryEventErrorAI SessionMessage
Personhas_managercontributes_to
Projectowned_by
Featureowned_bycreated_by_personin_projectblocked_bydepends_onrelated_toblocked_byrelated_toblocked_byblocked_by
Taskowned_bycreated_by_personin_projectpart_ofblocked_byrelated_tosubtask_ofblocked_byduplicate_offollows_uprelated_tofollows_upblocked_byduplicate_ofresolvespart_ofblocked_byduplicate_offollows_up
Decisioncreated_by_persondecided_byin_projectapplies_toapplies_toapplies_tosupersedesresolves
Inquiryowned_bycreated_by_persondirected_toin_projectconcernsduplicate_ofconcernsconcernsduplicate_ofconcernsduplicate_ofconcerns
Eventperformed_byreviewed_byin_projectpart_ofimplementsshipsimplementsshipsresolvespart_ofincludesrolls_backfixes
Errorowned_bycreated_by_personin_projectseen_induplicate_ofseen_intracked_byduplicate_ofseen_inintroduced_byduplicate_ofseen_in
AI Sessiondriven_byin_projectworked_onworked_onworked_onworked_onworked_onworked_oncontinuesworked_on
Messagesent_bysent_toin_projectregardingregardingregardingregardingregardingregardingreplies_to

Relation catalog

Category, direction, how many targets, and meaning
RelationCategoryFrom → ToTargetsMeaning
in_projectgenericFeature, Task, Decision, Inquiry, Error, Event, AI Session, Message → ProjectoneThe record belongs to this project.
part_ofgenericTask, Event → Feature, EventoneTask -> its feature; commit event -> its PR event.
subtask_ofgenericTask → TaskoneTask -> parent task.
owned_byroleTask, Feature, Error, Inquiry, Project → PersononeCurrent owner. Single-valued: reassignment ends the previous edge (history kept).
created_by_personroleTask, Feature, Decision, Inquiry, Error → PersononeHuman who raised or created the record.
decided_byroleDecision → PersonmanyPerson(s) who made or approved the decision.
directed_toroleInquiry → PersonmanyPerson(s) who should answer or decide.
performed_byroleEvent → PersononePR/commit author or deploy/release triggerer.
reviewed_byroleEvent → PersonmanyPR reviewer(s).
driven_byroleAI Session → PersononeThe human driving the AI session.
has_managerrolePerson → PersononeReporting line (person -> manager).
contributes_torolePerson → ProjectmanyPerson works on this project.
blocked_bygenericTask, Feature → Task, Feature, Inquiry, ErrormanyCannot proceed until the target is resolved.
depends_ongenericFeature → FeaturemanyFeature needs another feature first.
duplicate_ofgenericTask, Error, Inquiry → Task, Error, InquiryoneSame-type duplicate merged into the target (same type only).
follows_upgenericTask → Task, Error, DecisionmanyFollow-up work that came out of the target.
related_togenericTask, Feature → Task, FeaturemanyOverlapping work: the two records touch the same scope but neither contains the other. Write it on both records (one edge each way) so either side shows the other.
implementsactivityEvent → Task, FeaturemanyPR/commit implements the work.
fixesactivityEvent → ErrormanyPR/commit fixes the error.
includesactivityEvent → EventmanyDeploy/release includes a PR or commit.
shipsactivityEvent → Task, FeaturemanyDeploy/release delivers the task or feature.
rolls_backactivityEvent → EventoneDeploy that reverted an earlier deploy.
seen_inactivityError → Task, Feature, Event, AI SessionmanyWhere the error occurred.
introduced_byactivityError → EventoneChange or deploy that introduced the error.
tracked_bygenericError → TaskmanyTask opened to fix the error.
supersedesgenericDecision → DecisionmanyNew decision replaces an old one.
applies_togenericDecision → Feature, Task, ProjectmanyScope the decision governs.
resolvesgenericDecision, Task, Event → InquirymanyCloses a proposal/question or tests a hypothesis.
concernsgenericInquiry → Task, Feature, Error, Decision, EventoneWhat the proposal/hypothesis/question is about.
worked_onactivityAI Session → Task, Feature, Error, Decision, Inquiry, Event, MessagemanyWhat the session touched.
continuesactivityAI Session → AI SessiononeSession picked up from a previous session (handoff chain).
sent_byroleMessage → PersononePerson who sent the message.
sent_togenericMessage → PersononeThe one person the message is addressed to.
replies_togenericMessage → MessageoneMessage -> the message it answers.
regardinggenericMessage → Task, Feature, Error, Decision, Inquiry, EventmanyWhat the message is about (the name about is a platform built-in and is not used).

Lifecycles

The status values each record moves through. The Work Lifecycle Standard says which transitions are allowed and what evidence each one needs.

EntityPropertyValues
Personstatusactiveinactive
Projectstatusactivepausedarchived
Featurestatusideaproposedapprovedin_progressblockedin_reviewshippedabandoned
Taskstatusproposedbacklogin_progressblockedin_reviewdonecancelled
Taskwork_kindcoderoutine
Taskautonomyread_onlydraftact_limited
Taskdepartmentopsproduct_successai_devgtm
Decisionstatusproposedacceptedsupersededrejected
Inquirykindproposalhypothesisquestion
Inquirystatusopentestingacceptedrejectedwithdrawnconfirmedrefutedinconclusiveanswereddropped
Errorstatusopeninvestigatingfix_attemptedresolvedwont_fix
Eventkindprcommitdeployreleaseci_runroutine_run
Eventstatusopenmergedclosedstartedsucceededfailedrolled_backpublishedwithdrawnpassedrecordedokno_findingsproposedcappedskipped_pausedskipped_lease
AI Sessionstatusactiveendedinterrupted
Messagestatusunreadreadarchived
Messageprioritynormalurgent

Entity types and their properties

Each entity type has one collection. Open a card to see every property.

Person · People

Person Profile · 9 properties · key email
A human on the team, a Personize user or not. Keyed by work email.

A team member. Records exist for everyone who owns, decides, reviews or authors work, Personize users or not. Keyed by work email.

PropertyTypeWhat it holdsTags
Email
email
textWork email, lowercased. The record key (standard email identifier). Git author emails map here.identity
Display Name
display_name
textFull name as the team uses it.
Handles
handles
textOther handles, comma-separated: 'github:<login>, slack:<id>'.
Role
role
textRole or function (e.g. backend engineer, engineering manager).
Team
team
textTeam name.
Status
status
optionsactive = currently on the team; inactive = left or paused.
activeinactive
lifecycle
Is Personize User
is_personize_user
booleantrue if this person has their own Personize login.
Timezone
timezone
textIANA timezone, e.g. America/Toronto.
Expertise
expertise
textAreas and project keys this person knows deeply; used to route questions.

Project · Scope

Project Profile · 12 properties · key project_key
A repository or product. The scope of every other record.

A repository or product and its current focus.

PropertyTypeWhat it holdsTags
Project Key
project_key
this record's key
textThe record key: '<owner>/<repo>' from `git remote get-url origin`, lowercased; a kebab slug for projects without a repo.identity
Title
title
textProject name.
Repo URL
repo_url
textRepository URL.
Default Branch
default_branch
texte.g. main, master.
Status
status
optionsProject lifecycle.
activepausedarchived
lifecycle
Owner Email
owner_email
key link → Person (by email)
textAccountable person (a Person email).ownership
Description
description
textWhat the project is and is not.
Current Focus
current_focus
text2-5 lines on what the team is focused on now. Replaced by whoever changes the focus.
Environments
environments
textDeploy environments, comma-separated (e.g. 'dev, staging, production').
Created By (Email)
created_by_email
key link → Person (by email)
textHuman who registered the project.attribution
Created At (ms)
created_at_ms
numberEpoch milliseconds.time
Updated By
updated_by
text'<email> via <tool> <session_key>' of the last structured write.attribution

Feature · Plan

Feature Profile · 18 properties · key feature_key
A user-visible capability or initiative that groups tasks, decisions and errors.

The living state of a feature: status, owner, goal and the start-here summary. Its tasks, decisions and errors point to it via feature_key / applies_to_keys.

PropertyTypeWhat it holdsTags
Feature Key
feature_key
this record's key
textFormula: '<project_key>/f/<kebab-slug>', slug matching the branch feat/<slug>. The record's stable identity (customKeyValue for customKeyName='feature_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Status
status
optionsidea -> proposed -> approved -> in_progress <-> blocked -> in_review -> shipped | abandoned. approved requires explicit human acceptance; shipped requires a ships edge from a deploy/release event.
ideaproposedapprovedin_progressblockedin_reviewshippedabandoned
lifecycle
Owner Email
owner_email
key link → Person (by email)
textAccountable person (Person email).ownership
Priority
priority
optionsp0 now, p1 this week, p2 this cycle, p3 later.
p0p1p2p3
Goal
goal
textWhat success looks like and why it matters.
Acceptance
acceptance
textObservable criteria for shipped.
Current State
current_state
textThe 'start here' paragraph for anyone picking this up: done, next, risks. Replaced, not appended.
Branch
branch
textMain working branch.
Depends On Keys
depends_on_keys
key link → Feature
textComma-separated feature keys this feature depends on.
Related Keys
related_keys
key link → any record
textComma-separated task / feature keys whose scope overlaps this feature but neither contains the other (mirrors related_to). Replace the whole value; never append.
Status Changed At (ms)
status_changed_at_ms
numberWhen status last changed.time

Task · Plan

Task Profile · 35 properties · key task_key
A unit of proposed or accepted work with an owner, status and priority.

One unit of work. Complete task lists come from filtering this collection by project_key + status.

PropertyTypeWhat it holdsTags
Task Key
task_key
this record's key
textFormula: tracker id when one exists ('<project_key>/gh#<n>' or '<project_key>/jira:<key-n>'), else '<project_key>/t/<yymmdd>-<4 random [a-z2-7]>'. The record's stable identity (customKeyValue for customKeyName='task_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Status
status
optionsproposed (human said note it, not accepted) -> backlog (accepted) -> in_progress (claimed; owner required) <-> blocked (reason required) -> in_review (PR open) -> done (resolution + verification required) | cancelled (reason). Reopen: done -> backlog/in_progress with a reason note.
proposedbacklogin_progressblockedin_reviewdonecancelled
lifecycle
Owner Email
owner_email
key link → Person (by email)
textPerson email of the owner, or 'unassigned'. Set together with in_progress to claim.ownership
Priority
priority
optionsp0 now, p1 this week, p2 this cycle, p3 later.
p0p1p2p3
Feature Key
feature_key
key link → Feature
textParent feature key, if any.scope
Parent Task Key
parent_task_key
key link → Task
textParent task key for subtasks.scope
Acceptance
acceptance
textDefinition of done.
Summary
summary
text2-4 sentences: what the work changes and where (modules, endpoints, files). Compared by the overlap check before any new task is created, so write it on creation.
Next Step
next_step
textThe single next concrete action.
Blocked Reason
blocked_reason
textRequired when status=blocked: what is needed and from whom.
Blocked By Keys
blocked_by_keys
key link → any record
textComma-separated task / inquiry / error keys blocking this task.
Related Keys
related_keys
key link → any record
textComma-separated task / feature keys whose scope overlaps this task but neither contains the other (mirrors related_to). Replace the whole value; never append.
Resolution
resolution
textRequired for done/cancelled: outcome plus evidence (PR/commit ref).
Verification
verification
textRequired for done: the command/test run and its result.
Tracker Ref
tracker_ref
textExternal tracker id, e.g. 'gh#123' or 'jira:PROJ-45'.
Status Changed At (ms)
status_changed_at_ms
numberWhen status last changed.time
Work Kind
work_kind
optionsWhat kind of work this task is: 'code' (a normal engineering task) or 'routine' (a recurring job run by the routines engine).
coderoutine
lifecycle
Recurrence
recurrence
textSingle cadence field for a routine, for example a cron string or `every:<n><unit>` such as `every:1d`. Set only on routines.lifecycle
Next Run At (ms)
next_run_at_ms
numberWhen the routine is next due, as epoch milliseconds.time
Last Run At (ms)
last_run_at_ms
numberWhen the routine last ran, as epoch milliseconds.time
Autonomy
autonomy
optionsHow far a routine run may act on its own: read_only (observe and report), draft (prepare output for a human to send), act_limited (act within its caps).
read_onlydraftact_limited
lifecycle
Department
department
optionsWhich department owns the routine.
opsproduct_successai_devgtm
lifecycle
Run Cap (USD)
run_cap_usd
numberMaximum spend in US dollars for a single run of the routine.
Month Cap (USD)
month_cap_usd
numberMaximum spend in US dollars for the routine per calendar month.
Paused
paused
booleanTrue while the routine is paused and must not be picked up.lifecycle
Lease Until (ms)
lease_until_ms
numberEpoch milliseconds until which the current lease holder owns this run. Expired leases may be taken over.time
Lease Owner
lease_owner
textOpaque dispatcher id holding the lease; no personal data.attribution
Playbook Ref
playbook_ref
textGuideline slug of the routine's playbook.refs

Decision · Plan

Decision Record · 19 properties · key decision_key
A technical or product decision with its rationale; changed only by superseding.

A decision and its rationale. Accepted decisions are never edited in substance; a change of mind is a new decision that supersedes the old one.

PropertyTypeWhat it holdsTags
Decision Key
decision_key
this record's key
textFormula: '<project_key>/d/<kebab slug of the question>'. The record's stable identity (customKeyValue for customKeyName='decision_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Status
status
optionsproposed -> accepted | rejected; accepted -> superseded (only via a new decision with supersedes_key).
proposedacceptedsupersededrejected
lifecycle
Question
question
textThe decision framed as the question it answers.
Decision
decision
textThe choice, stated plainly.
Rationale
rationale
textWhy: reasoning, constraints, evidence. The most valuable field.
Alternatives
alternatives
textOptions considered and why each was rejected.
Applies To Keys
applies_to_keys
key link → any record
textComma-separated feature / task / project keys this decision governs.scope
Decided By Emails
decided_by_emails
key link → Person (by email)
textComma-separated Person emails who made or approved it. Required when accepted.ownership
Decided At (ms)
decided_at_ms
numberWhen accepted.time
Supersedes Key
supersedes_key
key link → Decision
textDecision key this one replaces.
Superseded By Key
superseded_by_key
key link → Decision
textDecision key that replaced this one.
Resolves Inquiry Key
resolves_inquiry_key
key link → Inquiry
textInquiry key (proposal/question) this decision closes.

Inquiry · Plan

Inquiry Record · 17 properties · key inquiry_key
A proposal, hypothesis or open question (see kind) that needs an outcome.

A proposal, hypothesis or open question with an outcome. Status values allowed depend on kind (see Work Lifecycle Standard).

PropertyTypeWhat it holdsTags
Inquiry Key
inquiry_key
this record's key
textFormula: '<project_key>/<p|h|q>/<yymmdd>-<4 random [a-z2-7]>' (p=proposal, h=hypothesis, q=question). The record's stable identity (customKeyValue for customKeyName='inquiry_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Kind
kind
optionsproposal = suggested change needing a decision; hypothesis = testable explanation; question = needs an answer.
proposalhypothesisquestion
lifecycle
Status
status
optionsproposal: open -> accepted | rejected | withdrawn. hypothesis: open -> testing -> confirmed | refuted | inconclusive. question: open -> answered | dropped.
opentestingacceptedrejectedwithdrawnconfirmedrefutedinconclusiveanswereddropped
lifecycle
Concerns Key
concerns_key
key link → any record
textKey of the task / feature / error / decision / event this inquiry is about.scope
Statement
statement
textThe proposal, hypothesis or question itself.
Raised By Email
raised_by_email
key link → Person (by email)
textPerson email who raised it.ownership
Directed To Email
directed_to_email
key link → Person (by email)
textPerson email who should answer or decide (comma-separated if several).ownership
Outcome
outcome
textRequired when closed: the answer, evidence, or reason.
Outcome Key
outcome_key
key link → any record
textDecision / task / event key that resolved it.
Status Changed At (ms)
status_changed_at_ms
numberWhen status last changed.time

Error · Deliver

Error Record · 22 properties · key error_key
A distinct failure, keyed by a normalized-signature fingerprint so repeats land on one record.

A distinct failure signature: attempts live as memories, the verified fix and root cause as properties. Recurrence reopens the same record.

PropertyTypeWhat it holdsTags
Error Key
error_key
this record's key
textFormula: '<project_key>/e/<first 12 hex of sha1(normalized signature)>', see the Identifier Standard fingerprint algorithm. The record's stable identity (customKeyValue for customKeyName='error_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Signature
signature
textThe normalized signature that was fingerprinted: error class + message with volatile parts replaced, plus ' @ <file>:<function>' of the top in-repo frame. Searchable with CONTAINS.
Status
status
optionsopen -> investigating -> fix_attempted (applied, not proven) -> resolved (verification required) | wont_fix. Recurrence: resolved -> open with a regression note.
openinvestigatingfix_attemptedresolvedwont_fix
lifecycle
Severity
severity
optionsImpact.
lowmediumhighcritical
Component
component
textArea, module or file where it occurs.
Environment
environment
optionsWhere it was seen.
localcidevstagingproduction
Owner Email
owner_email
key link → Person (by email)
textPerson email investigating it.ownership
Root Cause
root_cause
textThe underlying mechanism, not the symptom.
Root Cause Confidence
root_cause_confidence
optionsunknown / hypothesis (unproven) / confirmed (reproduced or proven).
unknownhypothesisconfirmed
Fix Summary
fix_summary
textWhat was changed to fix it.
Verification
verification
textRequired for resolved: the reproduction or test that now passes, with its result.
Introduced By Key
introduced_by_key
key link → Event
textEvent key (pr/commit/deploy) that introduced it, if known.
Fixed By Keys
fixed_by_keys
key link → any record
textComma-separated event keys that fixed it.
First Seen (ms)
first_seen_ms
numberFirst occurrence.time
Last Seen (ms)
last_seen_ms
numberLatest occurrence.time

Event · Deliver

Event Record · 18 properties · key event_key
Something with an external id that happened: PR, commit, deploy, release, CI run.

An externally identifiable happening (PR, commit, deploy, release, CI run) linking work to delivery.

PropertyTypeWhat it holdsTags
Event Key
event_key
this record's key
textFormula by kind: '<project_key>/pr/<n>', '<project_key>/commit/<sha12>', '<project_key>/deploy/<env>/<ci-run-id or yymmddThhmm>', '<project_key>/release/<tag>', '<project_key>/ci/<run-id>'. The record's stable identity (customKeyValue for customKeyName='event_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Kind
kind
optionsType of event.
prcommitdeployreleaseci_runroutine_run
lifecycle
Status
status
optionspr: open|merged|closed. deploy: started|succeeded|failed|rolled_back. release: published|withdrawn. ci_run: passed|failed. commit: recorded. routine_run: ok|no_findings|proposed|failed|capped|skipped_paused|skipped_lease.
openmergedclosedstartedsucceededfailedrolled_backpublishedwithdrawnpassedrecordedokno_findingsproposedcappedskipped_pausedskipped_lease
lifecycle
URL
url
textLink to the PR / run / release.
Actor Email
actor_email
key link → Person (by email)
textPerson email who authored / triggered it.ownership
Occurred At (ms)
occurred_at_ms
numberWhen it happened (merge time, deploy completion, ...).time
Environment
environment
optionsDeploy target (deploy/release only).
devstagingproductiontestother
Commit SHA
commit_sha
textCommit or merge SHA.
Branch
branch
textSource branch.
Related Keys
related_keys
key link → any record
textComma-separated task / feature / error keys this event touches.scope
Summary
summary
textWhat it contained or changed.

AI Session · Coordinate

AI Session Record · 22 properties · key session_key
One AI coding-assistant session (Claude Code, Codex, Cursor, ...) driven by one person.

One assistant session: who, which tool, what it worked on, and the handoff (summary, next steps, open questions).

PropertyTypeWhat it holdsTags
Session Key
session_key
this record's key
textFormula: '<tool>:<native session id>'; if the assistant cannot read its id, '<tool>:<yymmdd-hhmm>-<email local part>-<4 random [a-z2-7]>'. The record's stable identity (customKeyValue for customKeyName='session_key'). Lowercase. Never changes, even if the title does. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Tool
tool
optionsAssistant used.
claude-codecodexcursorcopilotother
Model
model
textModel id, if known.
Person Email
person_email
key link → Person (by email)
textThe human driving the session.ownership
Status
status
optionsactive (running) -> ended (wrap-up saved) | interrupted (set by a later session when last_checkpoint_ms is 8h+ old).
activeendedinterrupted
lifecycle
Started At (ms)
started_at_ms
numberSession start.time
Ended At (ms)
ended_at_ms
numberSession end (wrap-up).time
Last Checkpoint (ms)
last_checkpoint_ms
numberLast checkpoint write.time
Goal
goal
textWhat the session set out to do.
Summary
summary
textWhat was done so far. Replaced at each checkpoint.
Next Steps
next_steps
textConcrete next actions for whoever continues.
Open Questions
open_questions
textInquiry keys and short text of unresolved questions.
Branch
branch
textWorking branch.
Worked On Keys
worked_on_keys
key link → any record
textComma-separated keys touched this session. Replaced whole at each checkpoint.
Continues Session Key
continues_session_key
key link → AI Session
textsession_key this session picked up from.

Message · Coordinate

Message Record · 18 properties · key message_key
A note from one teammate (or their AI assistant) to one recipient, with read state. One record per recipient.

A message from one teammate to one recipient with read state (unread, read, archived). One record per recipient; recipients mark their own messages read.

PropertyTypeWhat it holdsTags
Message Key
message_key
this record's key
textFormula: '<project_key>/m/<yymmdd>-<4 random [a-z2-7]>' (m=message). project_key is the project the message is about (never 'acme/team'-style team scopes). The record's stable identity (customKeyValue for customKeyName='message_key'). Lowercase. Never changes. One record per recipient: a message to several people is several records sharing a thread_key. Build it exactly as the Identifier Standard guideline says.identity
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textThe subject line. Short, human-readable. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Sender Email
sender_email
key link → Person (by email)
textEmail of the HUMAN sending the message (not the assistant), lowercased.ownership
Recipient Email
recipient_email
key link → Person (by email)
textEmail of the ONE recipient, lowercased. Exactly one address, never a list, so 'my unread' is an exact EQ filter with no substring false positives.ownership
Body
body
textThe message, 2-20 lines of markdown. No secrets, credentials or PII.
Status
status
optionsunread -> read -> archived, or unread -> archived. Created as unread. Only the RECIPIENT changes status (explicit exception to Write Safety 'Other people's work').
unreadreadarchived
lifecycle
Read At (ms)
read_at_ms
numberWhen the recipient first marked the message read (epoch ms). Unset while unread.time
Status Changed At (ms)
status_changed_at_ms
numberWhen status last changed.time
Priority
priority
optionsnormal by default; urgent when the recipient should see it before starting other work.
normalurgent
lifecycle
Thread Key
thread_key
key link → Message
textmessage_key of the first message in the thread (its own key for a thread starter). Shared by the per-recipient copies of one message and by replies.scope
Reply To Key
reply_to_key
key link → Message
textmessage_key of the message this one replies to. Empty for a thread starter.scope
About Keys
about_keys
key link → any record
textComma-separated keys of the task / feature / error / decision / inquiry / event this message is about (mirrors the 'regarding' edges).scope

Customer Account · Scope

Customer Account · 13 properties · key account_key
A refreshable cache of a customer account used by routines: tier, cadence and a health reference. Values are caches, not the source of truth; refresh them from the source. Left empty until customer-level intelligence is enabled for your organization.

Refreshable cache of customer account facts for routines. Not the source of truth. Left empty until customer-level intelligence is enabled for your organization.

PropertyTypeWhat it holdsTags
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Account Key
account_key
textThe account's stable identity (customKeyValue for customKeyName='account_key'). Lowercase. Never changes.identity
Company Name
company_name
textCompany name as last refreshed from the source.
Tier (cache)
tier_cache
textCached customer tier. Refreshable; the source of truth lives elsewhere.
Cadence (cache)
cadence_cache
textCached contact cadence for this account. Refreshable; not the source of truth.
Health Cache Ref
health_cache_ref
textPointer to the latest Metric Snapshot (its snapshot_key) for this account.refs
Cache Refreshed At (ms)
cache_refreshed_at_ms
numberWhen these cached values were last refreshed, as epoch milliseconds.time

Metric Snapshot · Deliver

Metric Snapshot · 16 properties · key snapshot_key
One captured metric value for one routine and period, with its source.

One captured value of a metric for a routine and period. No thresholds are stored here.

PropertyTypeWhat it holdsTags
Project Key
project_key
key link → Project
textKey of the owning project: '<owner>/<repo>' from `git remote get-url origin`, lowercased (e.g. 'acme/app'). Every filter is scoped by this.identity scope
Title
title
textShort human-readable name. May change; never used for identity.
Created By (Email)
created_by_email
key link → Person (by email)
textEmail of the HUMAN who created or asked for this record (not the assistant).attribution
Created At (ms)
created_at_ms
numberCreation time as epoch milliseconds (numbers are range-filterable; ISO strings are not).time
Updated By
updated_by
textLast structured write, as '<email> via <tool> <session_key>' (e.g. 'dev@example.com via claude-code claude-code:510c7129-...').attribution
Last Session Key
last_session_key
key link → AI Session
textsession_key of the AI session that last changed this record.attribution
Refs
refs
textComma-separated external references: PR / commit / tracker ids / URLs (e.g. 'pr/821, commit/3b981225ab12'). Replace the whole value; never append.refs
Snapshot Key
snapshot_key
text<routine key>:<metric>:<period>identity
Routine Key
routine_key
texttask_key of the routine that captured this snapshot.scope
Metric
metric
textName of the metric captured.
Period
period
textPeriod the value covers (e.g. '2026-10' or '2026-W43').
Value (number)
value_number
numberThe captured metric value.
Value Unit
value_unit
textUnit of value_number (e.g. 'usd', 'count', 'percent').
Source Ref
source_ref
textThe file:line or API name the value was read from.refs
Captured At (ms)
captured_at_ms
numberWhen the value was captured, as epoch milliseconds.time
Account Key
account_key
textaccount_key of the customer account this snapshot is about, when it is account-level. Empty otherwise.scope

Guidelines

Standards every session follows

Installed into Personize with the kit. Assistants fetch them with context_retrieve. Revisions = earlier versions the kit knows about and can upgrade from.

GuidelineKindTagsWhat it settlesRevisions
AI Coding Memory ProtocolguidelineprotocolThe session loop for AI coding assistants: start, recall, when to write (including messages to teammates), checkpoints, handoff, exclusions, failure honesty.9
Identifier StandardguidelineidentifiersExact key formulas per entity type (including messages) and the error fingerprint algorithm, so every assistant reaches the same record.2
Work Lifecycle StandardguidelinelifecycleAllowed statuses, transitions and required evidence for tasks, features, decisions, inquiries, errors, events, sessions and messages.4
Graph Linking StandardguidelinegraphRelation catalog (including message edges), edge direction rule, how to write edges, and which edges are required.5
Write Safety and ConcurrencyguidelineprotocolCreate-then-update, no upsert, read-before-write, claim-then-verify, message creation fields and recipient-only status changes, and honest failure reporting.4
Retrieval PlaybookplaybookretrievalQuery recipes for remaining tasks, decisions, teammate changes, repeated errors, handoffs, deploys and unread messages.7
AI Coding Memory Setup GuideguidelineprotocolHow to install, refresh, check and undo the session hook and assistant instructions; manual install and other tools.3
Routine Playbook CustomizationguidelineroutineHow an assistant turns a kit playbook template into the team's own routine playbook, keeps it current after kit upgrades, and adds new ones.0

Routine playbook templates (16)

Draft templates for recurring routines. Each one has a purpose, the data it can see, an output format, safety rules and judgment questions.

Cloud cost watch
Errors and alarms
Ticket triage
Customer health
Security posture
Code drift
Data durability
Deploy and CI health
Onboarding funnel
Credit runway and limits
API quality per customer
Feature adoption
LLM spend by provider
Board hygiene
Customer data quality
Weekly leadership digest

Document tags

TagLabelUsed forGuidelines
ai-coding-memoryAI Coding MemoryAll docs of the AI Coding Memory kit. Fetch with context_retrieve(tags:["ai-coding-memory"]) at session start.24
protocolProtocolHow assistants read and write team memory.3
identifiersIdentifiersRecord key formulas and fingerprints.1
lifecycleLifecycleStatuses, transitions and evidence rules.1
graphGraphRelation types and linking rules.1
retrievalRetrievalQuery recipes for team-memory questions.1

Notes from the kit