Skip to content

feat(honcho): add honcho memory integration - #3954

Draft
taciturnaxolotl wants to merge 9 commits into
mainfrom
memory
Draft

taciturnaxolotl wants to merge 9 commits into
mainfrom
memory

Conversation

@taciturnaxolotl

Copy link
Copy Markdown
Member

Adds the honcho memory integration with full oauth support

Comment thread internal/honcho/identity.go Fixed
Comment thread internal/honcho/identity.go Fixed
Comment thread internal/honcho/identity.go Fixed
Comment thread internal/honcho/identity.go Fixed
@taciturnaxolotl
taciturnaxolotl force-pushed the memory branch 6 times, most recently from 160e9e1 to 11e0b7a Compare October 1, 2026 01:40
@taciturnaxolotl
taciturnaxolotl force-pushed the memory branch 4 times, most recently from 9ba7d18 to 043a791 Compare October 10, 2026 04:57
@porkloin

porkloin commented Oct 13, 2026 •

Copy link
Copy Markdown

@taciturnaxolotl I've been running this patch on a locally built crush with my self-hosted Honcho v3. One bug I encountered was Service.lookup() sending peer_perspective with an empty peer_target. The session context endpoint has no "self" default like the dialectic chat path does, so Honcho returns 422 (peer_target must be provided if peer_perspective is provided). The symptom is that memory recall silently never injects anything. The failure only shows up in the failure log, so nothing looks wrong from the UI.

I've been running a local patch on top of yours that sets PeerTarget to the user peer in the lookup, plus a case in the fake Honcho in service_test.go mirroring Honcho's validation so it stays fixed. Happy to PR it, if it's helpful! Thanks for putting this together, it's super useful.

@taciturnaxolotl
taciturnaxolotl force-pushed the memory branch 3 times, most recently from 2fd6cfb to 757e47c Compare October 14, 2026 03:03
@taciturnaxolotl

Copy link
Copy Markdown
Member Author

I'm so glad its been working well for you! I added your patch to the pr so let me know if that works for you

Comment thread internal/gitutil/branch.go Dismissed
Comment thread internal/gitutil/branch.go Dismissed
Comment thread internal/gitutil/branch.go Dismissed
@taciturnaxolotl
taciturnaxolotl force-pushed the memory branch 9 times, most recently from 3af5aeb to 9b11117 Compare October 20, 2026 12:00
BrunoKrugel added a commit to BrunoKrugel/crush that referenced this pull request Oct 22, 2026
BrunoKrugel added a commit to BrunoKrugel/crush that referenced this pull request Oct 22, 2026
@taciturnaxolotl
taciturnaxolotl force-pushed the memory branch 10 times, most recently from 9f73d12 to c595ed3 Compare November 1, 2026 03:09
@vshulcz

vshulcz commented Nov 1, 2026

Copy link
Copy Markdown

While wiring a local agent.Memory backend on top of this branch, I ran into two small issues in the prompt/skill wiring:

  1. prompt.WithFeatures(c.liveMemoryFeatures) is only evaluated when prompt.Build runs inside buildAgent at startup. When memory is connected or disconnected mid-session (UpdateModels -> updateAgentModels), SetMemory and SetTools run on the active agent, but SetSystemPrompt is never rebuilt (and the inactive agent in c.agents keeps its old Memory until a mode switch). Connecting mid-session attaches the Honcho tools while leaving honcho-memory out of the system prompt until restart, and disconnecting leaves honcho-memory advertised in the prompt after the tools are removed.
  2. agentTool (internal/agent/agent_tool.go:33) passes prompt.WithFeatures(c.liveMemoryFeatures) to taskPrompt, even though buildTools skips attaching honcho_* tools when isSubAgent is true (coordinator.go:1007), so the task sub-agent gets the honcho-memory skill in its prompt without the tools it documents.

Fix for both is in vshulcz@ac0fc11, and the read-only local deja backend (Snapshot via deja orient, Recall via deja recall, no-op Record* like readOnlyMemory) is on top of it at vshulcz@2a54d59 if useful.

@taciturnaxolotl
taciturnaxolotl force-pushed the memory branch 9 times, most recently from 18aa232 to 26e04e6 Compare November 7, 2026 22:22
Adds the configuration surface for Honcho memory in both the shell
config format and JSON: credentials, workspace, session strategy, and
the knobs that control how much is recalled.
Adds the API client, browser sign-in, credential storage, and the rules
that decide which workspace and conversation a project's memory belongs
to. Credentials are shared with other tools that talk to the same
service, so signing in once is enough.
Turns a tool call into a one-line note of what was done, skipping reads
and trivial commands that say nothing durable. Any argument that looks
like a credential causes the whole argument list to be dropped, so
tokens and passwords never leave the machine.
Adds the service that writes each turn to memory in the background and
reads context back. Writes never block a reply and are dropped rather
than queued without bound. Reads are split in two: a snapshot fixed for
the session, and fresh recall for the question at hand, kept apart so
that remembering does not spoil prompt caching.
Adds tools for looking up past messages, asking questions about the
user, saving a conclusion worth keeping, and checking whether memory is
working. A guide telling the assistant when to reach for them is hidden
unless memory is configured, so nobody pays for instructions about a
feature they have not turned on.
Wires memory into the conversation loop: past turns are recorded, a
stable summary rides in the system prompt, and anything relevant to the
current question is added at the end of the conversation where it will
not spoil caching. Sub-agents read memory but never write to it, since
their prompts are scaffolding rather than things anyone said.

Memory is reached through a lookup rather than a value fixed at
startup, so connecting or disconnecting takes effect immediately
instead of at the next launch.

scratch: inspect conflicts

wip: resolve gating conflicts

resolve

r2
Adds `crush login honcho` and `crush logout honcho`. Signing out
leaves stored memory alone, so signing back in finds it all still
there.

scratch: resolve cli

tmp-resolve-yk
Adds sign-in and sign-out entries to the palette. Both take effect on
the spot: the assistant picks up memory, or stops using it, without
anyone having to restart.

scratch: resolve ui

tmp
Covers what is sent, what is kept on the machine, how to self-host, and
what to check when memory seems not to be working.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants