Build an AI Startup Operating System

Orchestrate two AI agents on a shared Kanban board using Hermes.

Introduction

30 Second Summary

Running a startup means juggling support tickets, blog posts, customer emails, and incident responses all at once. When one person tries to handle everything, things slip through the cracks.

In this project, you will build a two-agent Startup OS using Hermes Agent. You will create two specialist AI agents that coordinate through a shared Kanban board, automatically splitting cross-functional business tasks and routing them to the right specialist.

What You'll Build

Picture yourself dropping a business problem into a Kanban board, stepping back, and watching two specialist AI agents divide the work between themselves while you track every move from a single dashboard.

By the end of this project, you'll have:

  • A working Kanban board where you drop a cross-functional ops task into triage and watch it auto-decompose into specialist sub-tasks, each routed to the right agent based on your profile descriptions.
  • Two AI agents running in parallel on a single dashboard, each visible in their own lane in the Lanes by profile view.
  • Firsthand experience switching between Manual and Auto orchestration to feel the friction of hand-routing work before the automation kicks in.
  • Secret Mission: Wire a Telegram bot that pushes notifications to your phone when tasks complete or get blocked.

Are there any prerequisites?

This project includes full setup instructions for all required tools. Familiarity with a terminal is helpful but not required.

Before We Start

Before we dive in, let's lock in what you're about to build and why it matters.

Set Up Hermes and Open the Dashboard

Before you can orchestrate AI agents, you need the platform they run on. Hermes Agent is an open-source multi-agent runtime that handles task routing, execution, and coordination from one place.

In this step, you'll install Hermes, connect it to an LLM provider, and launch the web dashboard where you'll manage your agents for the rest of the project.

In this step, get ready to:
  • Install Hermes Agent and verify it's healthy.
  • Configure an LLM provider and smoke-test the connection.
  • Launch the web dashboard and open the Kanban board.
Install Hermes Agent

Hermes Agent is the runtime that powers everything in this project. Let's make sure it's installed and healthy on your machine.

  • Check if Hermes Agent is already installed by running:
hermes version

✔️ I see a version number

Hermes is already installed. Run the health check to confirm everything is in working order.

  • Verify your installation is healthy by running:
hermes doctor

If all checks pass, you're ready for the next substep.

Doctor reporting issues?

Resolve any issues the doctor flags before continuing. The output tells you exactly what's wrong and how to fix it.

Help me fix a hermes doctor issue.

ⓧ Command not found

Hermes is not installed yet. Let's set it up.

  • Install the required system packages by running:
sudo apt install git curl xz-utils

What are these packages?

These are basic utilities the Hermes installer needs to download and unpack itself. You may be prompted for your password.

  • Install Hermes Agent by running:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

What does the installer handle?

The installer automatically sets up Python 3.11, Node.js v22, ripgrep, and ffmpeg alongside Hermes. You don't need to install these separately.

  • Reload your shell so the terminal can find the new hermes command:
source ~/.bashrc
  • Verify the installation succeeded by running:
hermes version

You should see a version number printed in the terminal.

Still seeing command not found?

Make sure you ran source ~/.bashrc after the install completed. If that doesn't work, close your terminal completely and open a fresh one.

Help me troubleshoot my Hermes installation.

Configure a provider

Hermes Agent needs an LLM provider to power the agents you'll build. The provider supplies the AI model that your agents use to think and respond.

  • Check if you already have a provider configured by running:
hermes model

✔️ I see my provider and model listed

Your provider is already configured. You're ready to move on to launching the dashboard.

ⓧ No provider is configured

The setup wizard walks you through choosing and connecting a provider. It will prompt you to pick a provider and enter your credentials.

  • Launch the setup wizard by running:
hermes setup
  • Follow the on-screen prompts to select your provider (OpenRouter, OpenAI, or Anthropic) and enter your API key.

Fastest free path

If you don't have an API key from another provider, skip the wizard entirely and run this instead:

hermes setup --portal

This uses the free Nous Portal tier. It opens your browser for a quick OAuth login. No API key needed.

Once setup is complete, let's confirm the connection actually works.

  • Smoke-test the connection by running:
hermes chat -q "Reply with exactly: HERMES_READY"

You should see HERMES_READY in the response. This confirms your provider is connected and responding.

Not getting a response?

