Skip to main content

Fact Store

@twonines/fact-storev2026.07.13.1· 1d agoMODELSSKILLS
01README

Stores, validates, and serves organizational facts for AI agent consumption. Supports a propose→review→activate lifecycle with adversarial validation (ferret/mole pattern). Facts are relational truths about infrastructure, repositories, services, teams, and their connections. Ships with three agent skills — propose-facts and review-proposals drive the discovery and review loops (ferret/mole); consult-facts closes the loop as the consumer role, querying facts before engineering work and detecting drift.

02Models1
@twonines/fact-storev2026.07.13.1mod.ts

Global Arguments

ArgumentTypeDescription
embedUrl?stringOpenAI-compatible embeddings endpoint (required for export/search methods).
embedToken?stringBearer token for the embeddings API (required for export/search methods).
embedModel?stringEmbedding model ID (default: text-embedding-3-small).
embedDim?numberVector dimension (default: 1536).
outputPath?stringPath for the exported SQLite db (default: ~/.jitter/facts.db).
fn propose(kind: string, scope: string, value: unknown, proposedBy: string, evidence?: array, supersedesFactId?: string)
Submit a candidate fact for adversarial review. Called by discovery agents (ferret).
ArgumentTypeDescription
kindstringFact kind (e.g. repository_deploys_to_account)
scopestringScope: global or narrower
valueunknownThe fact value (string, boolean, array, or object)
proposedBystringAgent or human identifier
evidence?arrayReferences to scan data or other sources
supersedesFactId?stringID of an existing active fact this proposal corrects, if any.
fn activate(proposalId: string, reviewedBy: string)
Promote a proposal to an active fact. Called by reviewer agents (mole).
ArgumentTypeDescription
proposalIdstringID of the proposal to activate
reviewedBystringReviewer agent or human identifier
fn reject(proposalId: string, reason: string, reviewedBy: string)
Reject a proposal with feedback. Called by reviewer agents (mole).
ArgumentTypeDescription
proposalIdstringID of the proposal to reject
reasonstringWhy this proposal was rejected — actionable feedback
reviewedBystringReviewer agent or human identifier
fn withdraw(proposalId: string)
Retract a proposal. Called by the proposing agent after acknowledging rejection feedback.
ArgumentTypeDescription
proposalIdstringID of the proposal to withdraw
fn query(scope?: string, hints?: array, kinds?: array, limit: number)
Assemble a truth packet of relevant constraints and facts for a given scope/task.
ArgumentTypeDescription
scope?stringRepo path, service name, or entity identity to scope results
hints?arrayTask keywords for relevance matching
kinds?arrayFilter to specific fact kinds
limitnumberMaximum facts to return
fn list_proposals(status: enum, offset: number, limit: number)
List proposals filtered by status. Supports pagination via offset+limit.
ArgumentTypeDescription
statusenum
offsetnumberNumber of matching proposals to skip (for pagination)
limitnumberMaximum proposals to return (max 500)
fn list_facts(scope?: string, kind?: string, identityValue?: string, offset: number, limit: number)
List active facts, optionally filtered by scope or kind.
ArgumentTypeDescription
scope?stringFilter by scope
kind?stringFilter by fact kind
identityValue?stringFilter by subject identity
offsetnumberNumber of matching facts to skip (for pagination)
limitnumberMaximum facts to return (max 500)
fn add_constraint(kind: string, scope: string, rule: string, rationale?: string, appliesTo?: array)
Add a behavioral constraint (human-curated rule). Not derived from evidence — authored by people.
ArgumentTypeDescription
kindstringConstraint kind: process, required_execution_path, naming_convention, security_boundary, deployment_rule
scopestring
rulestringThe constraint rule text
rationale?stringWhy this constraint exists
appliesTo?arrayTags for matching: language names, tool names, repo patterns
fn retire_constraint(constraintId: string)
Retire a constraint that no longer applies. Constraints are
ArgumentTypeDescription
constraintIdstringID of the constraint to retire
fn retire_fact(factId: string, reason: string, supersededByFactId?: string)
Retire or supersede an active fact that's no longer accurate.
ArgumentTypeDescription
factIdstringID of the fact to retire (its own id field, from query/list_facts output)
reasonstringWhy this fact is no longer accurate
supersededByFactId?stringID of the fact that replaces this one. If set, status becomes
fn coverage_gaps(discoveredRepos?: array, indexedRepos?: array, limit: number)
Analyze the fact store for knowledge gaps — repos with no facts,
ArgumentTypeDescription
discoveredRepos?arrayList of known repo paths. If omitted, analyzes only repos already in the fact store.
indexedRepos?arrayList of repos that have been indexed (have a searchable db). Gaps flagged for unindexed repos.
limitnumberMax gaps to return, prioritized by impact.
fn export()
Export all active facts and constraints to a local SQLite database
fn search(query: string, limit: number)
Hybrid FTS5 + vector search over the current exported index —
ArgumentTypeDescription
querystringSearch query — natural language or keywords
limitnumberMax results per category (facts, constraints).

Resources

fact(infinite)— An accepted, active truth claim about an entity
proposal(infinite)— A candidate fact awaiting review
constraint(infinite)— A human-curated behavioral rule
truth-packet(1h)— Assembled context for agent consumption
proposal-list(1h)— Filtered list of proposals
fact-list(1h)— Filtered list of facts
coverage-gaps(1h)— Analysis of knowledge gaps for curiosity-driven discovery
export-state(infinite)— Result of the last fact export to SQLite
index(infinite)— The exported SQLite database bytes (base64), stored as a portable
search-results(1h)— Hybrid FTS5 + vector search results against the current index
03Skills3
propose-facts2 files
review-proposals2 files
consult-facts2 files
04Previous Versions11
2026.07.12.2Jul 12, 2026
2026.07.12.1Jul 12, 2026

Modified 1 models

2026.07.10.2Jul 10, 2026
2026.07.10.1Jul 10, 2026

Modified 1 models. Added 1 skills

2026.07.09.2Jul 9, 2026
2026.07.09.1Jul 9, 2026
2026.07.08.3Jul 8, 2026
2026.07.08.2Jul 8, 2026
2026.07.08.1Jul 8, 2026

Modified 1 models

2026.07.03.1Jul 3, 2026
2026.07.02.1Jul 2, 2026
05Stats
A
100 / 100
Downloads
6
Archive size
158.8 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License declared1/1earned
  • Verified public repository2/2earned
06Platforms
07Labels