Skip to content

fix(honcho): disable AI self-observation by default - #48096

Open
lebedyncrs wants to merge 3 commits into
NousResearch:mainfrom
lebedyncrs:fix/honcho-ai-observe-me-default
Open

fix(honcho): disable AI self-observation by default#48096
lebedyncrs wants to merge 3 commits into
NousResearch:mainfrom
lebedyncrs:fix/honcho-ai-observe-me-default

Conversation

@lebedyncrs

@lebedyncrs lebedyncrs commented Jun 17, 2026

Copy link
Copy Markdown

Problem

With ai_observe_me: true, Honcho treats the AI peer's own messages as input for its self-representation. When the model answers questions about the user, it repeats user facts in its replies and those facts land under AI Self-Representation instead of the user peer.

Example: user says "I play tennis on Tuesdays" → AI replies "Got it, you play tennis on Tuesdays" → Honcho stores tennis under the AI persona, not the user.

Solution

Set ai_observe_me default to false in:

  • HonchoClientConfig dataclass default
  • "directional" observation preset
  • HonchoSessionManager fallback when no config is passed

AI still observes the user via ai_observe_others: true. Opt back in explicitly:

"observation": { "ai": { "observeMe": true, "observeOthers": true } }

Also maps lebedyncrs in AUTHOR_MAP for contributor attribution CI.

Test plan

  • scripts/run_tests.sh tests/honcho_plugin/test_client.py tests/honcho_plugin/test_session.py tests/honcho_plugin/test_empty_profile_hint.py - 207 passed
  • test_directional_preset_disables_ai_self_observation
  • test_ai_self_observation_off_without_config

lebedyncrs and others added 2 commits June 18, 2026 01:25
When ai_observe_me is true, Honcho absorbs user facts from the AI's
own replies into the AI peer's self-representation. Default it off
across the config chain so directional mode keeps AI observeOthers
without observeMe.

Co-authored-by: Cursor <cursoragent@cursor.com>
Required for Hermes contributor attribution CI on PRs from this checkout.

Co-authored-by: Cursor <cursoragent@cursor.com>
@alt-glitch alt-glitch added type/bug Something isn't working comp/plugins Plugin system and bundled plugins tool/memory Memory tool and memory providers P3 Low — cosmetic, nice to have labels Jun 17, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

Related: #48092 (earlier closed attempt at the same fix, same author). This open PR is the active version — disables ai_observe_me by default so user facts echoed in AI replies no longer land under AI Self-Representation.

AI observeMe is off by default in directional mode; document the new
semantics and use-case table in honcho.md and memory-providers.md.

Co-authored-by: Cursor <cursoragent@cursor.com>
@lebedyncrs

lebedyncrs commented Jun 18, 2026

Copy link
Copy Markdown
Author

Concrete example: what goes wrong with Honcho roles

Honcho models a conversation as two peers — a user peer and an ai peer — each with its own representation. Two flags control who observes whom:

  • observeOthers — model the other peer from their messages
  • observeMe — model myself from my own messages

The bug is the AI peer's observeMe: true.

The conversation

User:  I play tennis on Tuesdays.
AI:    Got it — you play tennis on Tuesdays.

What should happen

The user stated a fact about themselves → it belongs to the user peer:

User Representation
  Explicit Observations
    [..] user plays tennis on Tuesdays
AI Self-Representation
  (empty — the AI has no tennis schedule)

What actually happens with ai_observe_me: true

Because the AI observes its own reply ("you play tennis on Tuesdays"), Honcho extracts the fact from the AI's message and files it under the AI's self-representation — as if the assistant plays tennis. This is copied verbatim from a real pre-fix Langfuse trace (session 20260604_230747):

## AI Self-Representation
## Explicit Observations
[2026-05-23 08:06:28] hermes has a tennis event scheduled from 08:00 to 09:00 on May 23, 2026.
[2026-05-23 08:06:28] hermes has a haircut appointment scheduled from 11:00 to 11:45 on May 23, 2026.
[2026-05-23 08:06:28] hermes is providing calendar information for Saturday, May 23, 2026.

Every user fact got attributed to hermes (the AI peer). On later turns this polluted self-model is injected back into context, so the agent reasons about itself having the user's tennis match and haircut.

@teknium1

Copy link
Copy Markdown
Contributor

