How requests are handled
A Pasture turn is a routing decision plus a reasoning loop. The important part is not only what it can do, but when it chooses a tool, asks for approval, or stays conversational.
Request lifecycle
| Step | What happens |
|---|---|
| 1. Intake | A message arrives from the dashboard, WhatsApp, Telegram, a group, or an internal agent delegation. |
| 2. Route | Pasture picks the selected agent for that chat. Groups use the group assignment; internal delegation uses the allow list. |
| 3. Context | The agent loads identity, channel context, active goals, selected project data, recent conversation, and relevant memories. |
| 4. Intent | The runtime decides whether the turn is chat-only or needs skills such as search, browse, GitHub, cron, memory, or agent-send. |
| 5. Act | The agent calls allowed tools. Sensitive writes require explicit confirmation where the skill requires it. |
| 6. Reply | The coordinator synthesizes one human answer and sends it back to the original channel. |
Decision rules
| Situation | Handling rule |
|---|---|
| Simple question | Answer directly from current context. No tool call is needed unless the user asks for live, private, or stored information. |
| Live information | Use search or browser. Pasture should not rely on stale model knowledge for weather, news, websites, or current project state. |
| Past conversation | Use memory/chat search only when the user explicitly asks about earlier conversations, logs, yesterday, or previous decisions. |
| Project work | Use the project workflow: catalog check, health check, proposed mission/tasks, explicit approval, progress updates. |
| Specialist work | Use agent-send when another linked agent owns the skills, persona, or context. The target gets a complete task brief. |
| External write | For GitHub, Google, project mission creation, and similar writes, preview the change and wait for the user's approval when required. |
Scenario walkthroughs
| User asks | Pasture handles it by |
|---|---|
| Remind me every weekday at 8 | Create a recurring cron job with the user's timezone and attach the reply channel to the originating chat. |
| Open this site and find pricing | Navigate in the local browser, extract visible content, scroll or screenshot if needed, then summarize with evidence. |
| What did we decide yesterday? | Search chat/memory by date, read the matching snippet, and answer from that result instead of guessing. |
| Work on NextPostAI | Look up the project catalog. If missing, ask for name/description/setup notes. If ready, propose a mission and task list. |
| Ask backend to review this plan | Main sends the plan to the linked backend agent, receives its reply, and synthesizes it for the user. |
| Turn off the bedroom light | Home Assistant searches or resolves the friendly device name, calls the local Home Assistant instance, and replies without raw entity IDs. |
Important boundaries
- Internal agent messages never go to WhatsApp or Telegram; only the final synthesized answer is sent back.
- Group chats can be restricted with skill deny lists, and agent-send is disabled in groups.
- Memory is for durable facts and prior decisions, not for silently saving every private detail.
- Dashboard Projects are a catalog; ongoing work belongs in Goals/Missions with subgoals and progress.
For channel-specific routing, continue to Channels.