1. concepts
temper
  • Temper documentation
  • cli
    • README
    • admin
    • auth
    • check
    • cogmap
    • config
    • context
    • edge
    • init
    • invitations
    • invocation
    • memory
    • pull
    • query
    • resource
    • search
    • skill
    • slack
    • status
    • steward
    • team
    • trail
    • update
    • version
    • warmup
  • config
    • README
  • auth
  • guides
  • doors
    • Building against Temper
    • Running Temper
    • Using Temper
  • concepts
    • Auth Identity
    • Authoring Authorization
    • Contexts and Refs
    • Machine Tokens
    • Operational Memory
    • Release Verification
    • The SAML Reconcile Channel
    • Slack Identity and Revocation
    • Teams and Roles
    • Telemetry
    • Token Verification
    • The Trust Boundary
  • playbooks
    • Adopt operational memory
    • Authenticate
    • Bootstrap an Org
    • Bootstrap a Team's Self-Cognition
    • Build a cognitive map
    • Connect Claude Code
    • Connect Temper to Claude Desktop
    • Deliver L0 Kernel Content
    • Deploy a Steward Agent
    • Deploy the Web UI
    • Enterprise Install
    • Provision a Read-Only GitHub Connection
    • Ingest a corpus
    • Install Temper
    • Run a Team
    • Self-Host Temper
    • Self-host Temper with Okta
    • Self-host Temper with a SAML IdP
    • Send traces to an OTLP backend
    • Slack Mentions
    • Standing Up a Machine Credential
  • sdks
    • Integrating Ruby with temper-rb
  • Temper Cloud API
    • Access
      • POST /api/access/requests — submit a join request for the gating team.
      • GET /api/access/requests/me — check own join request status.
      • DELETE /api/access/requests/me — withdraw a pending join request.
      • POST /api/access/reviews — a revoked principal asks an admin to reconsider (spec D15).
      • GET /api/access/settings — read public system settings.
    • Slack Link
      • Disconnect any principal. Operator path — offboarding and stuck users.
      • Disconnect EVERY Slack principal bound to the caller's own profile.
    • Auditor
      • auditor_dispatch
      • auditor_sweep
      • complete_auditor_job
    • Graph
      • POST /api/cogmaps/{id}/graph/slice — R4 cogmap-scoped neighborhood slice.
      • GET /api/graph/cogmaps/{id}/panorama — enter-a-cogmap Tier-0 interior.
      • GET /api/graph/contexts/composition — Beat E Tier-1: the force-graph composition of a container's (or a residual bucket's) members.
      • GET /api/graph/contexts/panorama — Beat E Tier-0: goal-container territories + residual tray.
      • GET /api/graph/home — the you→teams→cogmaps membership home.
      • GET /api/graph/regions/composition — Beat D region→resources composition drill.
    • Cognitive Maps
      • list_cognitive_maps
      • genesis
      • get_cognitive_map
      • reconcile
      • analytics
      • grant_cogmap_access
      • revoke_cogmap_access
      • materialize
      • materialize_delta
      • region_metrics
      • shape
      • bind_team
      • unbind_team
    • Contexts
      • list_contexts
      • create_context
      • get_context
      • context_materialize
      • reassign
      • context_region_metrics
      • rename
      • context_shape
      • share_team
      • unshare_team
    • Events
      • cursor
      • GET /api/graph/elements/{kind}/{id}/trail — R5 element event-trail. kind ∈ {node, edge}.
    • Facets
      • set_facet
      • Read the live facets of one edge.
      • Set a facet whose owner is an **edge** rather than a resource.
      • Read the live facets of one resource — the confirming read for a write that steers region formation and Atlas grouping.
    • Health
      • health_check
    • Ingest
      • create_ingest
      • update_ingest
      • list_blocks
      • append_block
      • finalize_resource
    • Invitations
      • accept
      • decline
      • list_mine
      • list_team_invitations
      • revoke_team_invitation
      • create_team_invitation
    • Invocations
      • list_invocations
      • open
      • show
      • close
    • Profile
      • get_profile
      • update_profile
      • list_auth_links
    • Query
      • `POST /api/query`.
    • Relationships
      • assert
      • fold
      • retype
      • reweight
    • Resources
      • `GET /api/resources` — **one response type, unconditionally.**
      • create_resource
      • get_resource
      • delete_resource
      • update_resource
      • List the finding at `{id}`'s citation-audit trail — one row per audit, each naming its auditor.
      • Record an auditor's signed defensibility verdict on one `(block, source)` citation of the finding at `{id}`. CONFORM to `handlers::edges::assert` (the sibling authored-write handler): thin — build the command, dispatch it, map the error. No persistence he
      • get_content
      • list_resource_edges
      • resource_evidence
      • grant_resource_access
      • revoke_resource_access
      • resource_lineage
      • provenance
      • annotate_resource
    • Meta
      • get_meta
      • update_meta
    • Reassign
      • reassign_resource
      • reassign_team
    • Search
      • `POST /api/search`.
    • Steward
      • candidates
      • dispatch
      • sweep
      • delta
      • advance
    • Teams
      • list_teams
      • create_team
      • detail
      • delete_team
      • update_team
      • add_member
      • remove_member
      • change_role
    • Schemas
      • AcceptInvitationResponse
      • ActInput
      • ActInvocation
      • ActName
      • ActQuantity
      • ActRefusal
      • ActorAuthority
      • AddMemberRequest
      • AdvanceWatermarkAck
      • AdvanceWatermarkRequest
      • AgentAuthorship
      • AppendBlockPayload
      • AssertRelationshipRequest
      • AtlasEdge
      • AtlasHome
      • AtlasNode
      • AtlasSubgraph
      • AuditCitation
      • AuditSweepRow
      • AuditorDispatchTickRequest
      • AuditorDispatchTickResponse
      • AuditorJobCompleteAck
      • BindTeamOutcome
      • BindTeamRequest
      • BlockId
      • BlockProvenanceRow
      • BlocksResponse
      • BodyStorage
      • Bridge
      • BulkReassignAck
      • BulkReassignRequest
      • ChangeRoleRequest
      • CharterBlock
      • CharterDisposition
      • CitationAuditRequest
      • CitationAuditRow
      • ClaimedAuditJob
      • ClaimedJob
      • CloseInvocationRequest
      • CogmapAnalyticsRow
      • CogmapDetail
      • CogmapFoundationRow
      • CogmapGrantBody
      • CogmapId
      • CogmapRegionMetricsRow
      • CogmapRegionRow
      • CogmapRegulationRow
      • CogmapRevokeBody
      • CogmapRow
      • CogmapStaleness
      • CombineNode
      • CombineOp
      • Composition
      • CompositionTrace
      • ConfidenceBand
      • ContentResponse
      • ContextCreateRequest
      • ContextId
      • ContextOwnerRef
      • ContextPanorama
      • ContextRow
      • ContextRowWithCounts
      • CorrelationId
      • CreateCogmapOutcome
      • CreateCogmapRequest
      • CreateInvitationRequest
      • CreateRequestBody
      • CreateReviewBody
      • DeleteResponse
      • DeviceOverrides
      • DispatchTickRequest
      • DispatchTickResponse
      • Disposition
      • DriftSweepRow
      • EdgeFacetRow
      • EdgeFacetSetRequest
      • EdgeFacetsResponse
      • EdgeFilter
      • EdgeId
      • EdgeKind
      • ElementEvent
      • ElementKind
      • EmbedDispatchSummary
      • Entitlements
      • ErrorBody
      • ErrorDetail
      • ErrorDetails
      • EventCursorResponse
      • EventTrail
      • ExactArm
      • ExactHit
      • Extent
      • FacetAck
      • FacetPredicate
      • FacetSetRequest
      • FinalizePayload
      • FoldRelationshipRequest
      • GrantOutcome
      • GraphEdgeRow
      • GroupKeyMeta
      • HealthResponse
      • HomeCogmap
      • HomeContext
      • IdKind
      • IdProvenance
      • IdSet
      • IdpRevocation
      • IngestCreateResponse
      • IngestDelta
      • IngestPayload
      • IngestState
      • InheritedReadGrant
      • InheritedShare
      • InputSource
      • Intention
      • InvitationStatus
      • InvitationTokenRequest
      • InviteeInvitation
      • InvocationAck
      • InvocationActRow
      • InvocationCloseAck
      • InvocationId
      • InvocationSummary
      • InvocationView
      • JoinRequest
      • JoinRequestStatus
      • LensId
      • LineageNode
      • ManagedMeta
      • MatchLocation
      • MaterializeAck
      • MaterializeDelta
      • MaterializeRequest
      • MergePolicy
      • MetaUpdatePayload
      • NarrowedBy
      • NodeHome
      • OpenInvocationRequest
      • OrdOp
      • OrphanNode
      • OutcomeDeclaration
      • PlanRefusal
      • PlanRefusalDetails
      • Polarity
      • Profile
      • ProfileAuthLink
      • ProfileId
      • ProfileUpdateRequest
      • ProfileWithEntitlements
      • PropertyOp
      • PropertyPredicate
      • ProvenanceSource
      • PublicSystemSettings
      • QuantityScale
      • QueryResponse
      • ReassignAck
      • ReassignContextOutcome
      • ReassignContextRequest
      • ReassignResourceRequest
      • ReconcileCogmapRequest
      • ReconcileEdge
      • ReconcileEdgeTombstone
      • ReconcileEntry
      • ReconcileOutcome
      • ReconcileTelos
      • ReconcileTelosBlock
      • ReconcileTombstone
      • Refusal
      • RefusalReason
      • RegionHit
      • RegionId
      • RelationshipAck
      • RemoveMemberOutcome
      • RenameContextOutcome
      • RenameContextRequest
      • ResidualBucket
      • ResidualContext
      • ResidualGroups
      • ResidualOwnedReach
      • ResourceAnnotateRequest
      • ResourceCreateRequest
      • ResourceFacetRow
      • ResourceFacets
      • ResourceFacetsResponse
      • ResourceFilter
      • ResourceGrantBody
      • ResourceHit
      • ResourceId
      • ResourceLineage
      • ResourceListResponse
      • ResourceRevokeBody
      • ResourceSection
      • ResourceSortField
      • ResourceUpdateRequest
      • ResourceView
      • ReturnSpec
      • RetypeRelationshipRequest
      • RevokeOutcome
      • ReweightRelationshipRequest
      • ScoreKind
      • Scoring
      • SearchParams
      • SearchReason
      • SearchResponse
      • SearchResultRow
      • SearchScope
      • SearchScopeInfo
      • SegmentInfo
      • SegmentedBegin
      • SegmentedBeginResponse
      • ShareContextOutcome
      • ShareContextRequest
      • SlackDisconnectRequest
      • SlackDisconnectResponse
      • SlackDisconnectedPrincipal
      • SliceRequest
      • SortOrder
      • StageDisposition
      • StageInput
      • StageInputTrace
      • StageName
      • StageNode
      • StageOutput
      • StageRelation
      • StageResult
      • StageTrace
      • Standing
      • StandingShape
      • Subscription
      • SubscriptionOverride
      • SystemAccessDetails
      • TeamCreateRequest
      • TeamDetail
      • TeamInvitation
      • TeamMemberDetail
      • TeamMemberRow
      • TeamMemberSource
      • TeamRole
      • TeamRow
      • TeamUpdateRequest
      • Territory
      • TerritoryKind
      • TerritoryOverview
      • UnbindTeamOutcome
      • UnshareContextOutcome
      • VaultConfig
      • ViaEntry
      • WideArm
      • WideHit
  • Temper /api/query — the compositional read surface
    • Run a declared composition of situated acts.
    • Schemas
      • Composition
      • OutcomeDeclaration
      • ReturnSpec
      • Intention
      • StageNode
      • ActInvocation
      • CombineNode
      • StageInput
      • StageRelation
      • Disclosure
      • QueryResponse
      • StageResult
      • StageOutput
      • ScoreKind
      • Scoring
      • ResourceHit
      • CompositionTrace
      • StageTrace
      • InputSource
      • NarrowedBy
      • StageName
      • ActName
      • IdKind
      • IdSet
      • BoundTerm
      • Extent
      • StageDisposition
      • ActRefusal
      • PlanRefusal
      • RefusalReason
      • ActQuantity
      • QuantityScale
      • ResourceFilter
      • EdgeFilter
      • PropertyPredicate
      • PropertyOp
      • ResourceSection
      • EdgeKind
      • OrdOp
      • CogmapId
      • ContextId
      • IdProvenance
      • FacetPredicate
      • CombineOp
      • BlockId
      • MatchLocation
      • BodyStorage
      • ResourceId
      • IngestState
      • ManagedMeta
      • ProfileId
      • ResourceView
      • Polarity
      • ViaEntry
      • LensId
      • RegionId
      • CogmapRegionRow
      • RegionHit
      • StageInputTrace
      • Standing
      • ActorAuthority
      • Refusal
      • SystemAccessDetails
      • PlanRefusalDetails
      • ErrorDetails
      • ErrorDetail
      • ErrorBody
  1. concepts