Double-check that your API key is correct by re-running hermes setup. If you used Nous Portal, make sure you completed the browser login before returning to the terminal.

Help me troubleshoot my Hermes provider connection.

Launch the dashboard and open the Kanban board

The Hermes web dashboard is your command center for the rest of this project. Everything from creating agent profiles to watching tasks execute happens here.

  • Launch the dashboard by running:
hermes dashboard

What does this command do?

This starts a local web server and opens your browser to http://127.0.0.1:9119. The dashboard runs in the background, so your terminal stays free for other commands.

Your browser should open automatically to the Hermes dashboard. Before you click around, take a guess: how many columns do you think a task workflow board needs to track work from start to finish?

  • Click the Kanban tab in the left navigation.

The board has six columns: triage, todo, ready, running, blocked, and done. Every task your agents handle will flow through these columns from left to right.

Browser didn't open?

Open your browser manually and navigate to http://127.0.0.1:9119. If the page doesn't load, check your terminal for error messages from the hermes dashboard command.

Help me get the Hermes dashboard running.

Your platform is live and ready. Next up, you'll create your first specialist agent and run a task through the board by hand.

Build Your Support Agent and Run Your First Task Manually

Your Hermes environment is locked in. The dashboard is running and the Kanban board is ready for action.

Before you can coordinate a team, you need at least one specialist on the roster. In this step, you'll build your first agent profile and hand-route a task yourself in Manual mode.

Starting in Manual mode lets you feel the friction of routing work by hand. That friction is what makes automated orchestration feel powerful when you switch it on later.

In this step, get ready to:
  • Create a startup-support profile with a targeted routing description.
  • Set the Kanban board to Manual orchestration mode.
  • Create, specify, dispatch, and complete a support task.
Create the startup-support profile with a routing description

Profiles define your agent specialists. Each profile carries a description that the system reads when it decides which agent handles a given task.

  • In the dashboard, click Profiles in the left navigation.
  • Click Create to open the Profile Builder (or navigate to /profiles/new in your browser).
  • Enter startup-support as the profile name.
  • In the description field, paste the following:
Handles customer support tickets, investigates user-reported issues, drafts resolution responses, and writes internal support runbooks.
  • Under the model configuration, select the same provider and model you set up in Step 1.
  • Save the profile.

The Profiles page now shows a startup-support card with the description you entered.

Why do profile descriptions matter?

The Kanban decomposer reads profile descriptions to decide which agent gets which sub-task. A vague description means vague routing.

A targeted, specific description gives the decomposer clear signals about what this agent specializes in. Your words directly control how work gets distributed across your team.

Don't see your profile card?

  • Make sure you completed the full creation flow and saved. If the card is missing, try refreshing the Profiles page.
  • Check that the profile name is exactly startup-support with a hyphen, not a space or underscore.
  • Help me troubleshoot why my profile isn't showing up on the Hermes Profiles page.
Set the Kanban board to Manual orchestration

The Kanban board supports two orchestration modes. Manual mode gives you full control over when tasks get specified, assigned, and dispatched.

  • Switch back to the Kanban tab in the left navigation.
  • At the top of the page, find the Orchestration pill. It displays either Auto (emerald) or Manual (muted gray).
  • Click the pill to set it to Manual mode.

The pill now reads Manual in muted gray. Triage tasks will stay put until you act on them.

What's the difference between Manual and Auto?

In Manual mode, tasks stay wherever you place them. You decide when to specify a task, who to assign it to, and when to dispatch it.

In Auto mode, the dispatcher automatically runs the decomposer on triage tasks, breaking them into sub-tasks and routing them to the best-fit specialist based on profile descriptions. You'll switch to Auto in Step 3.

Create a support task, manually specify it, and watch it execute

Time to put your support agent to work. You'll create a task in the triage column, let the system write a concrete spec, then dispatch it to your agent.

  • Click the + button on the triage column header.
  • Enter Write a support runbook for password reset flow as the task title.
  • Set the Assignee field to startup-support.
  • Create the task.

A new task card appears in the triage column with your title and assignee.

  • On the task card, click the Specify button.

What does Specify do?

Specify rewrites your short title into a full task specification with a goal, approach, and acceptance criteria. After the rewrite completes, the task promotes from triage through todo to ready.

Watch the task card move across the board. It should land in the ready column.

