Skip to content

Honcho PR map: open integration work across community #3276

@erosika

Description

@erosika

Honcho integration: open PR map

Tracks all open Honcho-related PRs, their dependencies, and merge path. Successor to #2210.

Last updated: 2026-03-30


Status overview

All erosika PRs are rebased on main, CI green, and mergeable.

# PR Author CI Mergeable Status
1 #2645 -- local baseUrl-only config @erosika green yes Review bugs fixed, ready
2 #1957 -- lazy session init in tools mode @erosika green yes Migration bug fixed, ready
3 #3265 -- contextTokens budget enforcement @erosika green yes Approved, minor suggestions
4 #1969 -- aiPeer sync from SOUL.md @erosika green yes Ready, not yet reviewed
5 #3425 -- prefetch cadence, injection toggles, reasoning cap @erosika green yes Approved with notes
6 #3999 -- profile-scoped Honcho + observability @erosika green yes Rebased on #4037, ready
7 #4037 -- instance-local config write path @teknium1 green yes Bug fix, merge first
8 #2757 -- graceful degradation + disable cmd @teyrebaz33 stale unknown Needs rebase after #2645
9 #2164 -- tools-mode startup context @teyrebaz33 stale unknown Needs consolidation with #1957

To close after merge

PR Reason
#2619 (@ygd58) Superseded by #2645 -- close when #2645 lands
#2845 (@erosika) Honcho layer superseded by #3999 -- close when #3999 lands
#4037 (@teknium1) Included in #3999 rebase -- close if #3999 merges first, or #3999 rebases after #4037

Dependency graph

#4037 (config write isolation) -- bug fix, merge first
  └── #3999 (profile scoping + observability) -- rebased on top

#3999 (profile scoping)
  ├── complements #3681 (profiles)
  ├── supersedes #2845 Honcho layer
  └── includes #4037 fix via rebase

#2645 (baseUrl)
  ├── #2757 builds on this (bad URL handling)
  └── #2619 superseded (close after merge)

#1957 (lazy init)
  └── #2164 overlaps (consolidate)

#3265 (token budget) -- independent
#1969 (aiPeer sync) -- independent
#3425 (cost awareness) -- independent, needs rebase after #3999

What each PR does

1. #2645 -- local baseUrl-only configuration

Lets self-hosted users configure Honcho with only a base_url (no API key required). Resolves base_url aliases from both host and root config. Fixes the setup and identity CLI flows for local instances.

2. #1957 -- lazy session init in tools mode

Defers Honcho session creation in tools mode until the first tool call actually needs it (avoids unnecessary API round-trips on startup). Session is created lazily via ensure_session() with migration check on first creation.

3. #3265 -- contextTokens budget enforcement

Truncates prefetched Honcho context (peer representation + peer card) to fit within the configured contextTokens budget. Uses conservative char estimate (budget * 4). Prevents oversized payloads from blowing past the context window. Refresh of #1878 (credit @AzothZephyr).

4. #1969 -- aiPeer sync from SOUL.md

Syncs the aiPeer config field with the identity defined in SOUL.md at runtime, so the Honcho integration always reflects the current agent identity. Mutates shared config -- fine for CLI, but gateway/multi-agent would need a config copy (noted, not blocking).

5. #3425 -- cost-awareness controls

Adds configurable prefetch cadence (context + dialectic), per-component injection toggles, injection frequency (how many turns cached context stays in prompt), and reasoning level cap. Defaults: first-turn-only API calls, AI peer data suppressed, reasoning pinned at floor. Full CLI coverage via hermes honcho status and hermes honcho tokens. Closes #3422.

6. #3999 -- profile-scoped Honcho host/peer resolution + observability

