<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lola 🧱 - Lunch Pail Labs</title>
    <description>The latest articles on DEV Community by Lola 🧱 - Lunch Pail Labs (@ojabowalola).</description>
    <link>https://dev.to/ojabowalola</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1128704%2Fe2123c20-cdba-4a9c-a727-a2e224a65a8e.jpg</url>
      <title>DEV Community: Lola 🧱 - Lunch Pail Labs</title>
      <link>https://dev.to/ojabowalola</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ojabowalola"/>
    <language>en</language>
    <item>
      <title>The head chef model of AI collaboration</title>
      <dc:creator>Lola 🧱 - Lunch Pail Labs</dc:creator>
      <pubDate>Mon, 22 Jun 2026 13:14:00 +0000</pubDate>
      <link>https://dev.to/ojabowalola/the-head-chef-model-of-ai-collaboration-22go</link>
      <guid>https://dev.to/ojabowalola/the-head-chef-model-of-ai-collaboration-22go</guid>
      <description>&lt;p&gt;Working with AI is still strange territory. We reach for metaphors: manager, intern, editor, surgeon. Each gets close, but none explain the back-and-forth dance of giving inputs, interpreting outputs, and adjusting course as you work alongside a machine. We want scale, but we also want the output to reflect our judgment, our standards, and our voice. It is not just about producing more; it is about making sure what is produced still feels like us.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Old Metaphors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Manager:&lt;/strong&gt; Too detached. You end up supervising outputs instead of shaping them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intern:&lt;/strong&gt; Too one-way. You spend more time teaching and correcting than creating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Editor:&lt;/strong&gt; Too reactive. You polish what already exists instead of driving direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Surgeon:&lt;/strong&gt; Too specialized. Great for precision work, but not for broad creative problem-solving.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Head Chef Frame
&lt;/h3&gt;

&lt;p&gt;The head chef is not a distant strategist. They are in the kitchen, hands-on, guiding the team, tasting, and keeping everything aligned with their creative vision. They delegate, but they also step in when something needs attention.&lt;/p&gt;

&lt;p&gt;A head chef also has a certain level of competency with the craft. They understand ingredients, technique, timing, and flavor. They can jump on the line if needed. They know what good looks and feels like.&lt;/p&gt;

&lt;h3&gt;
  
  
  Putting It Into Practice
&lt;/h3&gt;