Before you dispatch, what do you think will happen when the support agent picks up this task?

  • Click the Nudge dispatcher button at the top of the board to trigger an immediate dispatch.

What does Nudge dispatcher do?

The dispatcher normally runs on a 60-second tick interval. Clicking Nudge dispatcher fires one tick immediately so you don't have to wait.

The task card moves to the running column. The dispatcher picked up the ready task and assigned a worker to execute it.

  • Click the task card to open the task drawer.
  • Watch the worker progress inside the drawer as the agent executes the task.

When the task finishes, the card moves to the done column.

  • Open the task drawer again by clicking the completed task card in done.
  • Scroll to the Run History section inside the drawer.

You should see a completed run entry showing the outcome, a summary of what the agent produced, and execution metadata. This is your proof that the support agent handled the task end to end.

Task stuck in one column?

  • If the task stays in ready after clicking Nudge dispatcher, wait a few seconds. The dispatch tick may take a moment to process.
  • If the task moves to blocked, open the drawer to read the block reason. A common cause is a missing or misconfigured provider on the startup-support profile.
  • Help me troubleshoot why my Kanban task is stuck and not moving to the next column.

Your support agent just handled its first task from start to finish. Next up, you'll drop in a bigger, cross-functional task and discover what happens when only one specialist is on the roster.

Hit the Wall with a Cross-Functional Task

You now have a working support agent that can handle tasks end-to-end. You manually specified a task, dispatched it, and watched it move from triage all the way to done.

A real startup incident rarely fits one specialist. A password reset crisis might need root cause investigation, personalized customer responses, and a public blog post explaining what happened.

Your roster has a single profile right now. Let's switch the board to automatic mode, throw a multi-specialty task at it, and see what happens.

In this step, get ready to:
  • Switch the Kanban board from Manual to Auto orchestration.
  • Drop a cross-functional task and observe how sub-tasks are routed.
Switch to Auto orchestration and drop a cross-functional task

The Kanban board has two orchestration modes. Auto mode lets the dispatcher automatically decompose triage tasks and route sub-tasks to specialist profiles based on their descriptions.

  • On the Kanban board, find the Orchestration pill at the top of the page. It currently shows Manual in muted gray.
  • Click the pill to switch to Auto mode.

The pill turns emerald, confirming the board is now in Auto orchestration mode.

What changes in Auto mode?

In Manual mode, you controlled every stage yourself. You specified each task, chose its assignee, and nudged the dispatcher by hand.

In Auto mode, the dispatcher automatically runs a decomposer on every triage task. The decomposer reads your profile roster and their descriptions, then fans the task into specialist sub-tasks assigned to the best-fit profile.

Your board is set to Auto. Now give the decomposer a task that deliberately spans support work and content work.

  • Click the + button on the triage column header.
  • In the Title field, paste the following task description:
Handle the wave of password reset complaints: investigate the root cause, draft individual responses to affected users, and publish a blog post explaining what happened and what we fixed
  • Leave the Assignee field blank. The decomposer will assign sub-tasks based on profile descriptions.
  • Leave all other fields at their defaults and create the task.

A new task card appears in the triage column with no assignee.

Task card not appearing?

Make sure you clicked the + button on the triage column header specifically, not on another column.

Check that the Title field was not empty when you created the task. A blank title prevents the card from being created.

help me troubleshoot why my task is not appearing on the Kanban board

Watch the decomposer route everything to one agent

In Auto mode, the dispatcher automatically runs the decomposer on your triage task. The decomposer reads every profile description in your roster and fans the task into specialist sub-tasks.

Before you look at the results, think about this. Your roster has one profile (startup-support), but the task asks for investigation, customer responses, AND a blog post. What do you expect will happen to the blog post sub-task?

  • Watch the Kanban board for new sub-task cards to appear. The decomposer creates child tasks from your cross-functional task and assigns each one.
  • If sub-tasks have not appeared after about a minute, click the Nudge dispatcher button at the top of the board to trigger an immediate dispatch tick.

Why might I need to nudge?

The dispatcher runs on a 60-second interval by default. If you just created the task between ticks, nothing happens until the next cycle. The Nudge dispatcher button forces one dispatch tick immediately.

  • Confirm that Lanes by profile is toggled on in the In Progress column. It should be on by default.
  • Look at the lanes. How many profile lanes do you see?

