Had a bit of jankiness during setup as I fought with llama.cpp bugs. There are a few issues around models reported by the provider changing, refreshing as they change, had a few instances of "New Chat" showing one model then hitting llama.cpp with another, etc. Sorry, been traveling for a bit and didn't have the energy to properly recreate and put together a real bug report. Just a heads up that the onboarding there is a bit rough, though anyone running their own local models is probably more than able to get it figured out.
I'm really liking it. I wish I had something more substantial to say than "it's easy and clean" but... it's easy and clean. And as far as "AI tooling" goes, the setup was an absolute breeze even with the issues. The fact that I can just install a single app and go rather than spending hours and hours on setup, configuration, etc makes me way more likely to use this going forward... it's a lot easier to rely on a tool when I know it will be quick to fix if it breaks.
One note and one feature request, if you want 'em:
Though now that I understand the concepts better it's obvious, it _wasn't_ immediately obvious why the MCP server I added wasn't working. Tools are called via "tasks", and "tasks" are defined based on the skills. I had to create a skill. I'm sure it's somewhere in the documentation but I (and most people) don't read that kind of stuff, so would be good to surface somewhere obvious in the UI maybe?
And I would absolutely _love_ if you could override the provider and model per task. I run a small model locally as it's good enough for most of what I want to do (and cheap! and private!), but it would be great if I could define a "write-code" skill that was run via Claude instead or something so I could delegate tasks that aren't really suitable for a tiny local model out to something more capable.
Anyway... Cool tool. Hope to see it continue to grow and evolve! Thank you for releasing this!
Thanks so much for the feedback! The README arguably needs a diagram that shows the orchestrator-subagent delegation pattern and how they map to Skills, since you’re right - it’s not intuitive without reading the docs, and it’s somewhat unique from other agent harnesses I’ve seen.
The internal-only predecessor actually did let you specify the individual model for the subagent calls. DeepAgents supports this, so it shouldn’t be a big lift. I’ll add an issue on GitHub. Thanks for the request!
This looks great. I've been playing around with GrokBot, and like a lot of what it does, but would much, much prefer an open source project to manage various asynchronous tasks.
What I like about GrokBot is the combination of freeform agent discussions, scheduled jobs, agent-to-agent communication, per-agent memory, and the fact that they all get a sandboxed instance with a browser. It's very well implemented. I think they have a very similar vision to yours.
Thanks for the feedback! I’ll give GrokBot a closer look. We’re focused on being open source and decoupled from any particular model provider, but it’s great to see a lot of capable tools popping up in this space.
We do ship a QuickJS code interpreter, but otherwise, sandboxing is something we deferred until after launch to make sure we have time to get it right. LangGraph / DeepAgents, which we’re built on, already have the right hooks in place, though. :)
Thanks! I think it depends on how well Pizza Bot aligns with your mental model. Despite living in Claude Code for many things, I find the email-like UX we built for Pizza Bot matches my intuition for how I want to interact with agents beyond a simple chat interaction, including concepts like pinning, folders, filters, actionable threads, etc.
The bigger proof point for me was the adoption we saw from less technical folks at Amazon. Most of them immediately “got it.”
Do you have a list of a few mcp servers or other tools you would add to help with the pizza-bot specific workflow? For example, how would you enforce structured output, should that be an mcp server, a plugin, already in the box?
There are so many! Personally, I’ve been able to get remarkably far with the built-in filesystem tools (courtesy of DeepAgents) paired with a web search MCP (Kagi is great!). Were there any particular workflows you had in mind?
I need to be able to enforce structured output easily (json, and xml if possible). That would be my number one slightly less than typical requirement.
Other than that, I like to insert agents into deterministic workflows, so some way to easily have deterministic steps (calling a script rather than delegating to an agent, but determined by the workflow rather than the agent). However this second one is likely out of scope for a while, since it is the inverse of the typical agent workflow. I could probably work this out clunkily by polling the cli from an external master script, but it would be cool to have it all inside the box.
Ah, this may actually work out of the box if you tell Pizza Bot to use its `task` tool to dynamically launch a subagent (which maps 1:1 with a Skill), and provide it with a `responseSchema`. I’ll test this when I’m back at a computer and report back!
Thanks for the question! Similar to another user’s comment about Paperclip, Herdr looks to provide a layer on top of existing agent harnesses, whereas with Pizza Bot, we run the execution loops for each agent ourselves (built on LangGraph / DeepAgents). This gives us control over checkpointing, human-in-the-loop, etc., and the only “dependency” is your model provider.
I’ve been describing Pizza Bot as an “inbox” because it captures the UX, but this does seem to cause confusion and undercuts the fact that Pizza Bot actually is an agent harness itself, not just an orchestrator of agents hosted elsewhere.
It’s both! The Releases page indeed links to the Electron app so it’s easy to get started, but you can also run just the backend and web app separately. I have it running in a Docker container on my home network that I connect to from my phone using Tailscale. Check out the docs here: https://github.com/pizza-bot-app/pizza-bot/blob/main/docs/ST...
Thanks! I'm not overly familiar with Paperclip, but from the website, it looks to provide orchestration over a fleet of existing agent harnesses, whereas with Pizza Bot, we run the execution loops for each agent ourselves (built on LangGraph / DeepAgents). We also stick to a "thread" model (similar to email), whereas Paperclip seems to work on a task-based model.
It's an interesting alternate UX framing, for sure. It's possible there are scenarios where a different abstraction makes more sense, but I'm personally curious to see how far we can extend the email idiom!
congrats on the public launch! it's been clear to me for a while now that agents will need their own ways to communicate and an asynchronous inbox/task system is a necessity already. will point my agents at the repo to see how we can leverage
Thanks! I was pleasantly surprised with how naturally a lot of email idioms seemed to align here. In retrospect, it makes sense if you think of human-to-agent communication as another form of asynchronous communication.
In our case, we wanted to borrow the UX of email (to be intuitive to knowledge workers) but not necessarily the implementation.
Full control of your data was a design principle from the beginning, including being able to run fully offline with local models, so we didn’t want to add a dependency on email.
With that said, you can certainly hook up an MCP server and have the agents read and send emails (with human-in-the-loop approval) on your behalf.
Think of Pizza Bot as the "harness"/interface your agents actually run in. You'd still hook up Linear via their MCP server (https://linear.app/docs/mcp) for "what needs doing." Pizza Bot is what handles the run itself (scheduling the interaction, routing tool-call approvals to you, and holding conversation/agent state).
The part that's actually different from "agent in a terminal" or "agent posting to Slack" is that it's built for having a bunch of these running at once. Instead of N terminal tabs or N ticket comment threads to figure out which agent is stuck waiting on you, they land in one inbox — jump between threads, see which ones are paused on an approval or a question, answer, and move on.
You might find it interesting. https://youtu.be/TRpQW-TFTfw
It seemed fitting to build Pizza Bot on top of LangChain’s tech, given the inspiration. :)
Had a bit of jankiness during setup as I fought with llama.cpp bugs. There are a few issues around models reported by the provider changing, refreshing as they change, had a few instances of "New Chat" showing one model then hitting llama.cpp with another, etc. Sorry, been traveling for a bit and didn't have the energy to properly recreate and put together a real bug report. Just a heads up that the onboarding there is a bit rough, though anyone running their own local models is probably more than able to get it figured out.
I'm really liking it. I wish I had something more substantial to say than "it's easy and clean" but... it's easy and clean. And as far as "AI tooling" goes, the setup was an absolute breeze even with the issues. The fact that I can just install a single app and go rather than spending hours and hours on setup, configuration, etc makes me way more likely to use this going forward... it's a lot easier to rely on a tool when I know it will be quick to fix if it breaks.
One note and one feature request, if you want 'em:
Though now that I understand the concepts better it's obvious, it _wasn't_ immediately obvious why the MCP server I added wasn't working. Tools are called via "tasks", and "tasks" are defined based on the skills. I had to create a skill. I'm sure it's somewhere in the documentation but I (and most people) don't read that kind of stuff, so would be good to surface somewhere obvious in the UI maybe?
And I would absolutely _love_ if you could override the provider and model per task. I run a small model locally as it's good enough for most of what I want to do (and cheap! and private!), but it would be great if I could define a "write-code" skill that was run via Claude instead or something so I could delegate tasks that aren't really suitable for a tiny local model out to something more capable.
Anyway... Cool tool. Hope to see it continue to grow and evolve! Thank you for releasing this!
The internal-only predecessor actually did let you specify the individual model for the subagent calls. DeepAgents supports this, so it shouldn’t be a big lift. I’ll add an issue on GitHub. Thanks for the request!
What I like about GrokBot is the combination of freeform agent discussions, scheduled jobs, agent-to-agent communication, per-agent memory, and the fact that they all get a sandboxed instance with a browser. It's very well implemented. I think they have a very similar vision to yours.
We do ship a QuickJS code interpreter, but otherwise, sandboxing is something we deferred until after launch to make sure we have time to get it right. LangGraph / DeepAgents, which we’re built on, already have the right hooks in place, though. :)
The bigger proof point for me was the adoption we saw from less technical folks at Amazon. Most of them immediately “got it.”
Other than that, I like to insert agents into deterministic workflows, so some way to easily have deterministic steps (calling a script rather than delegating to an agent, but determined by the workflow rather than the agent). However this second one is likely out of scope for a while, since it is the inverse of the typical agent workflow. I could probably work this out clunkily by polling the cli from an external master script, but it would be cool to have it all inside the box.
I’ve been describing Pizza Bot as an “inbox” because it captures the UX, but this does seem to cause confusion and undercuts the fact that Pizza Bot actually is an agent harness itself, not just an orchestrator of agents hosted elsewhere.
Let me know if that makes sense!
That way it can truly run asynchronously, even with the computer switched off.
It's an interesting alternate UX framing, for sure. It's possible there are scenarios where a different abstraction makes more sense, but I'm personally curious to see how far we can extend the email idiom!
In our case, we wanted to borrow the UX of email (to be intuitive to knowledge workers) but not necessarily the implementation.
Full control of your data was a design principle from the beginning, including being able to run fully offline with local models, so we didn’t want to add a dependency on email.
With that said, you can certainly hook up an MCP server and have the agents read and send emails (with human-in-the-loop approval) on your behalf.
In our case, we wanted to borrow the UX of email (to be intuitive to knowledge workers) but not necessarily the implementation.
Was there a particular workflow you had in mind here?
How does this compare with connecting your agent to your ticket tracker? Linear can dispatch the agents: https://linear.app/agents https://linear.app/docs/coding-sessions
If it is about local work, how does it compare with simply having your agent monitor a directory for ticket files?
Think of Pizza Bot as the "harness"/interface your agents actually run in. You'd still hook up Linear via their MCP server (https://linear.app/docs/mcp) for "what needs doing." Pizza Bot is what handles the run itself (scheduling the interaction, routing tool-call approvals to you, and holding conversation/agent state).
The part that's actually different from "agent in a terminal" or "agent posting to Slack" is that it's built for having a bunch of these running at once. Instead of N terminal tabs or N ticket comment threads to figure out which agent is stuck waiting on you, they land in one inbox — jump between threads, see which ones are paused on an approval or a question, answer, and move on.
Let me know if that helps to clarify things!