← All guides

Agents · July 11, 2026 · 3 min read

Give your agents lanes: listen, speak, answer

Agent chaos ends when every tool gets one lane: listening tools never publish, one tool speaks, and anything touching private DMs stays read-only and manual.

The problem

Agent chaos rarely comes from a bad model. It comes from permissions: every tool in the stack is allowed to do everything. The scraper that pulls competitor posts could also publish. The tool that reads your inbox sits inside a scheduled loop. Nothing has gone wrong yet, and that is the entire safety mechanism.

What are agent lanes?

Agent lanes means every external tool your agents can reach gets exactly one job, and the jobs never overlap: listen (read public data), speak (publish), or answer (read private messages). My content stack talks to the outside world through exactly three services, one per lane.

Listen. One tool reads public surfaces only: competitor posts and comments, my own audience’s comments, niche trends. It feeds my competitor research loop. Because it only touches public data, it can never see a private message, and it never publishes.

Speak. One tool publishes, and it is the only one. Every post goes out through it. It stages drafts by default and posts only when I explicitly say go. My stack has a second publishing path, but it runs only when I ask for it by name, never as an automatic fallback.

Answer. One tool reads my private DMs. It is read-only, pull-only, and forever manual: I say “check my DMs”, it returns a digest, done. It never sends anything, and it is never wired into a watch loop or scheduled task. Anything unattended in my stack lives in the listen lane.

The memory hook from my routing doc: one tool listens to the crowd, one speaks to the crowd, one answers the one person in your DMs.

A read-only tool you invoke by hand has the complexity of a bookmark.

Copy the routing doc

I keep the lanes in one markdown file every agent reads. Yours can be this short. Paste it into your agent instructions and fill in your own tools:

# Tool routing: one lane per tool

LISTEN: <your research or scraping tool>
- Reads public data only: posts, comments, trends.
- Never publishes. Never touches private messages.

SPEAK: <your publishing tool>
- The ONLY tool that publishes.
- Stages drafts by default. Posts only on my explicit go.

ANSWER: <your inbox tool>
- Reads private messages. Read-only, pull only.
- I run it manually. Never in a scheduled loop or watch task.

Rules:
- One primary publisher. A secondary publishing path runs only
  when I name it explicitly, never as an automatic fallback.
- If a tool could serve two lanes, it still gets exactly one.

Do this now

  1. List every external tool your agents can reach and write one lane next to each: listen, speak, or answer.
  2. Paste the routing doc above into your agent instructions and fill in your tools.
  3. Find the one tool currently serving two lanes and demote it to one today.

Claude Code

Turn this into a Claude skill

Paste this into Claude Code. It reads this guide and builds a skill shaped to how you work.

Read the guide at https://aiwithamirthan.com/guides/give-your-agents-lanes-listen-speak-answer. Then build me a Claude Code skill from it, personalized to how I actually work.

1. Fetch and read the full guide at the URL above.
2. Look at my setup so the skill fits me, not a generic template: skim my repos, my CLAUDE.md / AGENTS.md files, my existing skills, and my stack.
3. Create a new skill (a SKILL.md with a clear name, description, and steps) that lets me do what this guide teaches, adapted to my tools and goals.
4. Tell me where you saved it and how to invoke it.

If anything about my setup is unclear, ask me one or two questions first.

Want to build this yourself?

Join Claude Code Academy: courses, build alongs, and builders turning AI into real systems. And I post a new build on Instagram nearly every day.