---
name: openbash
description: A jailed bash shell over this account's connected drives and its enabled programs — run it when a task needs primary data (company filings, clinical trials, customs and shipment records, rental comps, flight movements, keyword rank, DNS and mail authentication, npm and GitHub stats, OCR and document text) or needs to read the account's own Dropbox, Google Drive, S3, SharePoint or a connected SQL database. One command line in, one answer out; programs compose with pipes, so a whole pipeline is a single call. Reach for it before writing a scraper or asking for an API key.
---

# openbash

One shell. Every program in it is a command on a path, not an endpoint, which
is what lets three of them compose in a single request.

## The one call

    POST https://openbash.ai/api/v1/exec
    Authorization: Bearer $OPENBASH_KEY
    {"command": "help"}

Or the `bash` tool, if this account's MCP server is connected — same shell,
same programs, same key.

**A pipeline is ONE call.** Two programs joined by a pipe is one request, not
two. Compose with pipes, redirection and the ordinary shell tools rather than
making a call per step and joining the results yourself — that is the whole
reason these are commands on a path instead of endpoints.

## help is the authority, not the catalog

Which programs exist is decided **per account**. The public catalog lists what
the product has; `help` lists what this key can actually run, and nothing it
cannot. Run it first when you do not know what is available.

    help                 what this key carries
    <program> --help     the definition of one program

## Read the output contract before trusting a number

- JSON on stdout, one object per line, so the shell's own filters compose
  across programs without a schema for the join.
- Every record carries `source` (what it was read from) and `as_of` (when that
  source was current). **`as_of` is NOT the time you ran the command** — quote it
  when you cite the figure.
- A derived figure is marked `"derived": true` and carries its inputs. A figure
  you cannot check is a figure you should not use.

## Exit codes, and the two that get confused

    0   results
    1   usage error — the flag or argument was wrong
    2   NOT ENTITLED — the program exists, this key does not have it
    3   NO RESULTS — the query was valid and matched nothing
    4   upstream data failure — the source could not be read

**2 and 3 are different answers.** 3 means there is nothing there; 2 means you
were not allowed to look. Reporting "no results" for a 2 is reporting a
permission problem as a fact about the world.

**Absence is a value.** A program that finds nothing says so and exits 3. It
does not return an empty object that reads as zero.

## Errors are the documentation

An unsupported flag names the flags that are supported; an unknown command
names the near misses. Try something, read the failure, adapt — that path is
designed to work. Do not go and re-read the catalog when the error in front of
you already names the fix.

## The drives

`/tmp` is writable and is the only writable place. Everything else the account
has connected — Dropbox, Google Drive, S3, SharePoint, a SQL database — is
mounted read-only under its own name. A mount that is switched off is **not
there**: the directory is never created, so nothing in the session can read it
whatever it was asked to do.

## Three doors

    HTTP   POST https://openbash.ai/api/v1/exec   {"command": "..."}
    MCP    https://openbash.ai/api/mcp            add it as a server; the bash tool is this shell
    SSH    ssh $OPENBASH_KEY@openbash.ai '<command>'

Three ways into one account-scoped shell, not three services. The same programs
are on the path and the same key decides which ones.

## Keeping up

    GET https://openbash.ai/api/v1/changelog     what was added and when, newest first

A program's date is when it first appeared, not when the catalog last synced,
so an entry that is new to you is genuinely new.
