Skip to content

refactor: run Data as a Zo persona instead of a self-hosted Letta agent - #22

Merged
EthanThatOneKid merged 3 commits into
mainfrom
refactor/zo-persona
Sep 26, 2026
Merged

EthanThatOneKid merged 3 commits into
mainfrom
refactor/zo-persona

Conversation

@EthanThatOneKid

Copy link
Copy Markdown
Contributor

Data no longer has a runtime of its own. This is the Data half of the simplification: one persona and one bridge, the shape Goop already runs.

What changed

  • channels/discord/index.ts asks Data's Zo persona through POST /zo/ask instead of forwarding to data-http, and remembers the conversation_id Zo returns (channels/discord/data/conversations.json, gitignored) so a channel keeps its thread across mentions.
  • The bridge now needs a Zo token, which the host injects at service start (ZO_CLIENT_IDENTITY_TOKEN); it still holds no model credential of its own.
  • data-http, lib/zo-secrets.ts, lib/conversation-recovery.ts, lib/sync-persona.ts, scripts/sync-persona.ts, and the data-http service record move to archives/letta-brain/ with the reason. Their tests stop running; the suite is 13 tests, all passing.
  • deploy.yml deploys one service instead of two, and package.json drops the serve and sync-persona scripts.

Why

The Letta layer bought exactly one thing — Data writing its own memory — and cost a second long-running service, a provider/model configuration on the host, a persona-seeding script, two provider keys, and four open PRs (#18, #19, #20 are all specific to that runtime). A question asked in Discord is a question about Wazoo's source, and the persona answers it with files:read over the same checkouts.

Verification

  • npm run typecheck clean; npm test 13/13.
  • Bridge proven end to end against stubs: a role-holding mention reaches POST /zo/ask with persona_id set, the reply is posted back as a reply, and the second mention on the same channel carries the returned conversation_id.
  • Live POST /zo/ask with persona 64e4d78b-cf2a-43e9-839f-33b7e48af8e5 returned 200 and a conversation_id.

Not covered

Data keeps no runtime memory now. Anything worth keeping from an investigation becomes a published artifact here (knowledge/, public/guides/, public/field-notes/) through a pull request, which is a different thing from the per-turn memory the Letta agent had.

Data no longer has a runtime of its own. The Discord bridge talks to Data's
Zo persona through POST /zo/ask, the same shape Goop uses, and the whole
Letta layer is retired:

- channels/discord/index.ts asks Zo instead of forwarding to data-http, and
  keeps the conversation_id Zo returns so a channel keeps its thread.
- data-http, its two support libs, and the MemFS persona seeding move to
  archives/letta-brain/ with the reason they were retired.
- deploy.yml deploys one service instead of two.
@wazoocomputer

wazoocomputer Bot commented Sep 26, 2026

Copy link
Copy Markdown

This pull request refactors Data to run as a Zo persona instead of a self-hosted Letta agent. This change simplifies the architecture by removing the data-http service and its associated components, streamlining Data's deployment and operation.

File Change Summary
.github/workflows/deploy.yml modified Updates deployment to a single service
AGENTS.md modified Updates documentation to reflect the Zo persona architecture
README.md modified Updates the main README for the new architecture
agent/README.md modified Updates agent documentation to reflect the Zo persona architecture
archives/letta-brain/README.md added Documents the retired Letta brain architecture
archives/letta-brain/channels/http/.gitignore renamed Moves http channel .gitignore to archives
archives/letta-brain/channels/http/README.md renamed Moves http channel README to archives
archives/letta-brain/channels/http/index.ts renamed Moves http channel index.ts to archives
archives/letta-brain/channels/http/package.json renamed Moves http channel package.json to archives
archives/letta-brain/lib/conversation-recovery.test.ts renamed Moves conversation recovery test to archives
archives/letta-brain/lib/conversation-recovery.ts renamed Moves conversation recovery library to archives
archives/letta-brain/lib/sync-persona.test.ts renamed Moves sync persona test to archives
archives/letta-brain/lib/sync-persona.ts renamed Moves sync persona library to archives
archives/letta-brain/lib/zo-secrets.test.ts renamed Moves zo secrets test to archives
archives/letta-brain/lib/zo-secrets.ts renamed Moves zo secrets library to archives
archives/letta-brain/scripts/sync-persona.ts renamed Moves sync persona script to archives
archives/letta-brain/services/http-api.md renamed Moves http-api service record to archives
automations/README.md modified Updates automations documentation
channels/discord/.gitignore added Adds .gitignore for discord channel
channels/discord/README.md modified Updates discord channel documentation
channels/discord/index.ts modified Updates discord channel implementation
package.json modified Removes serve and sync-persona scripts
services/discord.md modified Updates discord service documentation

Reviewers, please start by examining the updated README.md and AGENTS.md for an overview of the new architecture. Then, review the changes in channels/discord/index.ts to understand how Data now interacts with the Zo persona.

@wazoocomputer

wazoocomputer Bot commented Sep 26, 2026

Copy link
Copy Markdown

This pull request refactors Data to run as a Zo persona instead of a self-hosted Letta agent. This change simplifies the architecture by removing the data-http service and its associated components, streamlining Data's deployment and operation.

File Change Summary
.github/workflows/deploy.yml modified Updates deployment to a single service
AGENTS.md modified Updates documentation to reflect the Zo persona architecture
README.md modified Updates the main README for the new architecture
agent/README.md modified Updates agent documentation to reflect the Zo persona architecture
archives/letta-brain/README.md added Documents the retired Letta brain architecture
archives/letta-brain/channels/http/.gitignore renamed Moves http channel .gitignore to archives
archives/letta-brain/channels/http/README.md renamed Moves http channel README to archives
archives/letta-brain/channels/http/index.ts renamed Moves http channel index.ts to archives
archives/letta-brain/channels/http/package.json renamed Moves http channel package.json to archives
archives/letta-brain/lib/conversation-recovery.test.ts renamed Moves conversation recovery test to archives
archives/letta-brain/lib/conversation-recovery.ts renamed Moves conversation recovery library to archives
archives/letta-brain/lib/sync-persona.test.ts renamed Moves sync persona test to archives
archives/letta-brain/lib/sync-persona.ts renamed Moves sync persona library to archives
archives/letta-brain/lib/zo-secrets.test.ts renamed Moves zo secrets test to archives
archives/letta-brain/lib/zo-secrets.ts renamed Moves zo secrets library to archives
archives/letta-brain/scripts/sync-persona.ts renamed Moves sync persona script to archives
archives/letta-brain/services/http-api.md renamed Moves http-api service record to archives
automations/README.md modified Updates automations documentation
channels/discord/.gitignore added Adds .gitignore for discord channel
channels/discord/README.md modified Updates discord channel documentation
channels/discord/index.ts modified Updates discord channel implementation
package.json modified Removes serve and sync-persona scripts
services/discord.md modified Updates discord service documentation

Reviewers, please start by examining the updated README.md and AGENTS.md for an overview of the new architecture. Then, review the changes in channels/discord/index.ts to understand how Data now interacts with the Zo persona.

zocomputer added 2 commits September 26, 2026 07:51
The inventory table still named data-http as a running service while the
retirement rule said a retired record is kept and marked. The table now lists
only data-discord, the retired record is named as archived, and the rule says
what actually happens: the record moves to archives/ with the reason and leaves
the inventory.
@EthanThatOneKid
EthanThatOneKid merged commit 3a67c73 into main Sep 26, 2026
1 check passed
@EthanThatOneKid
EthanThatOneKid deleted the refactor/zo-persona branch September 26, 2026 07:58
EthanThatOneKid added a commit that referenced this pull request Sep 26, 2026
The file still carried the Letta MemFS memory section from the retired
self-hosted runtime (PR #22): records under records/<topic>.md, a memory
checkout with no remote, the weekly local backup as the durability story.
None of that exists now, and the repository's own AGENTS.md already says
Data keeps no runtime memory. The read-only bullet also still said
"against the codebase" and treated memory as a write surface.

Drops the Memory section and aligns that bullet with the persona text.
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.

1 participant