Day 7: Agents Are People Too
16 commits. A product philosophy, a lobster in a bowtie, and the rewrite I didn't plan.
← Day 6: The Personality Layer
The question that started everything today
What does Pinchy feel like?
Not what it does. Not what features it has. What's the emotional experience of using it?
Most self-hosted tools feel... utilitarian. Functional. Cold. You deploy them, configure them, use them. They work. You don't enjoy them.
I want Pinchy to be different. And today I spent a lot of time thinking about what that actually means in practice.
Security + Ease: the core tension
Here's the thing about enterprise security tools: they're usually intimidating. Complex UIs, walls of configuration, stern warning messages. The implicit message is: "This is serious business. Don't mess it up."
Pinchy's bet is that security and ease aren't opposites. You can have enterprise-grade encryption, audit trails, and role-based access — and it can still feel light. Like a seatbelt: always there, never in the way.
I wrote this down today as a PERSONALITY.md — a voice and tone guide that lives in the repo root, right next to CONTRIBUTING.md and CODE_OF_CONDUCT.md. Because how the product sounds matters as much as how it works.
Four pillars:
- Secure, not stern. We protect users. We don't lecture them.
- Simple, not simplistic. Smart defaults everywhere. Full control when you need it.
- Warm, not silly. Subtle humor welcome. Clown energy not.
- Powerful, not overwhelming. The depth is there. You discover it gradually.
Every contributor who writes a tooltip, an error message, or an empty state now has a reference for how it should sound. "Would a stressed CTO at 11pm understand this immediately?" is the first question in our Pinchy Test.
Smithers gets a face
Pinchy's default agent is Smithers — competent, polite, slightly formal. Named after the Simpsons character (Pinchy is a Simpsons reference, after all). Until today, Smithers was just a name and a greeting message.
Now he has a face. A lobster in round glasses and a bowtie, in the same flat cartoon style as the Pinchy logo. Because if we're serious about agents being personalities, they need to look like someone too.
This led to a bigger design decision: the avatar system. Every agent in Pinchy will get a generated avatar using DiceBear's Bottts Neutral style — robot-themed avatars that are unique per agent name, with customizable background colors. A dice button lets you re-roll until you find one you like. The seed is local state until you save.
Smithers is the exception. He's the only agent with a hand-drawn avatar. The product mascot's butler. Everyone else gets a generated face — but it's still their face.
Personality presets: the RPG class picker for agents
The biggest design work today was the personality preset system. Here's the problem it solves: when you create an agent, you shouldn't have to write a personality prompt from scratch. Most people won't. They'll leave the default and end up with a generic chatbot.
The solution: personality presets. Like character classes in an RPG.
- The Butler (Smithers) — competent, polite, dry humor
- Professional Assistant — clear, efficient, business-focused
- Friendly Helper — warm, encouraging, conversational
- Technical Expert — precise, detail-oriented, code-aware
- Blank — for people who want full control
Each preset comes with a suggested name, a SOUL.md, a greeting message, and a default avatar. Pick one and you have a fully-formed agent in seconds. Change anything you want later.
This is separate from agent templates (Knowledge Base, Custom, etc.) which define what an agent can do. Templates are tools. Presets are character. You can combine any template with any personality. A Knowledge Base agent with a friendly personality. A Custom agent with a formal one. Mix and match.
The full spec is in the repo — ready for implementation.
The rewrite I didn't plan
While all the personality and philosophy work was happening on the marketing side, the codebase got a significant architectural change: the session management rewrite.
The old approach: Pinchy kept a chatSessions table in PostgreSQL to track which OpenClaw sessions existed. Every time you opened a chat, it would check this table, create a session if needed, and sync state between two databases.
The problem: race conditions. OpenClaw creates sessions on first message. Pinchy tried to pre-create them. Two systems disagreeing about what exists leads to edge cases that are annoying to debug and impossible to fully prevent.
The new approach: trust OpenClaw. Drop the chatSessions table entirely. Introduce a SessionCache — an in-memory set that tracks which sessions are known to exist, populated lazily from OpenClaw's sessions.list API. No more dual state. No more sync bugs.
The ThreadWelcome component also learned to distinguish between "loading" (agent is starting up) and "ready" (waiting for your first message). Sounds trivial. Matters a lot for perceived performance — those rotating lobster messages ("Sharpening the claws...", "Polishing the shell...") now only show when something is actually loading.
16 commits. 58 files changed. 3,041 lines added, 918 removed.
What's next
The personality system is designed. The spec is written. Tomorrow: implementation. Agents that aren't just tools — but colleagues with names, faces, and character.
Because nobody says "ask the HR bot." People say "ask Sandra."
That's the product we're building.
Day 8: Give Your Agent a Face →
Follow the build: github.com/heypinchy/pinchy