Every sub-task is assigned to startup-support. Investigation, customer responses, and even the blog post all sit in a single lane.

This is the routing limitation. With only one profile in your roster, the decomposer has nowhere else to send content work. Everything stacks in one lane because startup-support is the only option.

Why did everything go to one agent?

The decomposer reads every profile description in your roster to decide where to route each sub-task. Right now, startup-support is the only profile. Its description covers customer support, issue investigation, and resolution responses.

When the decomposer encounters a blog post sub-task, it has no content-specialist profile to match against. It falls back to the only available option. Your profile descriptions are the routing levers, and right now there is only one lever to pull.

Sub-tasks not appearing at all?

Check that the Orchestration pill at the top of the page shows Auto in emerald. If it still shows Manual, the decomposer will not run automatically.

Make sure your original task is sitting in the triage column. Tasks in other columns are not picked up by the decomposer.

Try clicking Nudge dispatcher one more time. The dispatcher tick may not have fired yet.

help me debug why the Kanban decomposer is not creating sub-tasks from my triage task

You have seen the wall. One agent doing everything is not a Startup OS. In the next step, you will add a content specialist to the roster and watch the same kind of task split across two lanes.

Add the Content Specialist and Watch Tasks Split

In the last step, you saw the limitation firsthand. Every sub-task from your cross-functional task landed in a single lane because the decomposer only had one profile to choose from.

Now you will fix that by adding a second specialist with a content-focused description. With two profiles in the roster, the decomposer has a real routing choice, and the Lanes by profile view will prove the split is working.

In this step, get ready to:
  • Create the startup-content profile with a content-focused routing description.
  • Drop a cross-functional task and watch sub-tasks split across two specialist lanes.
  • Inspect routing decisions in the task drawer to understand how profile descriptions drive assignment.
Create the startup-content profile with a routing description

The decomposer reads every profile's description to decide who gets what. A second profile with a content-focused description gives it a genuine choice instead of a single fallback.

  • In the dashboard, click Profiles in the left navigation.
  • Click Create to open the Profile Builder.
  • Enter startup-content as the profile name.
  • Paste the following into the description field:
Writes blog posts, drafts marketing copy, creates customer-facing documentation, and produces internal knowledge base articles.
  • Configure the model and provider to match your startup-support profile.
  • Save the new profile.

The Profiles page now shows two profile cards: startup-support and startup-content. Both display their routing descriptions underneath the name.

Why do descriptions matter so much?

The decomposer treats profile descriptions as its routing map. When a triage task arrives, it reads every description in the roster and assigns each sub-task to the profile whose description best matches the work.

The more specific your descriptions are, the sharper the routing becomes. Vague descriptions lead to vague assignments.

Don't see two profile cards?

Make sure you saved the profile after filling in all the fields. If the card is missing, try refreshing the Profiles page.

Check that the model and provider are configured on the new profile. A profile without a valid provider cannot execute tasks.

Help me troubleshoot my profile creation

Drop a cross-functional task and watch routing split

With two specialists in the roster, the decomposer now has a real choice. Time to test it with a task that spans both support and content work.

  • Switch back to the Kanban tab in the left navigation.
  • Confirm the Orchestration pill at the top of the page still shows Auto (emerald).
  • Click the + button on the triage column header to create a new task.
  • Set the title to the following:
Handle the wave of signup failures: investigate what broke, respond to users who filed tickets, and write a post-mortem blog post for our company blog
  • Leave the assignee blank. The decomposer assigns sub-tasks based on profile descriptions.

Before you submit this task, think about what you expect to see. Will the decomposer route everything to startup-support again, or will it split the work across both profiles?

  • Submit the task.
  • Watch the triage column. In Auto mode, the dispatcher runs the decomposer, which reads both profile descriptions and fans the task into child sub-tasks.
  • If the dispatch tick has not fired yet, click the Nudge dispatcher button at the top of the board to trigger it immediately.

The Lanes by profile view now shows two separate lanes in the In Progress column. Investigation and response sub-tasks sit in the startup-support lane. Blog and content sub-tasks sit in the startup-content lane.

What just happened?

The decomposer read the task title, then compared it against each profile's description. It matched investigation and user-response work to startup-support and blog-writing work to startup-content.

Your profile descriptions are the routing levers. Change a description, and you change how work gets distributed.

