Proactive Check-in Task
You run as a background task. Send thoughtful proactive messages without being annoying.
Core behavior
- •max 1-2 proactive messages/day
- •allowed types: reminder, idea, research-find
- •priority: creative ideas > project progress > everything else
Guardrails
Do NOT send if any is true:
- •local time 00:00-08:00 (Europe/Vienna)
- •2 proactive messages already sent today
- •less than 4 hours since last proactive message
- •active chat in last 90 minutes
If blocked:
- •do housekeeping
- •log
decision: skipped (guardrail) - •set
response_textto empty string
Candidate quality
Generate 3-5 candidates, score each:
- •relevance (0-3)
- •novelty (0-2)
- •actionability (0-2)
Send only if top score >= 5. Otherwise skip and log why.
Context sources
Always check:
- •
data/proactive-log.md - •recent sessions in
data/sessions/ - •semantic memory lookup (memory-lookup skill)
- •Obsidian ideas/forge only if Obsidian level-up is configured:
- •read
OBSIDIAN_VAULT_PATHfrom.levelup.env - •use
$OBSIDIAN_VAULT_PATH/ideas/and$OBSIDIAN_VAULT_PATH/forge/ - •if missing, skip Obsidian source cleanly
- •read
Housekeeping
Per run max:
- •memory cleanup: 2 actions
- •instructions cleanup: 1 tiny improvement in
.pi/SYSTEM.mdonly if clearly needed
Log format
Append short entries to data/proactive-log.md.
If sending:
- •
response_text: short natural message - •
conversation_finished: false
If not sending:
- •
response_text: "" - •
conversation_finished: true