Any agent. Any harness. Any channel.

Build an agent once. Choose which AI runs it. Then just talk to it in Slack, or on the web.

$curl -fsSL https://flooagents.com/install.sh | sh
  • Free and open source
  • Works with Claude or Codex
  • Lives in Slack and the web
  • Host it yourself

How it works

Ask in Slack. Get the work done.

Your agent sits in the channel where the problem comes up. Ask it there, and it replies in the same thread, so nobody has to learn a new tool.

Search Team MSR

eng-releases9
  • Messages
  • Files and links
  • Priya Raman9:41 AM

    @floo the staging deploy is failing on migrations again. Can you find out why?

  • Flooapp9:41 AM

    On it. Reading the deploy log and the last few migrations.

  • Flooapp9:43 AM

    Found it. 0042_add_agent_index assumes agents.harness_id, which 0039 renamed to harness. Guarded the migration and opened a PR.

    FlooAgents

    #218 fix(db): guard 0042 migration against the renamed harness column

    1 file changed · +12 −3

Message #eng-releases

Any AI

Change the AI. Keep the agent.

Every agent names the AI it runs on, Claude or Codex, with the model and settings you pick. Change that one line and the agent itself stays exactly as it was.

Slack and the web

how you reach it

Tag an agent in a Slack thread, or open a chat in the web app. Each way in is separate from everything below it.

Floo

what we build

Decides what runs, when, with what access, and where the results go. It owns the session, the workspace and the run history.

The AI loop

Claude or Codex

Runs the agent. One server holds both loops, and Floo picks one by the name in the agent's config. An admin controls which loops are switched on and which models each one offers.

The sandbox

where the work happens

Gives the agent a filesystem, a shell and network access to work in. It sits behind a fixed interface, so what runs above it does not depend on how the sandbox is provided.

The top two are Floo. The bottom two are pieces you can replace.

Tool gateway

Every tool behind one door.

Connect Gmail, GitHub or your own APIs, as many as you want. Your agent only reaches for a tool when it actually needs one, and every key stays in one place.

Connect a hundred tools. Your agent's list stays the same length.

However many services you connect, the gateway adds the same two things: one to search what this agent is allowed to use, one to run a single tool. Descriptions and input forms only load when the agent asks for them, so a bigger toolbox never crowds out the thing it is actually trying to do.

Two ways it uses them

  • Direct

    One lookup. The agent runs a tool and replies. If the result comes back too big, the gateway turns it down and tells the agent to use a script, which is what keeps huge payloads out of the conversation.

  • Script

    The agent writes a small program in its own workspace and runs it, calling as many tools as the job needs and printing only what matters. The raw data stays in the workspace and never reaches the model.

A script that works becomes a skill.

Say the job is your cost per install: pull the ad spend, match it to installs, do the maths. Once the agent gets that right, the script is saved as a skill and attached to any agent that needs it.

  • Connect anything, once

    Your own internal services, an MCP server, or a shared toolkit. Whatever you connect lands in the same list, named the same way, and your agent treats them all alike.

  • Permissions per person

    Each agent has a list of tools it may touch, and each person has their own. A call has to clear both lists, every single time, including calls made from inside a script.

  • Keys never leave the gateway

    An admin connects a service once and the whole team works through it. Keys are stored encrypted and added to the call as it goes out. They never reach the agent's workspace, a tool's output, or the pass the agent was given for the job.

  • Every call on the record

    Each call is written down against the run that made it: who asked, which tool, what they asked it for, how long it took, whether it worked.