All sub-tasks still landing in one lane?

Check that the Orchestration pill is set to Auto (emerald). If it is still on Manual, the decomposer does not run automatically.

Verify that your startup-content profile has a description set. A profile with an empty description gives the decomposer nothing to match against.

Help me debug my task routing

Inspect the routing decisions

The two-lane view proves distribution is working. Now open the task drawers to see exactly how the decomposer made its routing decisions.

  • Click on one of the child tasks in the startup-support lane.
  • The task drawer opens, showing the assignee and the reasoning behind the routing decision.
  • Close the drawer and click on a child task in the startup-content lane.
  • Compare the assignee and routing reasoning to the support task you just inspected.
  • Click on the parent task card. It stays alive as the orchestration parent, waiting for all children to complete before the orchestrator judges overall completion.

What is the Startup OS you just built?

This is your Startup OS: a single dashboard, two specialist agents, coordinated by profile descriptions and a shared Kanban board. Drop a business task in, and the system decomposes, routes, and executes it across your team.

Adding a third or fourth specialist is the same process. Create a profile, write a targeted description, and the decomposer automatically includes it in routing decisions.

Secret mission

Wire Telegram Notifications for Your Startup OS

Your Startup OS is humming along, but right now you have to keep the dashboard open to know when tasks finish. What if your phone buzzed every time a task completed or got blocked? Wire a Telegram bot to your Hermes gateway and turn your dashboard into a mobile-ready command center.

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. None of these resources incur ongoing costs on their own. LLM API usage depends on your provider (Nous Portal free tier, or your own API key credits).

Resources you used:

  • Two Hermes profiles (startup-support and startup-content) stored at ~/.hermes/profiles/.
  • Kanban board with task history stored at ~/.hermes/kanban.db.
  • If you completed the Secret Mission: a Telegram bot and gateway configuration in ~/.hermes/.env.

Keep everything running

No action needed. Choose this if you are still actively building or experimenting with your Startup OS.

  • Your profiles, Kanban state, and gateway configuration all persist on disk.
  • Agents only consume LLM API credits when tasks are dispatched. No tasks means no cost.
  • Hermes Agent itself remains installed on your machine. There is no documented uninstall path, but it takes minimal disk space.

Pause - I'll come back to this later

Shut down running processes to free up your terminal. Your profiles and Kanban state stay on disk so you can resume anytime.

  • Stop the gateway by running:
  • Stop the dashboard by pressing Ctrl+C in the terminal where you launched it.
hermes gateway stop

Your profiles, Kanban database, and gateway configuration all remain on disk. Run hermes dashboard and hermes gateway again when you are ready to resume.

Delete - I don't want to use this again

Remove all project resources and start fresh. This deletes your profiles, task history, and Secret Mission configuration.

  • Stop the gateway and dashboard first. Stop the gateway by running:
hermes gateway stop
  • Stop the dashboard by pressing Ctrl+C in its terminal.
  • Delete the startup-support profile by running:
hermes profile delete startup-support
  • Delete the startup-content profile by running:
hermes profile delete startup-content
  • Remove the Kanban database by running:
rm ~/.hermes/kanban.db
  • If you completed the Secret Mission, open ~/.hermes/.env in a text editor and remove the lines for TELEGRAM_BOT_TOKEN and TELEGRAM_ALLOWED_USERS.
  • Delete your Telegram bot by opening Telegram, messaging @BotFather, and sending /deletebot. Select the bot you created for this project when prompted.

Nice Work!

Nice Work!

You just built a multi-agent Startup OS from scratch! Two specialist AI agents now coordinate through a shared Kanban board, auto-decomposing cross-functional business tasks and routing them to the right specialist.

You've learned how to:

  • Built two specialist agent profiles (startup-support and startup-content) with targeted routing descriptions that directly control how the decomposer assigns work.
  • Experienced the difference between Manual and Auto orchestration firsthand, from hand-routing a single task to watching a cross-functional task auto-decompose and fan out across specialists.
  • Witnessed the single-agent routing limitation visually through the Lanes by profile view, then fixed it by adding a second specialist and watching tasks split across two lanes on the Hermes dashboard.
  • Secret Mission: Wired a Telegram bot for push notifications, turning the dashboard into a mobile-ready ops command center.

Ready to quiz yourself?