Personal assistant

A decentralized agentic system

I built a system to help me manage my work and life. The idea is for it to keep track of things I need to do, remind me when I forget, and help me get things done. There are six specialized agents (email, calendar, tasks, notes, network, and code). Instead of having a central orchestrator (planner) who makes the calls, spawns and coordinates the agents, the system is decentralized. Each agent keeps track on their own domain, exercise judgment and signals their own coordination needs through a thin router protocol.

Built by Claude Code.

AUTHOR Daniel Halvarsson
DATE March 2026
AFFILIATION The Ratio Institute

Four layers

Telegram
To communicate with the System, I use Telegram. One bot, one conversation.
Router — Classifies and Facilitates
Reads incoming messages from Telegram for intent and dispatches to the right agent. Facilitates handshakes between agents but don't interprets their content.
Morning Prompt Evening Prompt
Agent Layer — Domain Ownership
Task Email Calendar Note Network Code
11 active coordination paths of 20 possible · Agents signal needs, the router facilitates
Governance & Infrastructure
To keep track of potentially dangerous actions committed by the agents, there is a governance layer that classifies agentic actions into three trust tiers. Dangerous actions (like sending emails) require my approval.
Auto-Allow Notify Require Approval

The navigator's OS

I don't work from schedules or to-do lists. I work the way I train at the gym: I know which domain I'm working in today, I start with whatever feels right, and each action creates the energy for the next. I've never had a fixed set of exercises before starting a session. Not once in my life.

The system is built for this. Every morning at 07:30, it asks:

Waking System · Morning Prompt

What kind of day is it?
🔧 Pipeline — building, coding, data
📡 Outward — emails, people, visibility
✍️ Writing — papers, grants, drafts
🔭 Explore — learning, reading, experimenting
📋 Admin — invoices, forms, obligations

I pick one. The task agent surfaces the queue for that day type. I start with whatever feels like the right first set. The system doesn't schedule my day — it shows me the equipment and lets me navigate.

This sounds unstructured. It is. It also works, for the same reason my gym approach works: deep internalized knowledge of a domain eliminates the need for a plan. The system's job is to make sure the right options are visible, not to choose between them.

The server never sleeps

The entire system runs on a server in my apartment — a Lenovo X1 Carbon running Ubuntu, always on, always connected. I interact with it through Telegram on my phone.

Daniel → Waking System

XBRL repo: try parent category fallback for missing tags.

The code agent resolves the repo, starts a Claude Code session on the server, and reports back when it's done. I read the result while cooking dinner.

Daniel → Waking System

homepage: fix this. [screenshot attached]

The system identifies the file, makes the edit, commits, and confirms.

When I want to know the state of my world, I message "brief me" and get an aggregated summary from all six agents: today's day type, my queue, monitoring alerts, calendar events, narration status, and any overnight session results. I read it while walking the kids to school.

The gap between "I should do this" and "it's done" collapses.

Technical summary

6
Autonomous Agents
Task · Email · Calendar · Note · Network · Code
11
Active Coordination Paths
Of 20 possible directed paths. Agent-initiated handshakes.
24/7
Server Uptime
Always-on Ubuntu server. Telegram mobile interface.
3
Governance Tiers
Auto-allow · Notify · Approve via Telegram
5
Monitoring Loops
Scanning domains every 30–60 minutes.
1
Telegram Bot
One interface for everything.

Stack

Agents
Python + Claude (Haiku for classification, Sonnet for reasoning)
Google Workspace
gws CLI — unified access to Gmail, Calendar, Tasks, Drive
Governance
FastAPI hook server with YAML-configured trust tiers
Interface
Telegram Bot API
Code Execution
Claude Code CLI, dispatched from Telegram
Storage
Obsidian vault (notes, narrations), Google Tasks (day-type queues)
Server
Lenovo X1 Carbon, Ubuntu, systemd services