Operational Memory

For users and operators. If you want working knowledge from agent sessions to persist across

What operational memory is#

A memory is a resource with doc type memory. It lives in a
context, and it is read, written, corrected, and searched with the
ordinary resource commands and tools — nothing about it is special-cased beyond its type.
What it needs beyond a body lives in its open tier:
status — active or superseded. The field the index renders on, and the one it
refuses to guess.
verified — the ISO date the claim was last checked against the system. An old date
means nobody has re-checked it; it carries no opinion about whether the claim still holds.
descriptor — the one-line recall hook. A line in the rendered index is a title, not
the memory; the descriptor is what makes that line worth reading.
source_file — the local file a memory was migrated from, when it was migrated from
one. A memory authored natively in Temper carries none and is never reported as orphaned.
Everything else — reach, history, attribution, search — is what a resource already does. A
memory makes no claim about its own audience: it reaches whoever can read the
context it lives in.

How memories are captured and recalled#

Memories are authored as resources, the same way any other note is. What is special is the
rendered index — a projection a client loads each session so a cold start is not a blank
slate. The index is generated, never hand-written: a previously-emitted index starts with a
generated-file header, and the emit command refuses to overwrite anything that does not carry
it. The file is a cache; the resources are the record. A client with no index file and no
command line reads the same memories over the cloud and needs none of the local machinery.
Recall is ordinary search and ordinary resource reads. The index lists hooks — a title and a
verified date per line — and its preamble states once what a line is, how to resolve one,
and what an old date does not mean. The marker for an unexamined claim is UNEXAMINED, never
stale or wrong: an old date means nobody has re-checked the claim, not that it is false. A
memory whose status or verified is missing or unparseable stops the whole render rather
than being emitted with a guessed value — those are the fields the render's own claims depend
on, and nothing validates them at write time.

