tools.register({
name: "schedule_task",
description: "Schedule a reminder or action",
input_schema: {
type: "object",
properties: {
type: { enum: ["remind", "action"] },
next_run: { type: "string", format: "date-time" },
cron: { type: "string", description: "5-field cron" },
instruction: { type: "string" },
},
required: ["type", "instruction"],
},
handler: scheduler.add,
}); Personal Agent A cross-device AI command center that actually runs my day.
Most "AI assistants" are demos. This one I use every day from my phone, my tablet, and my laptop — it owns my plan, my reminders, my Jira tickets, my Harvest time, my PR queue, and my Claude Code sessions across multiple client repos. ~75 tools, two LLM providers, three inbound channels.
· ABC-1019: query both DBs
· multi-PR merges (#103-#107)
· #418 client-a/api · awaiting CI
· #205 client-b/web · ready to merge
· #97 personal-agent · draft
Model: claude-haiku-4-5
Cost: $0.079
How it's wired
Browser / Mobile / Tablet agent.mscodeit.com │ ▼ ┌───────────────────────────────────────────────────────────┐ │ Cloudflare Access (auth) + Cloudflare Tunnel │ └───────────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────────────────────────────────────────┐ │ Laptop Node.js service · port 4757 │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────────┐ │ │ │ WebSocket │ │ REST API │ │ Scheduler │ │ │ │ PTY stream │ │ ~25 routers │ │ cron + watchers │ │ │ │ (xterm) │ │ │ │ │ │ │ └─────────────┘ └─────────────┘ └──────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ Agent tool loop · ~75 tools │ │ │ │ Claude / OpenAI · LLM registry · tool dispatcher │ │ │ └──────────────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────────┘ │ ▼ SQLite · clients · sessions · conversations · plan · reminders · scheduled tasks · audit log · watchers
Patterns from the codebase
Adapted (not copy-pasted) from the Personal Agent — tool design, provider abstraction, NL parsing, real-time streaming.
const llm = registry.get(client.default_llm);
const stream = await llm.stream({
model: llm.defaultModel,
system: client.systemPrompt,
tools: tools.specsFor(client),
messages,
cache: { ttl: "5m" }, // prompt cache
});
for await (const block of stream) {
if (block.type === "tool_use") {
yield await tools.dispatch(block);
}
} const cron = await parseCron(input, {
examples: [
["every weekday at 9am", "0 9 * * 1-5"],
["first monday each month", "0 9 1-7 * 1"],
["in 25 minutes", "@once+25m"],
],
});
await scheduler.add({
cron,
type: "remind",
instruction: "stand-up reminder",
}); const pty = node_pty.spawn(
llmRegistry.spec(client).cli, // claude / codex
["-c", "--cwd", client.path],
{ name: "xterm-256color", cols, rows }
);
ws.on("message", (data) => pty.write(data));
pty.onData((chunk) => ws.send(chunk)); What it does
AI Plan Builder
Asks Claude to draft my entire day around fixed meetings, ticket priorities, and pomodoro blocks. Two-column UI: I refine in chat, the proposed plan rebuilds on the right. One click writes it to the day.
Cross-device Claude Code PTY
Real Claude Code v2.1.123 (Opus 4.7, 1M context) running in the selected client folder, streamed over WebSocket to phone, tablet, or laptop. Memory recall on session start.
Sprint Board: Kanban + Gantt
Per-client sprint with grouped Kanban columns (Open / In Progress / Reopened / Pre-QA / Review / Blocked) and a Gantt view with progress %, overflow flags, and per-day ticket bars.
Multi-Source Calendar
Month and week views aggregating Outlook (iCal), Google, and personal calendars. Per-source toggles, color coding, and direct event-to-plan integration.
Watchers + Activity Feed
Background pollers for PRs, Jira, and calendars (e.g. 'PR watcher every 30 min'). New approvals, ready-to-merges, and review requests stream into the dashboard activity feed.
AI Cost Tracking + Daily Budget
Live token accounting per conversation. Per-day and per-month spend chart. Hits a configurable daily budget threshold → Telegram alert.
Morning Briefing + EOD Journal
Auto-generated daily summaries — morning briefing at 08:30 (today's plan, blockers) and end-of-day journal at 18:00 (what shipped, what's pending) — both delivered via Telegram.
Telegram Bot — Three Modes
Proactive: PR approvals, ready-to-merges, calendar reminders pushed as they happen. Conversational: natural-language git activity Q&A with cross-system Harvest auto-fill. /terminal: spawns a real Claude Code session with model picker, live cost tracker, End-session and /model upgrade — all from the phone. Plus WhatsApp via Baileys and voice input (Web Speech or OpenAI Whisper).
NL → Cron Scheduling
‘every weekday at 9am’, ‘in 25 minutes’, ‘first Monday each month’ — parsed to cron and dispatched by the scheduler. Reminders, actions, and watchers all run on the same engine.
What it's built with
Want something like this for your team?
I design and ship agentic systems that run in production — multi-LLM, observable, with proper auth. Tell me what you're trying to build.
Get in touch →