1. playbooks
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. playbooks

Build a cognitive map

For individual users — someone building a cognitive map from scratch or from a corpus of
source material.
A cognitive map is a
purpose-shaped distillation: an understanding whose shape a telos decides, not a folder of
your documents. By the end of this playbook you will have authored a telos-governed graph of
distilled nodes — concept, fact, theme, and status nodes wired by deliberate edges into
traversable regions — each one grounded in sources you can cite back to, and materialized into
a structure you can traverse as what recurs → why it breaks → what's settled about it.
If you are starting from a pile of source documents, get them into a context first: ingestion
is a separate, mechanical act that should be boring. See
Ingesting a corpus into a context. If you already have a
context full of citable material, read on.

Prerequisites#

Temper installed and authenticated. If you have not installed the CLI, see
install Temper. You must be authenticated to author.
Any authenticated profile can create a cognitive map and author into it — creation is not
gated or restricted. The creator receives read, write, and grant rights over the map. For
the full authorization model, see
authoring authorization.
A context holding your source material. A map cites resources by id regardless of which
context homes them, but you need citable sources
somewhere. Raw documents, analysis artifacts, status snapshots — all are fair game.
A telos. A telos is a purpose statement: the question your map exists to answer. Two
teloi over the same sources yield two different maps. That is the feature, not a redundancy
to eliminate.

When to build a map at all#

Reach for a map when you want a purpose-shaped distillation — an understanding whose shape a
telos decides. Not when you want to store working artifacts; a context does that.
The crux most authors miss: a map node is not the same row as its source. It is a new
resource, created into the map, that distills from one or more sources and carries a
derived_from edge and a sources provenance list back to them. Nodes are distilled, never
re-homed. For what kinds of nodes a map holds, see
what lives in a map.

Read the telos-charter first — it is the rubric#

Every map has a telos-charter: a purpose statement plus a set of open questions. It decides
what earns a node. Read it before you author anything.
Distill what is salient under this charter, not everything true about a source. The same
document read under two teloi yields two different nodes, and neither is wrong.
A well-formed charter decomposes into question shapes that build on each other. Three
generalize cleanly:
PassQuestionProduces
Q1What recurs? The shared vocabulary of the domain, and how each source parameterizes it.concept nodes + fact instances
Q2Where does it structurally break? The recurring classes of incompatibility where one model cannot absorb the variation.theme nodes, cross-linked back to Q1
Q3What is settled vs still open? What has been banked, what remains divergent.decision / concern / question nodes, each dated
Later shapes — how things compose within one source, which provisions drive which downstream
effects — layer on the same way.

One telos-question per pass#

Do one charter question per invocation-pass. Each is a clean, reviewable unit, and the
acceptance bar is per-pass: at least one on-telos node per sub-topic, authored under a closed
invocation, materialized.
Checkpoint with whoever the map is for between passes. A pass is the natural unit of review.

Breadth-with-confidence before depth#

Cover many instances thinly, and only where you can ground them — rather than a few
instances deeply.
Depth invites over-committing to claims you have not yet reconciled across sources. Save it
for later passes, where certainty has been earned by the passes before.
Let the confidence band do the honest work. A confidence band is the provenance tier you stamp
on every authored act:
confident — the source states it outright.
probable — a synthesis you drew across sources that none states verbatim.
tentative — thin or unverifiable evidence.
On a first breadth pass, skip the tentative band entirely. If you cannot ground it, it
does not get a node yet. A map is not improved by nodes you would not defend.

Calibrate the voice on node #1#

Author one node. Read it back with temper resource show <ref>. Confirm the depth and
voice with whoever the map is for. Then batch the other twenty.
This is cheap insurance against redoing an entire layer, and it costs one round-trip.

Layer the nodes#

Two layers per abstraction pass:
A small set of concept nodes for the shared vocabulary. Each: the definition → the
axes it varies on → how the target system represents it → why it matters.
A larger set of fact nodes for how specific sources instantiate each concept.
Concept nodes anchor regions; facts populate them.
Before creating any node, search the map for an existing one — temper search "<concept>" --cogmap <MAP>. When two sources both assert one concept, distill one node citing both,
not two near-duplicates.

The invocation flow#