The CLI memory model#

A machine opts into the local index by adding a [memory] section to its Temper config. The
section is deliberately optional, not defaulted, so not configured and configured empty
stay distinguishable — and at least one context is required, so an empty block is rejected
rather than silently doing nothing.
FieldMeaning
shared_contextscontexts whose memories reach every project on this machine
project_contextscontexts scoped to one project. Both lists are read shared-first and deduped, so a context named in both is fetched and rendered once
index_pathwhere the rendered index is written, and the directory scanned for local files
stale_after_dayshow old a verified date must be before the index marks it UNEXAMINED. Defaults to 90
reinforced_minhow many distinct reinforcement dates a memory needs to keep its own line. No default — see below
opted_in: false is not an error; it is the primary state the status command exists to report,
and a supported end state. A machine may measure itself, decide against the whole idea, and
never return. Declining is deleting the section — nothing else changes: no local file is
touched, no resource is removed, and the status command keeps answering.

The collapsed tail — demotion, never deletion#

An index bounded by hand stops being bounded the moment nobody trims it. Reinforcement dates —
the dates a memory did work — let the index bound itself by evidence instead. reinforced_min
is the threshold: below it, a memory stops rendering individually and falls into a per-section
tail line that states its own count and carries a route back to the full list.
The threshold has no default, and leaving it out is the right answer until months of real
reinforcement data exist to choose one from. A threshold can only honestly be chosen from
evidence, and guessing one now would put a constant with no evidence behind it into every
reader's index. Demotion is never deletion: nothing is dropped, nothing becomes
unfindable, and the file stays bounded however large the corpus grows. This is the same rule
the rest of the design already holds — supersession replaces deletion, and falling out of a
summary is never falling out of the record.

