Latent Tools

Expand concepts into rich conceptual landscapes for research, context priming, and cross-domain exploration.

Latent is often the first pass: use latent.expand to widen or deepen the idea space, then use latent.orient and latent.horizon to navigate that space with angular precision and find its boundaries.

Each model interaction is a big bang into a dark forest — every concept in the context window illuminates paths the model can explore. Latent tools give your agents a flashlight.


latent.expand@1

Expand a seed concept via depth, breadth, or bridge mode.

Parameters

Parameter Type Required Default Description
seed string yes The concept, goal, or context fragment to expand
mode string no breadth depth = drill down; breadth = cross-domain; bridge = connect two concepts
target string no Second concept (required for bridge mode)
format string no summary summary = dense text for context injection; graph = structured nodes/edges
levels integer no 2 Expansion intensity (1-3). Higher = more concepts, larger model, more credits
domain_hint string no Bias the expansion toward a specific domain

Modes

Depth — follow one conceptual path deep. Hierarchical decomposition, domain-specific formalization, edge cases, failure modes, historical evolution. Narrow but thorough.

Breadth — shine light in all directions. Find isomorphic structures across domains, orthogonal dimensions, cross-disciplinary connections, contrasts and inversions. Wide and surprising.

Bridge — given two concepts, find shared abstractions, transformation paths, and unexpected connections. Where the analogy breaks is often as valuable as where it holds.

Example: Breadth Expansion

{
  "name": "data-grout@1/latent.expand@1",
  "arguments": {
    "seed": "cache invalidation",
    "mode": "breadth",
    "levels": 2
  }
}

Response (summary format):

{
  "seed": "cache invalidation",
  "mode": "breadth",
  "format": "summary",
  "expansion": "Cache invalidation is isomorphic to: (1) consensus problems in distributed systems — when does a replica know its state is stale? (2) memory reconsolidation in neuroscience — retrieved memories become labile and must be restabilized. (3) legal precedent override — when a new ruling invalidates cached interpretations of prior law...",
  "concepts": ["distributed consensus", "memory reconsolidation", "legal precedent", "eventual consistency", "signal propagation"],
  "dimensions_explored": 8,
  "llm_credits": 5,
  "model": "gpt-4.1",
  "levels": 2,
  "_meta": { "cache_ref": "rc_abc123" }
}

Example: Bridge

{
  "name": "data-grout@1/latent.expand@1",
  "arguments": {
    "seed": "version control",
    "target": "memory reconsolidation",
    "mode": "bridge"
  }
}

Example: Graph Format

{
  "name": "data-grout@1/latent.expand@1",
  "arguments": {
    "seed": "cache invalidation",
    "mode": "breadth",
    "format": "graph",
    "levels": 1
  }
}

Response (graph format):

{
  "seed": "cache invalidation",
  "mode": "breadth",
  "format": "graph",
  "nodes": [
    { "id": "n1", "label": "distributed consensus", "domain": "systems", "relation": "isomorphic", "weight": 0.9, "description": "Both solve 'when is local state stale?'" },
    { "id": "n2", "label": "memory reconsolidation", "domain": "neuroscience", "relation": "isomorphic", "weight": 0.7, "description": "Retrieved memories become labile" }
  ],
  "edges": [
    { "from": "seed", "to": "n1", "type": "shares_structure", "description": "Staleness detection" },
    { "from": "n1", "to": "n2", "type": "analogous", "description": "Digital and biological freshness" }
  ],
  "summary": "Cache invalidation maps structurally to consensus and memory reconsolidation.",
  "node_count": 2,
  "edge_count": 2,
  "_meta": { "cache_ref": "rc_def456" }
}

Cost

Levels Mode Model Credits
1 depth/breadth gpt-4.1-mini ~2
2 depth/breadth gpt-4.1 ~5
3 depth/breadth gpt-4.1 ~8
any bridge gpt-4.1 ~5

Tips

  • For context priming: use summary format and inject the expansion text into your agent’s system prompt or context window.
  • For programmatic use: use graph format to get structured nodes and edges you can filter, traverse, or visualize.
  • For structured latent-space navigation: start with latent.expand, then use latent.orient or latent.horizon when you want typed navigation state instead of a one-off expansion.
  • Start with level 1 for quick exploration, then increase levels if you need more depth.
  • Use domain_hint to steer the expansion toward a specific field when you know where you want to look.
  • Bridge mode is powerful for finding connections between seemingly unrelated domains — useful for research, design, and lateral thinking.

When to use Latent

Scenario Use
“What concepts relate to X across different fields?” breadth mode
“Break down X into its full technical depth” depth mode
“What do X and Y have in common?” bridge mode
“I need richer context before starting a research task” breadth with summary format
“I want a concept map I can process programmatically” any mode with graph format
“I want to turn a broad expansion into a navigable latent-space map” latent.expand, then latent.orient or latent.horizon

latent.orient@1

Navigate to a specific angular position in a concept’s latent neighbourhood. Given a seed concept, an axis of variation, and an angle of approach, Orient performs dual-pass expansion (canonical + exploratory) to map the semantic neighborhood from that position. Outputs include a structured context block, a graph of nodes and edges, and typed facts for persistence in Logic cells.

Backward compatibility: previously prism.orient. The old name is accepted as an alias.

Parameters

Parameter Type Required Default Description
seed string yes The concept to orient around
axis string yes Rotational axis: negation, abstraction, agency, scale, formality, narrative, custom
angle string no opposite Angular position: opposite, orthogonal, complement, 45, custom
axis_description string no Required when axis=custom
angle_description string no Required when angle=custom
levels integer no 2 Expansion intensity (1-3)
passes string no both canonical, exploratory, or both
output_format string no context_block context_block, graph, nodes_only, facts, or all
persist boolean no false Write navigation state to Logic cell
namespace string no orient_default Logic cell namespace for persisted state
domain_hint string no Bias expansion toward a specific domain

Orient automatically asserts explored(seed, axis) and explored(seed, angle) relation facts, enabling open-world queries like: “which axes haven’t been explored yet for this seed?”

Example

{
  "name": "data-grout@1/latent.orient@1",
  "arguments": {
    "seed": "consciousness",
    "axis": "negation",
    "angle": "opposite",
    "output_format": "all"
  }
}

latent.horizon@1

Find the boundaries of a concept’s latent neighborhood. Horizon identifies boundary nodes from a previous orientation and optionally expands beyond them into unexplored territory.

Backward compatibility: previously prism.horizon. The old name is accepted as an alias.

Parameters

Parameter Type Required Default Description
seed string yes The concept to find boundaries for
orientation_id string no Load boundary nodes from a previous latent.orient result
expand_beyond boolean no false Expand beyond boundary nodes into new territory
expand_limit integer no 3 Maximum boundary nodes to expand beyond
levels integer no 2 Expansion intensity (1-3)
output_format string no graph context_block, graph, facts, or all
persist boolean no false Write horizon state to Logic cell
namespace string no orient_default Logic cell namespace

Horizon asserts explored(seed, "horizon") relation facts. Combined with Orient’s explored facts, this supports compositional open-world reasoning: agents can determine which concepts have been oriented, which have been bounded, and which remain unexplored.

Composability

Orient and Horizon are designed to chain: Orient maps a neighborhood and produces an orientation_id. Pass that ID to Horizon to find the boundaries. Horizon’s expand_beyond then reaches into genuinely novel territory beyond the original orientation. All facts are persisted as typed relations in the Logic cell, making them queryable via logic.query (including raw Prolog) and traversable with the graph predicates (path, reachable, neighbors).