Full Honcho identity layer for the multi-profile system (#3681). Each profile becomes an independent Honcho peer in a shared workspace.

7. #4037 -- instance-local config write path

Fixes bug where multiple profiles overwrite each other's config. Writes go to $HERMES_HOME/honcho.json (instance-local), reads fall back to ~/.honcho/config.json (global).

8. #2757 -- graceful degradation + disable command

Handles bad/unreachable Honcho URLs gracefully instead of crashing. Adds a disable command. Needs a complementary enable command added. Depends on #2645 landing first.

9. #2164 -- tools-mode startup context

Optional lightweight cached startup context for recallMode=tools. Overlaps with #1957 (both touch _activate_honcho / session init). Consolidation plan: #1957 defers session creation, #2164 adds opt-in snapshot fetch on top. Must compose cleanly with #1957's lazy init path.


Merge order recommendation

  1. fix(honcho): write config to instance-local path for profile isolation #4037 -- bug fix, unblocks feat(honcho): scope host and peer resolution to active Hermes profile #3999
  2. feat(honcho): scope host and peer resolution to active Hermes profile #3999 -- rebase on main after fix(honcho): write config to instance-local path for profile isolation #4037, profile scoping + observability
  3. fix(honcho): support local baseUrl-only configuration #2645 -- baseUrl fix, unblocks fix(honcho): graceful degradation for bad URL and add disable command #2757
  4. fix(honcho): lazy session init in tools mode #1957 -- lazy init
  5. fix(honcho): enforce contextTokens budget on prefetched Honcho context #3265 -- token budget
  6. fix(honcho): sync aiPeer with SOUL.md identity at runtime #1969 -- aiPeer sync
  7. feat(honcho): configurable prefetch cadence, injection toggles, and reasoning cap #3425 -- cost awareness (rebase after feat(honcho): scope host and peer resolution to active Hermes profile #3999)

Review findings (2026-03-29)

#2645 -- 4 bugs found and fixed

  • cmd_migrate crashed with KeyError: 'apiKey' on base-URL-only configs -- fixed to use _resolve_api_key(cfg) with fallback display
  • cmd_migrate re-check after setup ignored base URL -- fixed to use _has_honcho_credentials(cfg)
  • test_false_without_key_or_base_url leaked env vars -- fixed with monkeypatch.delenv
  • cmd_setup didn't clean up baseURL alias -- added pop("baseURL", None)
  • Minor: duplicated _resolve_base_url between cli.py and client.py (divergent signatures). Not blocking but maintenance risk

#1957 -- 1 bug found and fixed

  • ensure_session() was a plain alias for get_or_create() -- migration path (migrate_memory_files) was dead code in recallMode=tools. Fixed: added _migrated set to session manager, ensure_session() now runs migration check on first creation per session key
  • Title updated (removed "per-directory default" claim -- that was already on main)

#3265 -- approved with minor suggestions

  • Hard char cut could snap to word boundary with rfind(' ') (minor)
  • Missing test for config-priority path (only tests manager fallback)
  • No blockers

#3425 -- approved with notes

  • Dialectic synthesis is never injected under injectionFrequency: "first-turn" because dialectic isn't pre-warmed at startup. injectDialectic: true + injectionFrequency: "first-turn" = dialectic never appears. Should be documented
  • Falsy integer 0 in or-chains collapses incorrectly for cadence/frequency values
  • injectionFrequency default should stay "every-turn" (cost savings are already in cadence; "first-turn" makes dialectic permanently unavailable)

#3999 -- self-reviewed, 6 findings fixed

  • Duplicate cmd_sync definition removed
  • from_env workspace fixed to stay shared
  • _show_peer_cards documented as idempotent
  • Unused import removed
  • Test assertions fixed for shared workspace
  • 3 sync tests added

#2757 -- needs work


Resolved questions

Question Resolution
#2757: toggle vs two commands? Two commands. enable/disable are idempotent and scriptable. Now in #3999
#2164 + #1957: consolidation? Merge #1957 first (lazy init is a strict win). #2164's snapshot fetch uses peer_id not session key, so it doesn't conflict. Migration gap in #1957 is now fixed
#1969: gateway config-copy? CLI-only is fine for now. Follow-on for #3999 (profile scoping)
#3265: CI failure? Not real. Main pins acp<0.9 (commit 03396627). CI is green. #3111 only needed if upgrading past acp 0.9.0
#3425: injectionFrequency default? Keep "every-turn". Real cost savings are in cadence (first-turn-only API calls). "first-turn" injection makes dialectic permanently unavailable
Profile config isolation? #4037 fixes write path. #3999 adds host/peer scoping on top. Shared workspace by default, per-profile AI peers

Open questions (remaining)


Related (non-Honcho)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havecomp/pluginsPlugin system and bundled pluginstype/featureNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions