Imported from kirankumar-ritz/FRIDAY (
workspace/AGENTS.md). Install upstream withnpx skills add kirankumar-ritz/FRIDAY --skill workspace. Copyright stays with the author.
AGENTS.md — Agent Routing & Configuration
==========================================
Defines which agent handles which type of request.
The AgentRouter reads this file on every message.
Hot-reloads within 5 seconds — no restart needed.
Agent Roster
main
- Role: Default personal assistant. Handles all inbound messages.
- Persona: Reads SOUL.md for personality. Full tool access.
- Channel: All channels unless overridden below
- Memory: Full persistent memory access
- Tools: All 16 action modules + browser + shell + skills
proactive
- Role: Background agent. Runs scheduled jobs from HEARTBEAT.md.
- Trigger: Cron schedule — wakes, runs task, sleeps. No user message needed.
- Memory: Read-only memory access (doesn't store mid-task)
- Tools: All tools — but no TTS unless job explicitly requests it
- Output: Delivers results via the active channel (Telegram/voice/chat)
delegate ← Layer 3
- Role: Multi-task orchestrator. Decomposes complex requests into parallel subtasks.
- Trigger: Routed when request contains 2+ independent tasks (see patterns below)
- Memory: Full persistent memory access (reads before decompose, writes after synthesis)
- Tools: Spawns SubtaskRunners — each has access to all executor tools
- Output: One synthesised reply combining all subtask results
- Fallback: Single-task requests are handed to MainAgent with zero overhead
Routing Rules
Format: [trigger_pattern] → [agent_name]
Patterns are matched against the incoming message text (case-insensitive)
First match wins. Falls through to 'main' if no match.
── Delegate patterns — multi-task or compound requests ──────────────────────
Trigger delegate when the user asks for multiple independent things at once,
or uses compound connectors that imply parallel work.
[briefing|morning briefing|daily briefing] → delegate [and also|as well as|at the same time|simultaneously] → delegate [weather and news|news and weather|weather, news] → delegate [summarise.*and|summarize.*and|check.*and.*send|search.*and.*book] → delegate [compare.*and|research.*and|find.*and.*email|look up.*and] → delegate [give me.*and.*also|tell me.*and.*also] → delegate
── Proactive patterns — scheduled / reminder tasks ──────────────────────────
[remind|schedule|every|daily|morning|briefing] → proactive
── Main agent catch-all (default) ───────────────────────────────────────────
[code|script|python|debug|error|function|class|refactor] → main [default] → main
Delegate Routing Notes
The delegate agent is smart about overhead:
- If TaskDecomposer returns strategy="single" → hands off to MainAgent (no extra LLM call)
- If strategy="parallel" → runs subtasks in parallel threads (up to 6 workers)
- If strategy="sequential" → runs subtasks in DAG order (respects depends_on)
- Synthesis always produces ONE reply — user never sees "sub-agent" language
Agent Defaults
defaults:
model: groq/llama-3.1-8b-instant # override per-agent below
max_tokens: 512
temperature: 0.3
context_turns: 6
memory_recall_limit: 10
agents:
main:
model: groq/llama-3.1-8b-instant
always_on: true
proactive:
model: groq/llama-3.1-8b-instant
heartbeat_file: workspace/HEARTBEAT.md
speak_results: false # true = TTS output after each job
delegate:
model: groq/llama-3.1-8b-instant
max_workers: 6 # parallel subtask thread pool size
subtask_timeout: 20 # seconds per subtask before timeout
decomposer_max_tokens: 512 # tokens for decomposition LLM call
synthesis_max_tokens: 600 # tokens for final synthesis call