A minimal personal AI assistant that runs on Signal. Inspired by Occam's razor, read more in the blog post
Message yourself on Signal and get AI-powered responses. The bot can:
- Manage your Google Calendar — list, create, and update events
- Maintain conversation threads — reply to a bot message to continue the conversation
- Search the web via DuckDuckGo
See SETUP.md for installation and configuration.
occam.py # main entry point, message handler, tool executor
llm.py # Claude via Bedrock (invoke_model), tool-use loop
store.py # JSONL conversation persistence + thread mapping
channels/
signal.py # signal-cli-rest-api websocket + HTTP
cli.py # stdin/stdout for local testing
tools/
general.py # web search (DuckDuckGo), current datetime
calendar.py # Google Calendar list/create/update
Edit llm.py. The LLM class exposes one method: complete(messages, tool_executor) -> str.
- Should run on your Tailscale network
signal-apibinds to127.0.0.1only- Only responds to your own messages to yourself
- Credentials and thread data stored in
data/ - You can read all the code yourself