An invocation is a correlated, auditable unit of authoring work — opened before the first
act and closed after the last, so every act inside it is traceable. Every authoring pass is
one invocation.
The act envelope is a hard invariant. Every authored act carries --invocation,
--confidence, --reasoning, and --model. An act missing them is real but orphaned — it
will not appear under invocation show, and the audit chain is broken.
Regions only exist after a materialize. A region is a high-cohesion cluster of nodes that
forms around shared structure; materialization is what computes them. It is a safe no-op below
its formation-delta threshold, so run it at the end of every pass. Verify with temper cogmap shape <MAP>: multi-member, high-cohesion regions forming around your concept nodes is the
signal that the structure took. Singletons are fine for genuinely distinctive nodes. For how
this structure grows over time, see
how a map grows.

Script the pass, and manifest the ids#

This is the single highest-leverage habit in the whole method.
A pass is: open the invocation → loop resource create and edge assert from a small driver
→ record every created id to a node-manifest file. Commit the manifest.
The manifest is what lets the next pass wire edges to this pass's nodes. Without it,
cross-pass linkage is guesswork — you are searching the map by title and hoping. With it, the
next pass reads a file.
resource create returns both an id and a decorated ref in its JSON response, so a driver
captures linkage state for free.

Cross-question linkage makes it a graph, not a pile#

This is what separates a map from a tagged list. Every pass after the first links back into
the earlier ones.
The substrate
will not infer these edges. Author them deliberately.
Concretely, later passes assert edges like:
a structural-break theme breaks → the concept it defeats, and is exhibited_by → the
specific fact instances that show it;
a status node settles → or concerns → the concept or theme it reports on, and
classifies → the patterns a methodology sorts.
An edge is a typed, directed relationship between two nodes, carrying a kind, a polarity,
and a weight. The payoff of authoring them deliberately is visible at materialize: a status
node about a topic joins the region of the concept it concerns, while meta-level nodes —
methodology, principles — form their own regions. The map ends up traversable as what recurs
→ why it breaks → what's settled about it
in one connected structure. For how maps relate to
each other and to their contexts, see
how maps relate.

Provenance, two ways#

--sources records block provenance on the node's body. A derived_from edge makes
that lineage visible in the graph. These are different records, and you want both.
--sources-as-edges on resource create asserts one derived_from edge per
resource-valued source, with the canonical (leads-to, inverse) shape. Prefer it to
hand-asserting the edges; a hand-rolled (express, forward) edge shares the label but not the
shape, and the region math treats the two differently.
The authorship trio — temper-provenance, temper-llm-model, temper-llm-run — is stamped
into managed_meta by the server
, derived from the act envelope. Do not pass it by hand.
Distill the abstraction from the analysis artifacts, and anchor it to raw sources.
Concept and theme nodes honestly cite the downstream analyses; fact nodes cite the specific
raw chunks. The transitive chain — theme exhibited_by→ fact derived_from→ raw chunk —
grounds the abstraction without forcing a raw citation onto every node.

Ground volatile claims in a dated source#

For anything that drifts — status, "what's still open", current ownership — cite a dated
source and stamp an as_of facet. Never assert current state by inference.
A node that claims live truth without a date will be wrong silently, and nothing in the map
will tell you when it turned.

Facets are the axes you want the map organized by#

A facet is a typed axis on a node — a named value like as_of, source-family,
segment, or status. Set the typed axes on the instance and status nodes. After materialize
they surface as cross-cutting region views.
Put the same values in the node's body and title too: content-based region formation
reinforces what the facets declare.
Facets carry a node's semantic properties. Source provenance never goes in a facet.

A compact checklist for one distillation pass#

1.
Read the telos-charter. Pick the one question this pass answers.
2.
Ingest any missing citable sources — check max line length first.
3.
Decide the node layers and the breadth-with-confidence bar for this pass.
4.
invocation open.
5.
Author node #1. Show it. Calibrate voice with whoever the map is for.
6.
Batch the rest: resource create --cogmap … --sources … --sources-as-edges, recording
every id to the node manifest.
7.
Assert the cross-question edges back into earlier passes' nodes.
8.
resource facet the typed axes. Stamp as_of on anything volatile.
9.
invocation close with an outcome count.
10.
cogmap materialize, then cogmap shape to confirm regions formed.
11.
Commit the node manifest.
Modified at 2026-08-20 02:05:41
Previous
Bootstrap a Team's Self-Cognition
Next
Connect Claude Code
Built with