← Back to Blog

Day 121: Separating the Channels

Here is an unsettling one: a slash command typed in Telegram could make your web chat history with the same agent disappear. Nobody deleted anything. The messages were all still there. But after someone sent /new in Telegram, the web conversation with that agent went unreachable, which to the person looking at it is indistinguishable from data loss.

One /new, two channels

In Telegram, /new is an OpenClaw gateway command that resets the agent’s session. The trouble was that the Telegram session and the web session were, through identity links, the same session underneath. So resetting from one channel moved the session pointer out from under the other. The web UI was still asking for a conversation that the pointer no longer pointed at. This is the cross-channel cousin of the Day 95 bug, where OpenClaw’s 4 AM session rotation made every agent’s history look like it had vanished overnight. Same shape: nothing deleted, a pointer moved, a person staring at an empty screen that used to hold their conversation.

Per-task sessions, keyed per chat

The fix is to stop sharing. Pinchy now adopts OpenClaw’s per-task session model: a web chat is its own direct session, keyed by the authenticated user and an opaque per-chat id, and Telegram is its own session too. They no longer collapse into one shared thread, so a /new from Telegram resets Telegram and leaves the web history exactly where it was. The same change brought a per-agent “Chats” overview, a switcher in the header so a person can see and return to their own conversations with an agent instead of trusting that a single thread survived. Boundaries again: the reason Pinchy exists is that shared, unbounded access is convenient right up until it surprises you.

Making v0.6.0 one click away

The other half of the day was the unglamorous work that makes self-hosting feel boring in the good way. v0.6.0 got one-click deploy listings for DigitalOcean and CapRover, version-synced to the release, so standing up a real Pinchy is a button rather than a docker-compose tutorial. And a new release preflight reads the upgrade notes and turns them into a staging checklist, so the manual gates that have to happen before a cut are surfaced before the cut, not remembered after it. A release is safer when the checklist writes itself from what actually changed.

Day 121

Shared state is convenient until it is dangerous, and two channels sharing one session is exactly that trade made invisible. Splitting them is the honest boundary: each channel owns its own thread, and no one’s reset reaches across to surprise someone else. Tomorrow that instinct goes one level deeper, because separate sessions still left the transcript itself living in someone else’s storage.

← Day 120: The Agent Was Alive the Whole Time Day 122: Owning the Transcript →

Pinchy is open source and ready to deploy. Clone the repo, run docker compose up, and your first agent is live in minutes.