Thanks for tracing the AI-peer attribution path and covering both config resolution and the no-config manager fallback. The production premise is confirmed on current main: plugins/memory/honcho/client.py:249-251 sets directional ai_observe_me=True, and plugins/memory/honcho/session.py:205-210 forwards it to the assistant SessionPeerConfig.

Problems

  • Several shipped surfaces would remain contradictory after this change: the setup prompt still says directional has all observations on (plugins/memory/honcho/cli.py:830), the optional Honcho skill says all four defaults are on (optional-skills/autonomous-ai-agents/honcho/SKILL.md:93-110), and the checked-in Chinese page does too (website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/user-guide/features/honcho.md:124,166).
  • website/docs/user-guide/features/honcho.md:214 still recommends ai.observeMe=true for avoiding reply-derived user facts, which retains the self-observation path this PR is fixing.

Suggested changes

  • Update those remaining user-facing descriptions and replace the common-pattern entry with ai.observeMe=false, ai.observeOthers=true; document all-four-flags-on as an explicit opt-in.

Automated hermes-sweeper review.

@alt-glitch alt-glitch added the sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state label Jul 14, 2026
@teknium1 teknium1 added sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users labels Jul 14, 2026
@teknium1 teknium1 added the area/memory Memory subsystem: store, providers, sync, background reviews label Jul 19, 2026

@GottZ GottZ left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was generated by AI during triage.

Summary

Two PRs address the same Honcho attribution bug by changing the directional/default AI peer configuration from self-observation enabled to ai_observe_me=false while retaining ai_observe_others=true. #48092 contains the core config, fallback, and regression-test changes; #48096 carries the same fix plus partial documentation updates and is the active version.

Related pull requests

  • #48092 [closed] duplicate — (+35/-6) — superseded duplicate of #48096: The diff changes the directional preset, HonchoClientConfig, and the no-config session fallback to disable AI self-observation, with tests covering those defaults. Although closed, it remains relevant as the earlier implementation of the same fix and was explicitly superseded by the active #48096.
  • #48096 related — (+42/-13) — keep open with a salvage path: The diff preserves the complete core fix and regression coverage from #48092 and additionally updates several English documentation surfaces. This agrees with the maintainer-bot keep_open review, but the salvage path must address its concrete blockers: update plugins/memory/honcho/cli.py:830, optional-skills/autonomous-ai-agents/honcho/SKILL.md:93-110, and website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/user-guide/features/honcho.md:124,166, and correct the contradictory common-pattern guidance at website/docs/user-guide/features/honcho.md:214 to use ai.observeMe=false, ai.observeOthers=true.

Duplicates

#48092 and #48096 implement essentially the same production and test changes; #48096 is the active, broader version, while #48092 is the closed superseded duplicate.

Suggested consolidation

Keep #48096 open with a salvage path: retain its config, session-fallback, tests, and partial documentation changes, then reconcile the remaining user-facing surfaces identified by the maintainer-bot review before reassessment. Keep #48092 closed as a duplicate superseded by #48096.

Complex graph

flowchart LR
    classDef open fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
    classDef merged fill:#dcfce7,stroke:#15803d,color:#14532d
    classDef closed fill:#e5e7eb,stroke:#6b7280,color:#1f2937
    classDef unverified fill:#f3f4f6,stroke:#9ca3af,color:#374151
    classDef best stroke-width:3px,stroke:#b45309
    classDef target stroke-width:3px,stroke:#4338ca
    subgraph Dup48092 ["PRs duplicating each other"]
        P48092["PR #48092 (closed)"]
        P48096["PR #48096 (open)"]
    end
    class P48092 closed
    class P48096 open
    class P48096 target
    click P48092 "https://github.com/NousResearch/hermes-agent/pull/48092"
    click P48096 "https://github.com/NousResearch/hermes-agent/pull/48096"
Loading

Graph: solid arrow = fixes / best fix, dashed arrow = partial or unverified (see edge label); boxed group = PRs duplicating each other; amber border = best fix; indigo border = target; gray node = closed (state tag in the node label).

Cross-PR triage: Reviewed 2 pull requests and 0 issues in this complex. Each diff was read against this issue; Assessment working set: 19 kB of PR diffs, 3 kB of issue/PR text, 2 kB of discussion (3 comments), 0 verify verdicts. verdicts reflect diff content, not PR titles. Part of an automated triage batch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/memory Memory subsystem: store, providers, sync, background reviews comp/plugins Plugin system and bundled plugins P3 Low — cosmetic, nice to have sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state tool/memory Memory tool and memory providers type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants