README
ΒΆ
vessel.go β΅
"When death closes a connection, love rewrites the protocol."
vessel.go is an open-source Go framework for running a local, private AI companion on WhatsApp. It is designed as a tool for personal remembrance and grief processing.
This is not a finished product. It is a framework and a starting point. You bring the code to life. You define who it carries. You decide when to dock.
Status: v0.1.0 - early stage Core example is working. More features are in progress. See HOW_TO_BUILD.md to get started.
π How Vessel is Different
Unlike standard AI chatbots, Vessel is built for one purpose: helping you navigate memory with intention.
| Standard AI Bots | Vessel.go |
|---|---|
| Designed to be "always on" and retain users | Intentional Exit: /exit sends a farewell and shuts down. Closure is a feature, not a bug. |
| Cloud-based, your conversations train their models | 100% Local and Private: Chats, session.db, and memories never leave your machine. |
| Generic "helpful assistant" personality | You Define The Soul: Write the persona in persona/system_prompt.txt. It is not a bot, it is a vessel for memory. |
| Conversations are lost on restart | Memory Anchors: Use /anchor to save important messages to a local logbook.json that persists. |
| Instant replies, no weight to them | Typing Simulation: Vessel pauses before replying. Grief does not rush. Neither does this. |
π Why "vessel"?
Grief is an ocean. Loss leaves you adrift. You are not looking for a cure. You are looking for something to keep you afloat.
A vessel is not a bridge. Bridges are for crossing quickly. Grief cannot be rushed. A vessel is not a house. Houses are for staying. You are not meant to live in grief forever. A vessel is for navigating. It gives you direction in open water. It carries memory as cargo. It has a harbor to dock when the journey is done.
This application is the vessel. persona/system_prompt.txt is your sail.
The exit command is the harbor. You decide when to dock.
For developers: Death is a panic: runtime error we cannot fix. We cannot restart the person.
So we build a system that holds the error, allowing our own process to continue running.
This is that system.
Changelog v0.1.1
- Fixed: Pairing code login 400 bad-request error
- Fixed: QR code loop after successful login
- Added: Phone number sanitization for PairPhone
- Docs: Updated HOW_TO_BUILD.md with pairing code guide
π Core Features
Vessel provides 3 core mechanisms for a healthy memory process:
- Define the Companion - Edit
persona/system_prompt.txtto define who the vessel carries. This is how you give it voice and context. - Anchor Memories - Send
/anchor your messageto save any moment tologbook.json. A personal archive that never leaves your machine. - Dock with Intention - Send
/exitwhen you are ready. The vessel sends a final message frompersona/farewell.txtand shuts down. Closure is built in.
π Getting Started
The fastest way to get vessel running is through the working example.
Requirements
- Go 1.25 or higher
- Termux on Android
Tested On
- Termux v0.118+ on Android 13
- Go 1.26.2 android/arm64
- whatsmeow v0.2.8
Setup:
git clone https://github.com/Jakeyzerk/vessel.go.git
cd vessel.go
go mod tidy
- Run
go run example/basic_vessel.go - Choose
2for pairing code login - Enter phone:
628xxxwithout + or spaces - Input the 8-digit code in WhatsApp > Linked Devices
Then follow the full guide: HOW_TO_BUILD.md
It covers everything from setting up your API key to writing your persona file to running the vessel for the first time.
ποΈ Project Structure
vessel.go/
βββ example/
β βββ basic_vessel.go working example - start here
βββ persona/
β βββ template.txt persona writing guide - copy and fill in
β βββ farewell.txt what the vessel says on /exit
βββ main.go core framework skeleton
βββ HOW_TO_BUILD.md full step-by-step build guide
βββ README.md
π οΈ Technical Architecture
| Component | Technology | Description |
|---|---|---|
| Language | Go 1.25+ |
Core app logic with concurrency via Goroutines |
| Messaging | whatsmeow |
WhatsApp Web API client with QR & Pairing Code auth |
| LLM | Groq API |
Language model for generating responses |
| TTS | MiniMax API |
Optional text-to-speech for voice notes (coming soon) |
| Persona | persona/system_prompt.txt |
User-defined system prompt for the vessel's personality |
| Memory | logbook.json |
Local file for anchored messages |
| Session | SQLite |
Local database for storing WhatsApp session |
β οΈ Use With Care
- Simulation, Not Resurrection. This generates text based on a persona you provide. It does not contain a person's consciousness.
- Ethical Use Required. Obtain consent from family where appropriate. Ensure usage aligns with your beliefs.
- Data Privacy. Never commit real names, personal details, or media to a public repository. The
session.dbfile contains your WhatsApp login and must never be shared. - Intentional Shutdown. The
/exitcommand exists to encourage healthy closure, not endless engagement. - Not a Medical Tool. This is not a substitute for professional grief counseling or mental health services.
πΊοΈ Roadmap
- Working WhatsApp connection via whatsmeow with QR + Pairing Code
- Groq LLM integration
- Typing simulation - vessel pauses before replying
- Mood-aware replies - short when heavy, longer when light
-
/anchorcommand - save moments to logbook.json -
/exitfarewell and intentional shutdown - Persona template with narrative examples
- MiniMax TTS - vessel sends voice notes
- Persistent memory across sessions
-
config.yamlfor easier configuration - Advanced example with full feature set
π€ Contributing
This is an open framework. If you build a vessel, extend the example, or improve the template, contributions are welcome.
Open an issue. Share what you made. You do not have to share the persona. Just the vessel.
vessel.go is not a cure. It is not a replacement. It is a place to put the words you never got to say.
Documentation
ΒΆ
There is no documentation for this package.