- Default Behavior — Honcho reasons over every message written to a peer
- Observer-Observed Model — How peers build representations of other peers
- Querying with Target — Accessing perspective-specific representations
- Use Cases — When to use directional representations
Default: Reasoning On
Whenobserve_me=true (the default), Honcho forms one representation per peer, reasoning over every message written to that peer across all sessions.
You can retrieve a subset of conclusions from a peer’s representation using working_rep():
Observer-Observed Representations
When you enableobserve_others=true at the session level, peers begin forming directional representations of other peers they interact with. These representations are scoped to what that observer has actually witnessed.
How It Works
Each peer has one representation, but that representation can contain reasoning about:- Itself (when Honcho observes the peer with
observe_me=true) - Other peers (when the peer observes others with
observe_others=true)
| Observer | Observed | What This Represents |
|---|---|---|
| alice | alice | Honcho’s representation of Alice (across all sessions) |
| alice | bob | Alice’s representation of Bob (from sessions Alice participated in) |
| alice | charlie | Alice’s representation of Charlie (from sessions Alice participated in) |
Information Segmentation
This enables sophisticated scenarios where different agents have different knowledge based on what they’ve actually witnessed. Example: Bob and Charlie tell different things to Alice in separate sessions.observe_others=true enabled on Alice:
- Alice’s representation of Bob only includes Session 1 (she heard Bob say he had pancakes)
- Alice’s representation of Charlie only includes Session 2 (she heard Charlie’s claim about Bob lying)
- Honcho’s representation of Alice reasons over both sessions

Querying with Target
Thetarget parameter controls which representation you retrieve:
| Query | Returns |
|---|---|
working_rep("alice") | Conclusions from Honcho’s representation of Alice (across all sessions) |
working_rep("alice", target="bob") | Conclusions from Alice’s representation of Bob (from sessions Alice participated in) |
working_rep("alice", target="charlie") | Conclusions from Alice’s representation of Charlie (from sessions Alice participated in) |
Code Examples
Chat Endpoint with Target
Thetarget parameter also works with the chat endpoint:
The
target parameter only returns meaningful results if the observer peer has observe_others=true and has actually participated in sessions with the observed peer. Otherwise, the representation will be empty or non-existent.When to Use Directional Representations
Use Cases Where This Matters
- Multi-agent games: NPCs should only know what they’ve witnessed, not omniscient game state
- Information asymmetry scenarios: Different agents have access to different information
- Perspective-dependent agents: Agent behavior depends on their unique understanding of other agents
- Privacy-segmented systems: Users should only see representations based on their interactions
Use Cases Where Default Is Sufficient
- Single-user applications: Only one user, so perspective doesn’t matter
- Centralized knowledge systems: All agents should share the same understanding
- Simple chatbots: No multi-agent interaction or information segmentation needed
Most applications don’t need directional representations. Start with the default Honcho-observes-all behavior and only enable
observe_others when you need information segmentation between agents.Architecture: How It’s Stored
Under the hood, Honcho stores representations as (observer, observed) pairs in internal collections:- Collection: A unique (observer, observed, workspace) tuple containing documents
- Documents: Individual conclusions and artifacts (deductive, inductive, abductive conclusions, summaries, peer cards) with session scoping
target, Honcho fetches documents from the specific (observer, observed) collection. When you retrieve without target, it fetches from the (peer, peer) collection—the peer’s self-representation.
This architecture enables:
- Efficient querying: Each perspective is isolated and can be queried independently
- Session filtering: Within a collection, documents can be filtered by session
- Scalability: Adding more observers doesn’t degrade query performance
Semantic Search Parameters
Bothworking_rep() and chat() support semantic filtering to retrieve a subset of relevant conclusions. You can optionally filter by session to retrieve only conclusions from specific session context:
| Parameter | Type | Description |
|---|---|---|
search_query | str | Semantic query to filter conclusions |
search_top_k | int | Number of results to include (1–100) |
search_max_distance | float | Maximum semantic distance (0.0–1.0) |
include_most_derived | bool | Include most recently derived conclusions |
max_observations | int | Cap on total conclusions returned (1–100) |
When Representations Update
Directional representations update automatically through the reasoning pipeline when:- A message is created in a session
- The message sender has
observe_me=true(or session-level equivalent) - Other peers in the session have
observe_others=true
Conclusions are cached for fast retrieval. Use
working_rep() to retrieve stored conclusions for dashboards and analytics. Use peer.chat() when you need query-specific reasoning with natural language.