A personal AI assistant for software engineers, built on Claude Code. It runs throughout your workday — tracking notes and todos, watching GitHub and Jira, running background investigations, and giving you morning briefings and end-of-day summaries.
One command to start everything: assistant
┌──────────────────────┐ ┌───────────────────────────────┐
│ Claude Code (REPL) │ │ Go Daemon (assistantd) │
│ Interactive chat │ │ Background workers: │
│ │ │ PR watcher (5m) │
│ CLAUDE.md persona │────▶│ Inbox processor (2m) │
│ + plugin skills │◀────│ Notification sender (1m) │
│ │ │ Manifest rebuilder (5m) │
│ Spawns background │ │ │
│ claude sessions in │ │ HTTP API (:3847) │
│ git worktrees │ │ │
└──────────┬───────────┘ └──────────────┬────────────────┘
│ │
│ ┌──────────────────────┐ │
└───▶│ ~/.assistant/ │◀───┘
│ Markdown files │
│ Source of truth │
└──────────┬───────────┘
│
┌────────────▼─────────────┐
│ React Dashboard (:5173) │
│ Read-only + todo toggle │
└──────────────────────────┘
The filesystem is the API. Claude Code writes to it. The daemon writes to it. The dashboard reads from it. If a session crashes, nothing is lost.
- Claude Code CLI installed and authenticated
- Go 1.25+ (for building the daemon)
- Node.js 18+ (for the dashboard)
ghCLI authenticated (for GitHub integration)- Jira MCP server configured in Claude Code (optional, for Jira integration)
git clone https://github.com/hypershift-community/ai-daily-assistant.git
cd ai-daily-assistant
./setup.shThe setup script will:
- Create the
~/.assistant/directory structure - Generate a default
~/.assistant/config.json - Build the Go daemon
- Symlink the
assistantcommand to~/bin/(add~/binto yourPATHif it isn't already)
After setup, edit the config:
$EDITOR ~/.assistant/config.json{
"version": 1,
"github": {
"repo": "your-org/your-repo",
"pollIntervalMinutes": 5
},
"jira": {
"project": "YOUR-PROJECT",
"pollIntervalMinutes": 15
},
"models": {
"trivial": "claude-haiku-4-5",
"standard": "claude-sonnet-4-6",
"deep": "claude-opus-4-6"
},
"daemon": {
"port": 3847
},
"standup": {
"days": ["monday", "thursday"],
"remindAt": "09:00"
},
"workingHours": {
"start": "08:00",
"end": "18:00"
}
}CLAUDE.md drives the assistant's personality and behavior. It ships with references to openshift/hypershift as a working example. Edit it to match your project:
- Update the
## Repossection with your repo path - Adjust the briefing skill's PR link format in
skills/briefing/SKILL.md - Modify standup days/format in
skills/standup/SKILL.md
cd dashboard
npm installThe dashboard starts automatically with the assistant command.
assistantThis starts the daemon + dashboard in the background, then launches Claude Code with the assistant persona. You get a morning briefing automatically.
You launch the assistant when you start your day. It gives you a morning briefing — open PRs, Jira updates, todos carried over, and what you were thinking about yesterday.
Then you keep it running. Throughout the day you chat with it naturally:
- "note: SRE says the issue is in the token rotation logic" — logged immediately
- "todo: follow up with Alice on the flaky test" — added to your list
- "I think the real problem is the retry backoff, not the timeout" — captured as hot context so it survives session restarts
When real work comes in — reviewing a PR, investigating a bug, implementing a feature — you kick it off as a background task: "investigate why CI is failing on the release branch." The daemon spawns a separate Claude session in a git worktree, picks the right model tier, and runs the work without blocking your main session. You keep chatting, taking notes, and working.
When a background task finishes, you pull the results into your main session: "show task 3." Now you can discuss the findings interactively — ask follow-up questions, refine the approach, or approve posting review comments. The main session is always available, always has your context, and never gets bogged down with heavy code analysis.
At the end of the day, run /assistant:wrapup for a summary of what you accomplished and what's carrying over to tomorrow.
Speak naturally. The assistant recognizes these patterns:
Notes and todos
note: the SRE test pattern is broken repo-wide— saves a timestamped notetodo: review PR #1234— adds to today's todo listdone: review PR #1234— marks it complete
Background tasks
investigate why CI is failing on the release branch— spawns a background AI agentlook into the performance regression in PR #456— same, runs in a git worktreewhat tasks are running?— shows active background tasksshow task 3— displays the result of a completed task
Session management
refresh— saves context and restarts the session (clears the context window)
| Skill | Description |
|---|---|
/assistant:briefing |
Morning briefing — PRs, Jira updates, todos, hot context, suggested focus |
/assistant:wrapup |
End-of-day summary — accomplishments, open items, context pruning |
/assistant:standup |
Generates standup update for Slack |
The assistant also uses Claude Code's built-in skills when appropriate: /review, /jira:catch-me-up, /jira:solve, etc.
When spawning background tasks, the assistant picks the cheapest model that can handle the job:
| Tier | Model | Use case |
|---|---|---|
trivial |
Haiku | Quick lookups, file listing, simple commands |
standard |
Sonnet | PR reviews, code analysis, investigations |
deep |
Opus | Complex reasoning, multi-file refactoring, design tasks |
The React dashboard runs at http://localhost:5173 and provides a read-only view of:
- Overview — morning briefing, hot context
- Tasks — background task status and results
- Todos — todo list with checkbox toggle
- Timeline — activity log for the day
All persistent data lives in ~/.assistant/:
~/.assistant/
├── config.json # Your configuration
├── state/ # Daemon state (PR tracking, heartbeats)
├── memory/
│ └── hot-context.md # Working memory — decisions, reasoning, intent
├── notes/
│ ├── inbox.md # Quick notes
│ ├── todos.md # Active todos
│ └── done.md # Completed items
├── logs/
│ └── YYYY-MM-DD.jsonl # Daily activity log (append-only)
├── inbox/ # Background task requests (JSON)
├── outbox/
│ ├── pending/ # Task results waiting for review
│ └── delivered/ # Task results already seen
├── tasks/
│ └── index.json # Task registry
└── notifications/
└── pending/ # Desktop notifications queue
CLAUDE.md-first design. The interactive experience is driven by the CLAUDE.md instructions, not heavy plugin code. Claude Code reads it on every session start and follows the persona. Only three custom skills exist where CLAUDE.md alone isn't sufficient (briefing, wrapup, standup).
Smart background tasks. The daemon uses cheap gh api polling to detect GitHub changes (zero AI cost). It only spawns Claude sessions when there's new activity to analyze. Background tasks run in isolated git worktrees.
Context management. Long conversations fill the context window and degrade quality. The assistant can "refresh" — save hot-context to disk, exit, and the wrapper script relaunches immediately. Nothing is lost because all state is in files.
No external actions without approval. The assistant never pushes code, posts PR comments, closes issues, or transitions Jira tickets without your explicit go-ahead.
Build the daemon:
go build -o bin/assistantd ./cmd/assistantdRun the dashboard in dev mode:
cd dashboard
npm run devMIT