AtlatestRepositoryminder
1
# Minder3
Scheduled task channel server for Claude Code sessions, built with Sigil.5
## Architecture7
Minder is an MCP channel server that manages cron-based scheduled tasks and8
pushes events into a running Claude Code session via the `claude/channel`9
protocol.11
```12
minder/13
├── package.sgl # Package definition14
├── dev-redirects.sgl # Points deps at local sigil + sigil-later15
├── minder.yaml # Schedules (optional)16
├── src/minder/17
│ ├── main.sgl # Entry point: channel MCP server18
│ ├── config.sgl # Config loading (YAML)19
│ └── scheduler.sgl # Cron scheduling via sigil-later20
└── test/21
└── test-config.sgl22
```24
## Configuration26
Schedules via `minder.yaml`:27
```yaml28
schedules:29
check-services:30
cron: "*/30 * * * *"31
prompt: "Check service health"32
```34
## Dependencies36
- **sigil-mcp** — MCP server framework (channel notifications)37
- **sigil-later** — Cron-based task scheduling38
- **sigil-yaml** — Config file parsing39
- **sigil-log** — Structured logging41
## Building43
Always build within a Guix shell:45
```bash46
guix shell -m ../sigil/manifest.scm -- env CC=gcc \47
../sigil/build/release/bin/sigil build --redirects dev-redirects.sgl48
```50
## Testing52
```bash53
guix shell -m ../sigil/manifest.scm -- env CC=gcc \54
../sigil/build/release/bin/sigil -L build/dev/lib test --redirects dev-redirects.sgl55
```57
## Running59
Minder is designed to be spawned by Claude Code as a channel MCP server:61
```bash62
claude --channels server:minder63
```65
Register it in `.mcp.json`:66
```json67
{68
"mcpServers": {69
"minder": {70
"command": "./build/dev/bin/minder",71
"env": {}72
}73
}74
}75
```77
## Stale Cache79
After rebuilding, clear the global module cache:81
```bash82
rm -rf ~/.cache/sigil/lib/0.7.0/minder/83
```85
## Key Implementation Notes87
- YAML dict keys from `yaml-decode` are **keywords** — use `keyword->string`88
- Struct constructors match the struct name (not `make-` prefixed)89
- The MCP server loop runs inside `with-async` so scheduler goroutines90
can interleave with stdin reads91
- `channel-notify!` from `(sigil mcp channel)` sends channel events92
- sigil-later tasks spawn their own goroutines via `later-every!`