&lt;p&gt;Here is how I apply the Head Chef model in my own stack, using AI agents embedded in my dev environment to handle execution while I guide direction.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up your stations.&lt;/strong&gt; I work in two Ghostty terminals. The left side is for planning and viewing, the right for synchronous agents running through &lt;a href="https://opencode.ai/" rel="noopener noreferrer"&gt;OpenCode&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prep your ingredients.&lt;/strong&gt; I pick the next task from my list and break it into clear, sequential phases using a custom &lt;strong&gt;/create-plan&lt;/strong&gt; command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open a shared recipe.&lt;/strong&gt; Once the direction feels right, I open a &lt;strong&gt;GitHub issue&lt;/strong&gt; so every agent can read from the same context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cook in phases.&lt;/strong&gt; I offload each phase to the execution agents with a &lt;strong&gt;/create-instruction&lt;/strong&gt; command and let them work through it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Taste and adjust.&lt;/strong&gt; As outputs come back, I use a &lt;strong&gt;/review&lt;/strong&gt; command to inspect and refine them before committing changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serve and reset.&lt;/strong&gt; When all phases are complete, I close the issue and pull the next most important task.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This loop keeps me in the kitchen. I am orchestrating, tasting, and directing while AI handles execution without pulling me out of the work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The metaphors we use for AI are not just storytelling. They shape how we work. When we frame AI as an intern, a coworker, or a copilot, we interact with it in fundamentally different ways. These mental models influence trust, delegation, and how hands-on we stay (&lt;a href="https://sloanreview.mit.edu/projects/achieving-individual-and-organizational-value-with-ai/#:~:text=match%20at%20L575%20percent%20of,subordinate,%20or%20a%20mere%20tool" rel="noopener noreferrer"&gt;source&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The Head Chef model reflects what great product work really requires. You need to understand the tools, the timing, and the ingredients. You need competency with the material.&lt;/p&gt;

&lt;p&gt;And for builders, when AI enters the kitchen, that competency matters even more. The more fluent you are across design, code, marketing, and storytelling, the better you can shape what AI produces.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lunchpaillabs.com/writing/head-chef-ai-collaboration/" rel="noopener noreferrer"&gt;Lunch Pail Labs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>collaboration</category>
      <category>agents</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building an autonomous Slack agent with OpenCode</title>
      <dc:creator>Lola 🧱 - Lunch Pail Labs</dc:creator>
      <pubDate>Tue, 16 Jun 2026 16:17:59 +0000</pubDate>
      <link>https://dev.to/ojabowalola/building-an-autonomous-slack-agent-with-opencode-19d1</link>
      <guid>https://dev.to/ojabowalola/building-an-autonomous-slack-agent-with-opencode-19d1</guid>
      <description>&lt;p&gt;&lt;a href="https://www.usepipa.com/" rel="noopener noreferrer"&gt;Pipa&lt;/a&gt;, my operations agent running on OpenCode and living in Slack, came from a boring problem.&lt;/p&gt;

&lt;p&gt;The more I trusted coding agents with non-coding work, the more annoying it became that they still needed my laptop, my terminal, and my attention.&lt;/p&gt;

&lt;p&gt;I was handing local work to OpenCode: plans, writing, research, reviews, repo cleanup, content workflows, and studio operations. Some of that work became cron jobs and recurring agent loops.&lt;/p&gt;

&lt;p&gt;So Pipa moved into Slack.&lt;/p&gt;

&lt;p&gt;Slack gives me channels for topics, threads for tasks, and a shared place to see what happened. Pipa can work autonomously, but I can still talk to her like a teammate.&lt;/p&gt;

&lt;p&gt;Other teams are making the same move. &lt;a href="https://aaif.io/blog/how-duolingo-built-an-ai-slackbot-with-180-mcp-tools/" rel="noopener noreferrer"&gt;Duolingo built an AI Slackbot with 180+ MCP tools&lt;/a&gt; and got to 250 weekly active users. &lt;a href="https://www.youtube.com/watch?v=5sb9iA2v78g" rel="noopener noreferrer"&gt;Shopify shared River&lt;/a&gt;, its Slack-native agent that coauthored one in eight merged pull requests. &lt;a href="https://www.mintlify.com/blog/knowledge-management-agent-era" rel="noopener noreferrer"&gt;Mintlify wrote&lt;/a&gt; that its docs agent runs on OpenCode and Daytona in sandboxes.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The architecture behind Pipa looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09z16z2f8cgsxfapy888.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09z16z2f8cgsxfapy888.png" alt="Pipa architecture diagram" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each tool has a job.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://slack.com/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; is where most work starts and answers land. It gives Pipa the message, requester, workspace, thread, and delivery target.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The gateway is the web service that receives requests. I host it on &lt;a href="https://fly.io/" rel="noopener noreferrer"&gt;Fly&lt;/a&gt;. It accepts Slack events, automation API calls, trigger requests, Composio webhooks, Inngest calls, and runtime calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.inngest.com/" rel="noopener noreferrer"&gt;Inngest&lt;/a&gt; wakes work up. It handles scheduling, retries, cancellation, concurrency, and execution handoff.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://e2b.dev/" rel="noopener noreferrer"&gt;E2B&lt;/a&gt; is the sandbox. It gives the agent its own computer to do work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://opencode.ai/" rel="noopener noreferrer"&gt;OpenCode&lt;/a&gt; is the agent harness. It is the brain that edits files, runs commands, calls tools, works in repos, and returns structured output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; handles external triggers and tool integrations. It can wake the gateway when something happens in another app, and it makes it easy to add tool connections in Slack.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you do not need the autonomy pieces, Slack, a sandbox, and an agent harness can get you pretty far.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating "autonomy"
&lt;/h3&gt;

&lt;p&gt;You can stop at a setup where a Slack message starts OpenCode in a sandbox and get leverage. If you already live in Slack, that reduces friction for you and your team. Threads become workspaces. You can keep several tasks moving at once without living inside a terminal or another agent UI.&lt;/p&gt;

&lt;p&gt;With a little more shaping, the agent can start doing more on its own.&lt;/p&gt;

&lt;p&gt;The pieces I add after the base sandbox loop are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Character and instruction files. OpenClaw popularized files like &lt;code&gt;soul.md&lt;/code&gt;, &lt;code&gt;heartbeat.md&lt;/code&gt;, and &lt;code&gt;character.md&lt;/code&gt;. You can put the same kind of files into the OpenCode config. They shape behavior, set standards, and give the agent more personality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automations, workflows, and triggers. This is where I get the most benefit. Inngest wakes the agent and sandbox at a set time. Sometimes the prompt is specific: run this skill on this thing every morning. Sometimes it is more like a heartbeat: look at the current state, use judgment, and decide what needs attention. Not every run starts from time. Many SaaS tools send events. If you want the agent to wake up and execute a skill when something happens, create a trigger.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tool access. I use Composio because it makes broad tool access easy. If I need to give the agent something, I click a link. If the agent is blocked, it can post in Slack, say what it needs, and I can connect it. A lot happens when the agent has access to the same everyday tools I use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Skills. Agent skills teach the agent how to write things and do things. This matters more with automations, because many of my scheduled prompts look like "run this skill on this target." The skill holds the logic. The public Pipa skills live in the &lt;a href="https://github.com/lunchpaillola/pipa-skills" rel="noopener noreferrer"&gt;Pipa skills repo&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory. I use &lt;a href="https://supermemory.ai/" rel="noopener noreferrer"&gt;Supermemory&lt;/a&gt; for this. Before, Pipa loaded context files and knew to update them. A memory tool adds teammate-like recall: goals, preferences, latest business state, and small details that should carry across runs. Good memory tools also know how to supersede and delete memories, which matters once the agent has more autonomy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My favorite pattern right now uses Linear. I keep a task list there, then Pipa can wake up, pick work, do it, ship it, and leave me something to review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why OpenCode
&lt;/h3&gt;

&lt;p&gt;You could use the Claude SDK, the OpenAI SDK, LangChain, OpenClaw, Hermes, Codex, or another agent system and still use the pattern in this article.&lt;/p&gt;

&lt;p&gt;I like OpenCode for a few reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It is easy to reason about.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have run experiments with OpenClaw and Hermes, and they are fun. They are also built around stronger autonomy patterns. But I have had more trouble making them execute as deterministically as a coding agent. Call it a skill issue, but OpenCode is easier for me to understand when it works and when it breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. It works for local synchronous work and "autonomous" Slack work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My work now falls into two buckets: tasks I go deep on locally, and tasks that can run in Slack with less supervision. OpenCode gives me one harness for both. I am not learning the edges of two different systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. It is open source and swappable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I can change the model without rebuilding the runtime around another provider. I can swap models, plugins, memory tools, and sandboxes without tying the whole system to one agent ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;That is how I run Pipa today: Slack for the interface, a gateway for requests, Inngest for workflows, E2B for sandboxes, and OpenCode for agent work.&lt;/p&gt;

&lt;p&gt;I am thinking about opening up the core gateway pattern. A lot can be done with OpenCode in the cloud, and I think it is underrated for this use case.&lt;/p&gt;

&lt;p&gt;If you want to see that, &lt;a href="mailto:hi@lunchpaillabs.com"&gt;drop a note&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want a managed agent for your studio without worrying about these pieces yourself, you can &lt;a href="https://www.usepipa.com/hire" rel="noopener noreferrer"&gt;hire Pipa&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;--&lt;br&gt;
This post originally appeared on the &lt;a href="https://lunchpaillabs.com/writing/how-i-built-an-autonomous-opencode-agent-in-slack/" rel="noopener noreferrer"&gt;Lunch Pail Labs blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>automation</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to add Honeycomb traces to your AI Slack bot</title>
      <dc:creator>Lola 🧱 - Lunch Pail Labs</dc:creator>
      <pubDate>Tue, 02 Jun 2026 22:24:00 +0000</pubDate>
      <link>https://dev.to/ojabowalola/how-to-add-honeycomb-traces-to-your-ai-slack-bot-2f1b</link>
      <guid>https://dev.to/ojabowalola/how-to-add-honeycomb-traces-to-your-ai-slack-bot-2f1b</guid>
      <description>&lt;p&gt;&lt;a href="https://www.usepipa.com/" rel="noopener noreferrer"&gt;Pipa&lt;/a&gt; is our agent for studio operations at &lt;a href="https://lunchpaillabs.com/" rel="noopener noreferrer"&gt;Lunch Pail Labs&lt;/a&gt;. She lives in Slack, is powered by &lt;a href="https://www.e2b.dev/" rel="noopener noreferrer"&gt;E2B&lt;/a&gt; sandboxes, and uses &lt;a href="http://opencode.ai/" rel="noopener noreferrer"&gt;OpenCode&lt;/a&gt; for the harness.&lt;/p&gt;

&lt;p&gt;When it works, it’s awesome. You ask for help. Pipa goes off, runs the tools, does the work, and comes back with the answer.&lt;/p&gt;

&lt;p&gt;When it goes wrong, it’s a complete black box. In the terminal, I can see the mess: tool calls, permission prompts, stalls, and weird little “I can’t do that” moments. In Slack, most of that disappears behind a typing indicator and one final message.&lt;/p&gt;

&lt;p&gt;If you’re building an AI agent that lives in Slack or runs in the background, this pain may feel familiar. You need traces. This is the setup I used to send mine to &lt;a href="https://www.honeycomb.io/" rel="noopener noreferrer"&gt;Honeycomb&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start with the trace shape
&lt;/h3&gt;

&lt;p&gt;A trace shows one request moving through your system. For a Slack agent, that usually means one Slack message, one agent run, and one Slack reply.&lt;/p&gt;

&lt;p&gt;The shape depends on your architecture. In Pipa, a chat gateway pings an E2B sandbox, loads the right skills and templates, and runs OpenCode.&lt;/p&gt;

&lt;p&gt;For &lt;a href="https://www.usepipa.com/" rel="noopener noreferrer"&gt;Pipa&lt;/a&gt;, I put the telemetry in the chat gateway because that layer sees the whole run: the Slack prompt, the sandbox lifecycle, the OpenCode event stream, stdout and stderr, retries, run status, and Slack delivery status.&lt;/p&gt;

&lt;p&gt;The gateway creates one trace per run. That trace is made of spans. A span is one timed step inside the run, like preparing the sandbox, starting OpenCode, watching a tool call, or sending the final Slack reply.&lt;/p&gt;

&lt;p&gt;For my bot, the trace includes spans like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pipa.run.execute&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipa.e2b.sandbox.prepare&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipa.opencode.command&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;invoke_agent pipa.standard_opencode&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first few spans explain the backend path. The &lt;code&gt;invoke_agent&lt;/code&gt; span explains the agent session. Inside that span, Pipa attaches events for the user message, assistant responses, tool calls, retries, and run summary.&lt;/p&gt;

&lt;p&gt;Now the boring infrastructure stuff and the agent’s actual behavior live in the same trace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add the traces
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Send OpenTelemetry traces to Honeycomb
&lt;/h4&gt;

&lt;p&gt;OpenTelemetry creates and sends the trace data. Honeycomb is where I inspect it. In Pipa, the gateway sends traces to Honeycomb when &lt;code&gt;HONEYCOMB_API_KEY&lt;/code&gt; is present.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Slack event -&amp;gt; gateway run -&amp;gt; sandbox prepare -&amp;gt; OpenCode command -&amp;gt; Slack reply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Create one top-level span for the agent run
&lt;/h4&gt;

&lt;p&gt;For Pipa, the top-level run span is &lt;code&gt;pipa.run.execute&lt;/code&gt;. This is the span I search for when someone says, “the bot got stuck” or “Slack never got a good answer.”&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Add spans for the big infrastructure steps
&lt;/h4&gt;

&lt;p&gt;These spans tell me whether the basic plumbing worked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pipa.e2b.sandbox.prepare&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipa.opencode.command&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They answer the early questions. Did the sandbox start? Did OpenCode run? How long did each step take? Did the failure happen before the agent really got going?&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Add an agent invocation span for Honeycomb Agent Timeline
&lt;/h4&gt;

&lt;p&gt;One thing I missed at first: traces alone do not give you an agent timeline.&lt;/p&gt;

&lt;p&gt;You can emit a bunch of spans and Honeycomb will show you a normal backend trace. Useful, yes, but it still reads like infrastructure: Slack event received, sandbox started, command ran, response sent. You can see which services ran and how long they took. You still cannot see what the agent did.&lt;/p&gt;

&lt;p&gt;For that, you need Honeycomb’s Agent Timeline.&lt;/p&gt;

&lt;p&gt;The way I understand it, Agent Timeline works when Honeycomb can recognize an agent invocation span and read the agent’s activity as events inside that span. Instead of showing only backend work, the trace can show the session itself: the user prompt, assistant messages, tool calls, tool results, retries, and final output.&lt;/p&gt;

&lt;p&gt;A normal trace might look like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;slack.event.received -&amp;gt; sandbox.prepare -&amp;gt; opencode.command -&amp;gt; slack.reply.sent&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;An agent timeline is more like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;invoke_agent -&amp;gt; user_message -&amp;gt; assistant_response -&amp;gt; tool_call -&amp;gt; tool_result -&amp;gt; assistant_response -&amp;gt; run_summary&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That distinction matters. Honeycomb can show normal service spans automatically, but it will not magically know what happened inside your agent. You have to emit those events yourself.&lt;/p&gt;

&lt;p&gt;As far as I understand it, “Agent Timeline” is Honeycomb’s product view for this. Other observability tools may support GenAI tracing, span events, or custom trace views. Honeycomb’s Agent Timeline is the feature I was targeting here.&lt;/p&gt;

&lt;p&gt;Pipa emits a Honeycomb Agent Timeline-compatible span:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;invoke_agent pipa.standard_opencode&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That span gets the attributes Honeycomb needs to group and display the run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gen_ai.conversation.id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gen_ai.agent.name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gen_ai.operation.name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gen_ai.request.model&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;app.run_id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what lets Honeycomb show the agent session as a timeline instead of a pile of unrelated events.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Attach the agent’s activity as events
&lt;/h4&gt;

&lt;p&gt;Honeycomb can show service calls, but it cannot know what your agent did unless you tell it. The gateway sends the moments I actually care about: the user message, the tool call, the agent response, and the run summary.&lt;/p&gt;

&lt;p&gt;For Pipa, the gateway parses structured &lt;code&gt;opencode run --format json&lt;/code&gt; output and emits events such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;opencode.user_message&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;opencode.tool_call&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;opencode.agent_response&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;opencode.run_summary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;opencode.parser_skipped&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes the hidden middle visible: the prompt, assistant-visible text, tool names, tool status, token and cost data, retry markers, and failure summaries.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Verify with a real failed run
&lt;/h4&gt;

&lt;p&gt;After adding traces, run the bot from Slack and inspect the trace in Honeycomb. The trace should answer these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did Slack reach the gateway?&lt;/li&gt;
&lt;li&gt;Was the run created?&lt;/li&gt;
&lt;li&gt;Did E2B prepare a sandbox?&lt;/li&gt;
&lt;li&gt;Did OpenCode start?&lt;/li&gt;
&lt;li&gt;What prompt did the agent receive?&lt;/li&gt;
&lt;li&gt;Which tools did it call?&lt;/li&gt;
&lt;li&gt;What assistant-visible text did it produce?&lt;/li&gt;
&lt;li&gt;Did it retry?&lt;/li&gt;
&lt;li&gt;Did the run fail or complete?&lt;/li&gt;
&lt;li&gt;Did the Slack reply send?&lt;/li&gt;
&lt;li&gt;Is anything sensitive leaking?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the trace cannot answer them, add another span or event at the layer that can see the missing context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;If your AI bot runs inside Slack, traces are how you see what happened between the prompt and the final reply.&lt;/p&gt;

&lt;p&gt;Start with the questions you ask when the bot responds badly. Then emit spans and events around those moments. One Slack request should become one run you can actually inspect in Honeycomb.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://lunchpaillabs.com/writing/how-to-add-honeycomb-traces-to-your-ai-slack-bot/" rel="noopener noreferrer"&gt;Lunch Pail Labs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>monitoring</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
