Experimental, early beta. Data model and interfaces are unstable; expect breaking changes between releases.

Schema

Noumenon stores everything it knows in one Datomic database per repo. The picture below is the entity graph; the table beneath it is every attribute, parsed from the upstream EDN files at build time.

Entity Diagram

How the codebase-knowledge entities connect. Auth, settings, ask sessions, benchmark/introspect runs, and the artifact tables sit in the same database but are intentionally omitted here so the graph reads cleanly. The full attribute list follows.

erDiagram
    REPO {
        string repo_uri
        string repo_head_sha
    }
    COMMIT {
        string git_sha PK
        string commit_message
        long   commit_timestamp
        long   commit_additions
        long   commit_deletions
    }
    AUTHOR {
        string author_name
        string author_email
    }
    DIR {
        string dir_path PK
    }
    FILE {
        string file_path PK
        keyword file_lang
        long    file_lines
        long    file_size
    }
    CODE {
        string code_name
        keyword code_kind
        long    code_line_start
        long    code_line_end
        keyword code_complexity
    }
    COMPONENT {
        string component_name
        keyword arch_layer
    }
    CHUNK {
        long   chunk_index
        string chunk_text
    }
    REPO ||--o{ COMMIT : "commits"
    REPO ||--|| DIR : "root"
    DIR  ||--o{ DIR  : "children"
    DIR  ||--o{ FILE : "contains"
    COMMIT }o--|| AUTHOR : "by"
    COMMIT ||--o{ COMMIT : "parents"
    COMMIT }o--o{ FILE   : "changed-files"
    FILE }o--o{ FILE : "imports"
    FILE ||--o{ CODE : "segments"
    CODE }o--o{ CODE : "calls"
    COMPONENT }o--o{ FILE      : "files"
    COMPONENT }o--o{ COMPONENT : "depends-on"
    CHUNK }o--|| FILE      : "of file"
    CHUNK }o--|| COMPONENT : "of component"

Two Databases per Instance

Every Noumenon instance hosts two kinds of database. Per-repo databases hold facts derived from a specific repository: commits, files, code segments, components, the import graph, the TF-IDF index. One per imported repo. Identity is derived from the repo path or URL. Schema files: core.edn, architecture.edn, synthesis.edn, provenance.edn.

The noumenon-internal meta database holds cross-cutting facts about Noumenon itself: introspect runs, ask sessions and feedback, named-query artifacts, prompts, auth tokens, settings. One per instance, fixed name. A prompt change affects every repo, so its history belongs in one place rather than fragmented per-repo. Schema files: ask.edn, benchmark.edn, introspect.edn, artifacts.edn, auth.edn, settings.edn.

Both run on the same Datomic Local storage and share the same schema-attribute namespace. The split is conceptual: facts about your code versus facts about how Noumenon answered questions about your code.

Traversing in Both Directions

Datomic refs are stored once but queried both ways. Forward, you name the attribute. Backward, you prefix the name with an underscore.

;; Forward: which files does this file import?
[?file :file/imports ?dep]

;; Backward: which files import this file?
[?file :file/_imports ?dependent]

;; Forward: which segments does this code segment call?
[?caller :code/calls ?callee]

;; Backward: which segments call this one?
[?callee :code/_calls ?caller]

Every :db.type/ref in the schema below is a candidate for backward traversal. The Ask agent and the named-query catalog use both directions extensively.

Attribute Reference

249 attributes across 28 namespaces, parsed from resources/schema/ in the noumenon repo. Filter by name or by description text.

:git/

AttributeTypeCard.UniqueWhat it means
:git/sha:stringoneyesContent-addressed SHA hash of a git object
:git/type:keywordoneGit object type — :commit, :tree, :blob, :tag

:repo/

AttributeTypeCard.UniqueWhat it means
:repo/uri:stringoneyesRepository URI
:repo/head-sha:stringoneGit HEAD SHA at last sync — used for staleness detection
:repo/commits:refmanyCommits belonging to this repository

:commit/

AttributeTypeCard.UniqueWhat it means
:commit/tree:refoneTree object for this commit
:commit/parents:refmanyParent commits
:commit/message:stringoneCommit message, truncated to 4096 chars
:commit/author:refonePerson who authored the commit
:commit/authored-at:instantoneTimestamp when the commit was authored
:commit/committer:refonePerson who committed
:commit/committed-at:instantoneTimestamp when the commit was committed
:commit/changed-files:refmanyFiles changed in this commit, derived from git log --numstat
:commit/kind:keywordoneCommit classification — :fix, :feat, :refactor, :chore, :docs, :test, :style, :perf, :revert, :merge, :other
:commit/additions:longoneTotal lines added across all files in this commit
:commit/deletions:longoneTotal lines deleted across all files in this commit
:commit/issue-refs:stringmanyIssue references extracted from commit message — keys (#123, PROJ-456) and URLs

:person/

AttributeTypeCard.UniqueWhat it means
:person/email:stringoneyesGit author/committer email
:person/name:stringoneGit author/committer display name

:file/

AttributeTypeCard.UniqueWhat it means
:file/path:stringoneyesFile path relative to repo root
:file/ext:stringoneFile extension
:file/lang:keywordoneDetected programming language
:file/lines:longoneLine count
:file/size:longoneFile size in bytes
:file/directory:refoneParent directory
:file/blob-sha:stringoneGit blob SHA of the file's content at the imported revision — enables content-addressed analysis promotion across branches
:file/deleted?:booleanoneTombstone marker for delta DBs — true means this file is deleted relative to the parent (trunk) DB. Never set in trunk DBs; trunk deletions hard-retract the entity instead.
:file/imports:refmanyDeterministically resolved file-to-file import edges — refs to other :file/path entities

:dir/

AttributeTypeCard.UniqueWhat it means
:dir/path:stringoneyesDirectory path relative to repo root
:dir/parent:refoneParent directory
:dir/repo:refoneRepository this directory belongs to (set on root dir only)

:tree/

AttributeTypeCard.UniqueWhat it means
:tree/nodes:refmanyTree node children (component)

:node/

AttributeTypeCard.UniqueWhat it means
:node/filename:stringoneNode filename within tree
:node/object:refoneGit object this node references
:node/paths:refmanyFile entities this node maps to

:tx/

AttributeTypeCard.UniqueWhat it means
:tx/op:keywordoneTransaction operation — :import, :analyze, :llm-analyze, :promote
:tx/source:keywordoneData source — :deterministic, :llm, or :promoted
:tx/analyzer:stringoneAnalyzer name and version
:tx/model:stringoneLLM model identifier for LLM-sourced transactions
:tx/model-source:keywordoneSource of tx/model — :resolved-model, :requested-model, or :unknown
:tx/provider:stringoneLLM provider identifier for LLM-sourced transactions
:tx/input-tokens:longoneInput tokens consumed by this transaction's LLM call
:tx/output-tokens:longoneOutput tokens produced by this transaction's LLM call
:tx/cost-usd:doubleoneEstimated USD cost of this transaction's LLM call
:tx/artifact-source:keywordoneSource of artifact change: :bootstrap, :reseed, :introspect, :manual-cli, :manual-mcp

:code/

AttributeTypeCard.UniqueWhat it means
:code/name:stringoneFunction/struct/type name
:code/file:refoneFile containing this code segment
:code/file+name:tupleoneyesComposite identity for code segments — file ref + name
:code/text:stringoneSource text, up to 4096 chars; longer code chunked via :chunk/
:code/kind:keywordoneSegment kind — :function :method :class :interface :trait :protocol :macro :multimethod :record :type :struct :enum :union :typedef :constant :property :module :namespace :global :include
:code/line-start:longoneStarting line number
:code/line-end:longoneEnding line number
:code/args:stringoneParameter list — e.g. "[x y]" (Clojure), "(int x, String y)" (Java)
:code/returns:stringoneReturn type — e.g. "void", "int", "Promise<string>". Omit for languages without explicit return types.
:code/visibility:keywordoneAccess level — :public, :private, :protected, :internal, :package
:code/docstring:stringoneDocumentation comment text, max 4096 chars
:code/deprecated?:booleanoneWhether this segment is marked as deprecated
:code/complexity:keywordonePer-segment complexity — :trivial, :simple, :moderate, :complex, :very-complex
:code/smells:keywordmanyCode smell indicators — :deep-nesting, :too-many-params, :long-method, :god-function, :feature-envy, :magic-numbers, :mutation-heavy, :global-state, :duplication, :poor-naming, :dead-code, :complex-conditional
:code/purpose:stringoneOne-line plain-English description of what this segment does
:code/safety-concerns:keywordmanySecurity/safety flags — :sql-injection, :xss, :race-condition, :unsafe-cast, :path-traversal, :command-injection, :buffer-overflow, :deserialization, :hardcoded-secret, :insecure-random, :unvalidated-redirect
:code/error-handling:keywordoneError handling quality — :none, :basic, :robust
:code/calls:refmanyOutbound call references to other code segments (use :code/_calls for reverse)
:code/call-names:stringmanyUnresolved function/method names this segment calls — enables dead-code detection and rough call-graph queries
:code/pure?:booleanoneWhether segment is side-effect-free (no I/O, mutation, or global state)
:code/ai-likelihood:keywordoneAI-authorship likelihood — :likely-ai, :possibly-ai, :likely-human, :unknown

:arch/

AttributeTypeCard.UniqueWhat it means
:arch/layer:keywordoneArchitectural layer — :core, :subsystem, :driver, :api, :util
:arch/subsystem:stringoneSubsystem identifier, e.g. scheduler, vfs, ext4
:arch/component:refoneComponent this entity belongs to

:component/

AttributeTypeCard.UniqueWhat it means
:component/name:stringoneyesLogical component name
:component/depends-on:refmanyComponent dependencies
:component/files:refmanyFiles belonging to this component
:component/summary:stringonePlain-English summary of what this component does
:component/purpose:stringoneWhy this component exists — its role in the system
:component/layer:keywordoneArchitectural layer — :core, :subsystem, :driver, :api, :util
:component/category:keywordoneDomain role — :backend, :frontend, :infrastructure, :configuration, :data, :testing, :documentation, :tooling, :shared
:component/patterns:keywordmanyArchitectural patterns spanning this component — :pipeline, :state-machine, :producer-consumer, etc.
:component/complexity:keywordoneAggregate complexity — :trivial, :simple, :moderate, :complex, :very-complex
:component/subsystem:stringoneSubsystem grouping — coarser than component, e.g. 'analysis-pipeline', 'query-engine'

:sem/

AttributeTypeCard.UniqueWhat it means
:sem/dependencies:stringmanyDEPRECATED — use :file/imports instead. Raw import/require/use names from LLM first-pass, superseded by deterministic extraction.
:sem/summary:stringonePlain-English summary, max 4096 chars
:sem/purpose:stringonePurpose/rationale for code existence
:sem/tags:keywordmanySemantic tags — :error-handling, :locking, :allocation, :io, :parsing, etc.
:sem/complexity:keywordoneComplexity rating — :trivial, :simple, :moderate, :complex, :very-complex
:sem/patterns:keywordmanyDesign patterns — :callback, :state-machine, :producer-consumer, :ref-counting
:sem/category:keywordoneDomain role — :backend, :frontend, :infrastructure, :configuration, :data, :testing, :documentation, :tooling, :shared
:sem/synthesis-hints:stringoneEDN blob of architectural hints from file-level analysis — layer-guess, category-guess, patterns-observed, purpose-guess, architectural-notes

:chunk/

AttributeTypeCard.UniqueWhat it means
:chunk/parent:refoneParent entity (File or CodeSegment)
:chunk/index:longoneSequence number within parent
:chunk/text:stringoneText content of this chunk, up to 4096 chars

:artifact.query/

AttributeTypeCard.UniqueWhat it means
:artifact.query/name:stringoneyesUnique query identifier (e.g. "hotspots")
:artifact.query/description:stringoneHuman-readable description of what the query finds
:artifact.query/query-edn:stringoneDatalog query vector as pr-str EDN
:artifact.query/inputs:stringoneParameter names as pr-str EDN vector (e.g. "[:file-path]")
:artifact.query/uses-rules:booleanoneTrue if query requires Datalog rules passed as %
:artifact.query/active:booleanoneWhether this query is available for execution (replaces index.edn allowlist)
:artifact.query/federation-safe?:booleanoneDEPRECATED — derived from :artifact.query/federation-mode. Kept for response shape (the launcher's banner toggles on this). Set automatically when federation-mode is non-nil; not read from query EDN anymore.
:artifact.query/federation-mode:keywordoneFederation merge mode declared by the query. :tombstone-only — trunk minus tombstoned paths; never include delta rows (the safe default). :added-files-merge — current trunk-plus-delta-rows behavior; opt-in for queries that join only on :stable attrs (validated at seed time). Absent — query is not federation-safe; trunk-only response.

:artifact.rules/

AttributeTypeCard.UniqueWhat it means
:artifact.rules/id:stringoneyesRules identifier (always "default")
:artifact.rules/edn:stringoneDatalog rules vector as pr-str EDN

:artifact.prompt/

AttributeTypeCard.UniqueWhat it means
:artifact.prompt/name:stringoneyesPrompt identifier (e.g. "agent-system", "analyze-file")
:artifact.prompt/template:stringonePrompt template string — for templates under 4KB
:artifact.prompt/chunks:refmanyOrdered chunks for templates exceeding 4KB string limit
:artifact.prompt/version:stringonePrompt version string (e.g. "0.6.0")

:artifact.chunk/

AttributeTypeCard.UniqueWhat it means
:artifact.chunk/ordinal:longoneZero-based ordering of chunk within parent
:artifact.chunk/content:stringoneChunk content string (up to 4KB)

:ask.session/

AttributeTypeCard.UniqueWhat it means
:ask.session/id:stringoneyesUnique session identifier (UUID)
:ask.session/question:stringoneThe original question text
:ask.session/answer:stringoneFinal answer text returned to the user
:ask.session/status:keywordoneOutcome: :answered, :budget-exhausted, :error
:ask.session/channel:keywordoneHow the question was asked: :cli, :ui, :mcp
:ask.session/caller:keywordoneWho asked: :human or :ai-agent
:ask.session/repo:stringoneDatabase name the question was asked against
:ask.session/started-at:instantoneWhen the session began
:ask.session/duration-ms:longoneTotal wall-clock time in milliseconds
:ask.session/input-tokens:longoneTotal LLM input tokens consumed
:ask.session/output-tokens:longoneTotal LLM output tokens consumed
:ask.session/iterations:longoneNumber of agent loop iterations
:ask.session/feedback:keywordoneUser feedback: :positive, :negative, or nil (no feedback yet)
:ask.session/feedback-comment:stringoneOptional free-text comment from the user about the answer quality
:ask.session/steps:refmanyOrdered step entities for this session
:ask.session/missing-attributes:stringoneEDN vector of attributes/relationships the agent needed but couldn't find
:ask.session/quality-issues:stringoneEDN vector of data quality problems the agent observed
:ask.session/suggested-queries:stringoneEDN vector of named query descriptions the agent wished existed
:ask.session/agent-notes:stringoneFree-text observations from the agent about the data
:ask.session/seed-results:stringoneEDN vector of TF-IDF seed results [{:kind :path/:name :score}]

:ask.step/

AttributeTypeCard.UniqueWhat it means
:ask.step/ordinal:longoneZero-based step index within the session
:ask.step/type:keywordoneStep type: :query, :schema, :rules, :answer, :error
:ask.step/query-edn:stringoneDatalog query as pr-str EDN (when type is :query)
:ask.step/result-count:longoneNumber of result rows returned
:ask.step/result-sample:stringoneFirst few result rows as pr-str EDN (up to 4KB)
:ask.step/reasoning:stringoneLLM reasoning text before the tool call
:ask.step/elapsed-ms:longoneWall-clock time for this step in milliseconds

:bench.run/

AttributeTypeCard.UniqueWhat it means
:bench.run/id:stringoneyesBenchmark run identifier (timestamp-uuid)
:bench.run/repo-path:stringoneRepository path benchmarked
:bench.run/commit-sha:stringoneGit HEAD SHA at time of benchmark
:bench.run/started-at:instantoneWhen the benchmark run started
:bench.run/completed-at:instantoneWhen the benchmark run completed
:bench.run/duration-ms:longoneWall-clock duration in milliseconds
:bench.run/model-config:stringoneModel configuration as EDN string {:provider :model :judge-model}
:bench.run/resolved-model:stringoneActual model ID resolved from alias (e.g. claude-sonnet-4-6-20250514)
:bench.run/resolved-judge-model:stringoneActual judge model ID resolved from alias
:bench.run/concurrency:longoneParallel workers used
:bench.run/noumenon-version:stringoneNoumenon version at benchmark time
:bench.run/layers:stringoneEDN vector of conditions run, e.g. [:raw :full]
:bench.run/status:keywordoneRun outcome — :completed, :stopped, :error
:bench.run/stop-reason:keywordoneWhy the run stopped early — :max-questions, :max-cost, :stop-after
:bench.run/error-message:stringoneError details when status is :error
:bench.run/canonical?:booleanoneTrue if full mode with all layers and no skip flags — only canonical runs are comparable
:bench.run/completed-count:longoneQuestions actually completed
:bench.run/expected-count:longoneQuestions expected to complete
:bench.run/empty-context-count:longoneQuestions where KG query returned no data — indicates pipeline gaps
:bench.run/mode:stringoneEDN mode flags, e.g. {:skip-raw true :deterministic-only true}
:bench.run/tags:keywordmanyFree-form labels — :baseline, :pre-refactor, :after-import-fix, etc.
:bench.run/notes:stringoneFree-text annotation about the run
:bench.run/question-set-hash:stringoneSHA-256 of questions EDN — detects question changes between runs
:bench.run/rubric-hash:stringoneSHA-256 of judge template
:bench.run/answer-prompt-hash:stringoneSHA-256 of answer prompt template
:bench.run/db-basis-t:longoneDatomic (d/basis-t db) — exact KG state at benchmark time
:bench.run/question-count:longoneNumber of scored questions
:bench.run/raw-mean:doubleoneMean score for :raw condition (0.0-1.0)
:bench.run/import-mean:doubleoneMean score for :import condition (absent if not run)
:bench.run/enrich-mean:doubleoneMean score for :enrich condition (absent if not run)
:bench.run/full-mean:doubleoneMean score for :full condition (0.0-1.0)
:bench.run/weighted-raw-mean:doubleoneCategory-weighted mean score for :raw condition
:bench.run/weighted-import-mean:doubleoneCategory-weighted mean score for :import condition
:bench.run/weighted-enrich-mean:doubleoneCategory-weighted mean score for :enrich condition
:bench.run/weighted-full-mean:doubleoneCategory-weighted mean score for :full condition
:bench.run/embedded-mean:doubleoneMean score for :embedded (TF-IDF) condition (absent if not run)
:bench.run/weighted-embedded-mean:doubleoneCategory-weighted mean score for :embedded condition
:bench.run/deterministic-count:longoneNumber of deterministically scored questions
:bench.run/deterministic-mean:doubleoneMean score for deterministically scored questions
:bench.run/llm-judged-count:longoneNumber of LLM-judged questions
:bench.run/llm-judged-mean:doubleoneMean score for LLM-judged questions
:bench.run/input-tokens:longoneTotal input tokens consumed
:bench.run/output-tokens:longoneTotal output tokens produced
:bench.run/cost-usd:doubleoneTotal estimated cost in USD
:bench.run/results:refmanyPer-question result entities (component — retracted with run)
:bench.run/checkpoint-path:stringonePath to the EDN checkpoint file with full answer text
:bench.run/report-path:stringonePath to generated Markdown report

:bench.result/

AttributeTypeCard.UniqueWhat it means
:bench.result/question-id:keywordoneQuestion identifier — :q01, :q02, etc.
:bench.result/category:keywordoneQuestion category — :single-hop, :multi-hop, :architectural
:bench.result/scoring:keywordoneScoring method — :deterministic or :llm
:bench.result/query-name:stringoneNamed Datalog query used for context
:bench.result/question-text:stringoneResolved question text (with substituted parameters)
:bench.result/min-layer:keywordoneMinimum layer needed to answer — :import, :enrich, or :full
:bench.result/raw-score:keywordoneScore for raw condition — :correct, :partial, :wrong
:bench.result/raw-reasoning:stringoneJudge reasoning for raw condition score
:bench.result/raw-tokens:longoneInput + output tokens for raw condition
:bench.result/import-score:keywordoneScore for import condition — :correct, :partial, :wrong
:bench.result/import-reasoning:stringoneJudge reasoning for import condition score
:bench.result/import-tokens:longoneInput + output tokens for import condition
:bench.result/enrich-score:keywordoneScore for enrich condition — :correct, :partial, :wrong
:bench.result/enrich-reasoning:stringoneJudge reasoning for enrich condition score
:bench.result/enrich-tokens:longoneInput + output tokens for enrich condition
:bench.result/full-score:keywordoneScore for full KG condition — :correct, :partial, :wrong
:bench.result/full-reasoning:stringoneJudge reasoning for full KG condition score
:bench.result/full-tokens:longoneInput + output tokens for full KG condition
:bench.result/embedded-score:keywordoneScore for TF-IDF embedded condition — :correct, :partial, :wrong
:bench.result/embedded-reasoning:stringoneJudge reasoning for TF-IDF embedded condition score
:bench.result/embedded-tokens:longoneInput + output tokens for TF-IDF embedded condition

:introspect.run/

AttributeTypeCard.UniqueWhat it means
:introspect.run/id:stringoneyesIntrospect run identifier (timestamp-uuid)
:introspect.run/repo-path:stringoneRepository path used for evaluation
:introspect.run/commit-sha:stringoneGit HEAD SHA at time of run
:introspect.run/started-at:instantoneWhen the introspect run started
:introspect.run/completed-at:instantoneWhen the introspect run completed
:introspect.run/duration-ms:longoneWall-clock duration in milliseconds
:introspect.run/model-config:stringoneModel configuration as EDN string {:provider :model}
:introspect.run/max-iterations:longoneMaximum iterations configured for this run
:introspect.run/noumenon-version:stringoneNoumenon version at run time
:introspect.run/prompt-hash:stringoneSHA-256 of agent system prompt at run start
:introspect.run/examples-hash:stringoneSHA-256 of agent examples at run start
:introspect.run/rules-hash:stringoneSHA-256 of Datalog rules at run start
:introspect.run/db-basis-t:longoneDatomic basis-t of the target repo database at evaluation time
:introspect.run/baseline-mean:doubleoneBaseline mean score at run start (0.0-1.0)
:introspect.run/final-mean:doubleoneFinal mean score at run end (0.0-1.0)
:introspect.run/improvement-count:longoneNumber of iterations that improved the score
:introspect.run/iteration-count:longoneTotal iterations completed
:introspect.run/cost-usd:doubleoneTotal estimated cost in USD
:introspect.run/iterations:refmanyPer-iteration result entities (component — retracted with run)

:introspect.iter/

AttributeTypeCard.UniqueWhat it means
:introspect.iter/index:longone1-indexed iteration number within the run
:introspect.iter/target:keywordoneOptimization target — :examples, :system-prompt, :rules, :code, :train
:introspect.iter/goal:stringoneSelf-described improvement goal
:introspect.iter/rationale:stringoneOptimizer's reasoning for the proposed change
:introspect.iter/outcome:keywordoneIteration outcome — :improved, :reverted, :skipped, :gate-failed, :error
:introspect.iter/baseline-mean:doubleoneScore before this iteration
:introspect.iter/result-mean:doubleoneScore after this iteration (before keep/revert decision)
:introspect.iter/delta:doubleoneScore change (result-mean - baseline-mean)
:introspect.iter/timestamp:instantoneWhen this iteration completed
:introspect.iter/modification:stringoneEDN string of the modification applied (only for :improved outcomes)
:introspect.iter/error:stringoneError message when outcome is :error

:prov/

AttributeTypeCard.UniqueWhat it means
:prov/confidence:doubleoneLLM confidence score, 0.0–1.0 — asserted on entity (file/code-segment), not on tx
:prov/model-version:stringoneSpecific LLM model version identifier
:prov/prompt-hash:stringoneSHA hash of prompt template used
:prov/analyzed-at:instantoneTimestamp when LLM analysis was performed
:prov/promoted-from:refoneDonor transaction this analysis was promoted from — set on tx entities when content-addressed promotion copies an analysis from another tx instead of re-running the LLM. Same-DB lookup: the ref points within the recipient's DB. Cross-DB lookup: the donor tx-id is opaque from the recipient's perspective; pair this with :prov/promoted-from-db-name for the breadcrumb
:prov/promoted-from-db-name:stringoneDatabase name of the donor when promotion crossed databases (e.g. trunk DB name when a delta promoted from trunk). Nil for same-DB promotions

:token/

AttributeTypeCard.UniqueWhat it means
:token/id:uuidoneyesToken UUID (public identifier for list/revoke)
:token/hash:stringoneyesSHA-256 hash of the token value (never store raw tokens)
:token/role:keywordoneAccess role — :reader or :admin
:token/label:stringoneHuman-readable label (e.g. alice, CI bot)
:token/created-at:instantoneWhen the token was created
:token/revoked?:booleanoneTrue if token has been revoked

:managed-repo/

AttributeTypeCard.UniqueWhat it means
:managed-repo/db-name:stringoneyesDatabase name for this managed repo (identity)
:managed-repo/url:stringoneGit remote URL
:managed-repo/branch:stringoneBranch to track (default: main)
:managed-repo/registered-at:instantoneWhen this repo was registered

:setting/

AttributeTypeCard.UniqueWhat it means
:setting/key:stringoneyesSetting identifier (e.g. "theme", "sidebar-collapsed")
:setting/value:stringoneSetting value as pr-str EDN

For the live schema as the running daemon sees it (including any attributes added since this site last built), run noum show-schema <repo> or call noumenon_get_schema over MCP.