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 -- sigil deps install47
guix shell -m ../sigil/manifest.scm -- sigil build -c release48
```50
Use installed Sigil 0.23.3 with `SIGIL_REDIRECTS` unset for releases.51
The lock selects published registry packages. Release C compilation uses52
GCC with `-march=x86-64 -mtune=generic` for CPU portability.53
Use `--redirects dev-redirects.sgl` only for local dependency development.55
## Testing57
```bash58
guix shell -m ../sigil/manifest.scm -- sigil test59
```61
## Running63
Minder is designed to be spawned by Claude Code as a channel MCP server:65
```bash66
claude --channels server:minder67
```69
Register it in `.mcp.json`:70
```json71
{72
"mcpServers": {73
"minder": {74
"command": "./build/dev/bin/minder",75
"env": {}76
}77
}78
}79
```81
## Stale Cache83
After rebuilding, clear the global module cache:85
```bash86
rm -rf ~/.cache/sigil/lib/0.7.0/minder/87
```89
## Key Implementation Notes91
- YAML dict keys from `yaml-decode` are **keywords** — use `keyword->string`92
- Struct constructors match the struct name (not `make-` prefixed)93
- The MCP server loop runs inside `with-async` so scheduler goroutines94
can interleave with stdin reads95
- `channel-notify!` from `(sigil mcp channel)` sends channel events96
- sigil-later tasks spawn their own goroutines via `later-every!`