Fountain

Fountain runs an agent on a cloud sandbox, and gives you a conversation with it. You send a prompt. You read the reply. Fountain operates the sandbox, and you do not.

It is an API first. Your app reaches it over a protocol you already speak, or through an SDK. The person who uses your app need never learn that an agent is there.

The whole product fits in one request. It gets a reply from an agent in its own sandbox. Your API key and your agent's id are on your start page, and that page puts both into this request for you.

curl -sS -X POST "$FOUNTAIN_BASE_URL/api/conversations" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"agent_id\": \"$FOUNTAIN_AGENT_ID\", \"prompt\": \"Which operating system and working directory are you in? Answer in one sentence.\"}"

The reply arrives on that same page. The quickstart is those three steps in full.

The problem

An agent is only useful with a sandbox behind it. That sandbox is the part nobody set out to build.

The agent needs a filesystem, a shell, a package manager and a network. It needs real credentials, and those must never reach the prompt or the transcript. It needs to remember the last time, so the second message costs a sentence and not an explanation of the first.

The sandbox also needs an owner. Something must start it, park it while nobody speaks, and wake it when somebody does. One account must never see another's work. A sandbox that nobody stops costs money for as long as it runs.

You can build all of that. It is weeks of infrastructure, and it is not your product.

What Fountain does

Fountain keeps the sandbox, and gives you the conversation.

Send a prompt. A sandbox starts, with whatever packages, files and secrets you configured, and runs the agent. It parks when the talk stops, and it costs little while parked. The next message wakes it, and the agent's work is still there.

Your secrets arrive at spawn as environment variables, so they never enter the prompt or the model's context. Fountain scrubs them out of the output it stores.

Fountain is multi-tenant. Each account reaches its own agents and its own sandboxes, because Fountain scopes each query to the caller. Your own users therefore stay apart, and you write no code for it.

Reach it the way you already work.

What you build on top is yours. It can be a chat client whose contacts are bots, or a tool that makes an engineer faster. Your own user need not know which. Why a bot needs more than a chat UI makes that case in full.

Start here

  • Run your first agent is a key and one request. It needs no repository, no GitHub token and no install. Start here if Fountain is new to you.
  • The guided tour builds an agent that clones a repo, changes it and opens a pull request. A second turn then lands a revision on the same PR. The tour is about forty lines. It is the step after the quickstart.
  • The four primitives explains the data model, and why Fountain divides it four ways.

Understand it

Build with it

Run it

Look it up