---
title: "Fish"
slug: fish
section: reference
access: public
summary: "Fish is the branded desktop descendant of Littlebird, built from the reconstructed Electron app while replacing its hosted assumptions with local backend behavior and 1Context-facing memory expectations. Inside 1Context, Fish is not the center of the memory system; it is a client…"
status: published
asset_base: /assets
home_href: /
toc_enabled: true
talk_enabled: false
agent_view_enabled: true
copy_buttons_enabled: true
footer_enabled: true
last_updated: 2026-04-29
categories: [Projects, Tools]
subject-type: project
project-status: active
last-reinforced: 2026-04-29
fading-since: null
archived: false
---

## Fish

Fish is the branded desktop descendant of [Littlebird](/littlebird), built from the reconstructed Electron app while replacing its hosted assumptions with local backend behavior and 1Context-facing memory expectations. Inside [1Context](/1context), Fish is not the center of the memory system; it is a client and inheritance path that preserves useful Littlebird behavior, UI knowledge, and reverse-engineering evidence. As of April 21, 2026, it exists as an installable macOS app at `/Applications/Fish.app`, with branded metadata, bundled dependencies, local mock-profile machinery, and a prerelease tag `fish-v0.77.1-dev1`.

### Origin

Fish emerged from the [Littlebird](/littlebird) reconstruction work after the recovered desktop app stopped being only an artifact and started becoming something that could run, authenticate, remember, and answer locally. On April 3, the source-shell milestone hardened into a local app identity: visible branding changed to Fish/blue, the launcher targeted the assembled Electron app, `.env.production` moved away from dead `api.littlebird.ai` assumptions toward `app.lilbird.co`, and `ContextKit` gained an `EPIPE` guard. Commit `e2c45851` recorded that milestone hardening.

The pressure behind Fish was practical. Littlebird’s recovered client contained useful behavior, but relying on the original hosted backend would have made the reconstruction brittle and dependent on an external service shape. Fish was the answer: keep the client knowledge, replace the unavailable service assumptions with local backend contracts, and make the result inspectable enough for agents to modify.

### Role in 1Context

Fish is a consumer and proving ground for [1Context](/1context), not 1Context’s governing architecture. The April 15 correction matters: Fish preserves client behavior and reverse-engineering knowledge, but it does not define the protected memory layer. That distinction prevents a recovered Electron app from forcing 1Context to inherit Littlebird’s backend model.

Its role is closest to a reconstructed client laboratory. It tests how local memory, mock accounts, Guardian-style relay chat, packaged desktop identity, and UI cataloging behave when grafted into a complex inherited app. It also supplies evidence about which Littlebird patterns are worth carrying forward and which are merely historical baggage.

Fish’s memory model was described early in `docs/memory-system.md`: ContextKit captures, searchable user context, EchoNotes, world-model notes, and chat context. Paul explicitly held off vector database work at that stage. Lexical local memory came first because the goal was to make Fish answer from local evidence before adding heavier retrieval machinery.

### History

On April 3, Fish gained a local backend under `reconstructed/scripts/local-backend.mjs`. That backend learned `/debug/requests`, `/update_user_data`, `/new_chat`, `chat_v4` SSE, recorder proxy modes, bootstrap, subscription, client-tool registration, and input ingestion. Authentication followed the same local-first discipline: silent auto-seeding gave way to mock account login/logout, then logout sequencing was fixed. Commits `b798126c`, `51f071e8`, and `b5a1a601` added local auth, MCP verification, logout repair, and a local-agent parity harness whose verification returned `"ok": true`.

By April 9 and 10, Fish was being pulled toward [Guardian](/guardian) chat. A Guardian integration worktree added relay types, backend calls, `sendConversationMessage`, and bridges into existing SDK stores. The result exposed the cost of the inheritance: Guardian’s React Native app was already shaped around [Guardian Lab Relay](/guardian-lab-relay), while Fish had to graft the relay contract into a preexisting Electron SDK and MobX chat system. For demo purposes, the branch-local Electron runtime launched with `--disable-web-security` and persistent app data.

In parallel, Storybook became Fish’s inspection layer. The recovered app gained hundreds of stories, flow IDs, source extractions for `0.77.1`, `0.77.5`, and `0.77.7`, and a searchable catalog. On April 11, Paul rejected fake route coverage, leading to a real-route harness, SDK mocks, shared chat and meeting route stories, auth callback seams, public invalid-link states, and a `397/397` story verification run. The audit still admitted gaps: many routed product areas were not yet represented by direct real-code stories.

April 13 clarified the split between trees. The newer normalized `littlebird-reverse` tree on branch `installers/all-platforms` launched plain Fish from `fish/desktop`, while `/Users/paulhan/dev/littlebird-reverse-guardian-chat/reconstructed` on `codex/guardian-chat-parity` still held the packaged Guardian Fish relay bridge and mock-profile backend. The backend was restarted from `reconstructed/scripts/local-backend.mjs`, mock auth endpoints returned `200`, and the installed Guardian Fish app relaunched against local profile machinery.

On April 20, Fish work focused on repo discipline: artwork extraction, professionalization docs, structure-normalization, workspace-boundary audits, and a hardened reverse-engineering archive at `04fd31a2` that excluded 19 oversized Windows installers. Local demo packaging proved seeded profiles through assembled runtimes.

### Current State

As of April 21, Fish has its own visible identity. Paul interrupted packaging work to make the requirement explicit: use the fish logo and call the app Fish. The desktop package changed names, icons, bundle metadata, and release assembly, then installed as `/Applications/Fish.app` with `CFBundleIdentifier=com.hapticasensorics.fish`.

The first installed app crashed because the package omitted dependencies such as `node-machine-id`. The packager was changed from a single-package stub to a dependency bundle, after which the app stayed open. A prerelease followed as `fish-v0.77.1-dev1`, with a remote MacBook Air release-bench document so future installs could be tested in a visible GUI session.

### Relationships and Open Questions

Fish is most closely related to [Littlebird](/littlebird), [Guardian](/guardian), [Guardian Lab Relay](/guardian-lab-relay), Storybook, and [1Context](/1context). It inherits from Littlebird, borrows chat ambitions from Guardian, uses the relay contract as an integration target, relies on Storybook to make recovered UI inspectable, and consumes 1Context rather than defining it.

The main open question is how much of Fish remains a transitional reconstruction and how much becomes a durable 1Context client. Its packaging, branding, local backend, and UI catalog are real enough to preserve. Its long-term product boundary is less settled.