Shared memory across a team#

A memory reaches whoever can read the context it lives in. There is
no per-memory reach field, and a memory makes no claim about its own audience, so team
adoption is a context question, answered with the commands that already exist:
Put the shared memories in a context the team can read — either a team-owned context
(+team-slug/<slug>) or one you own, shared into the team's read-reach with
context share. Sharing requires that you administer the context and manage the target
team (owner or maintainer), or that you are an instance administrator. @me shorthand is
not accepted by context share — use your handle or the context UUID.
Each member names that context in their own [memory] section, under shared_contexts if
it should reach every project on their machine or project_contexts if it is scoped to one.
Members who work from Desktop, mobile, or the web name nothing and configure nothing. They
read and author the same memories as resources.
Two consequences worth being explicit about. Reach follows membership and grants, so it
changes when the team changes
— nothing has to be re-tagged when someone joins or leaves.
And a member who never adopts the CLI is not a second-class participant: the index is one
client's rendering, not the mechanism. For the team and role model that governs who can read
and write shared contexts, see Teams and Roles.

What makes a memory worth keeping#

A memory earns its place when it carries a claim worth re-checking, does work often enough
to be reinforced, and has a descriptor that stands alone — a hook that means something in a
flat list, not a fragment that only made sense inside the sentence that produced it. A title
harvested from link text that read fine inside its sentence — "Slack — [topic file]" — is
useless standing alone, because the sentence supplied the subject. Retitle offenders after the
first render; renaming a memory is not re-checking its claim, so it does not advance
verified.
When two accounts describe nearly the same thing, compare the claim, not the wording.
Shared vocabulary collides on surface text while making unrelated assertions — two memories
that mention the same subsystem are not an overlap — and that gets worse in a shared
context, not better
, because shared vocabulary is exactly what a team's context accumulates.
Three outcomes a reader looking for overlap should expect, not just the first:
Duplicate — one incident recorded twice. Keep the older, richer account.
Supersession — a newer account strictly richer than the one it covers. Mark the older
superseded.
Both stale — both out of date, the newer one still the more wrong. Recency arbitrated
nothing.
Adjudicating overlap is a judgement a reader makes before a memory is written, not a gate the
system enforces: nothing detects a near-duplicate, and the store can hold two accounts of one
incident. Supersession — not deletion — is how the record reconciles them.

Further reading#

The context model that memories live in and reach through:
Contexts and Refs.
Teams, roles, and what membership grants:
Teams and Roles.
Using Temper from the CLI: temperkb.io/using-temper.
How a cognitive map grows around reinforced memory:
temperkb.io/cognitive-maps/how-a-map-grows.
Modified at 2026-08-20 02:05:41
Previous
Machine Tokens
Next
Release Verification
Built with