---
title: "The gtable CLI"
description: "Coming soon. A command for every API operation, JSON output for scripts, exit codes by kind of failure. Not published yet."
canonical: "https://gtable.app/docs/cli/overview"
updated: "2026-10-05"
---

# The gtable CLI

> **Warning: Coming soon**
>
> The CLI is not published yet, so there is nothing to install today. Until it is, use the
> [REST API](/docs/api/overview) from a script, or [connect an agent](/docs/agents/setup). This
> page shows what it will look like, so you can plan around it.

## What it will look like

Every operation of both APIs is a command, named after it: `records.list` is
`gtable records list`. Path parameters come first, in order; everything else is a flag, or
`--body` with the whole request as JSON. A new endpoint is a new command the day it ships, with
its help text already correct.

```bash
gtable records list tbl_8fj3kq2wmv5d --view-id viw_e4ks9mz2bh7w
gtable records get tbl_8fj3kq2wmv5d rec_4nqw8e2hzk7s
gtable records create tbl_8fj3kq2wmv5d --records '[{"Name":"New record","Amount":1000}]'
gtable files upload tbl_8fj3kq2wmv5d --file ./contract.pdf --record-id rec_4nqw8e2hzk7s
gtable rules simulate app_5mg8rw2kx4tn --groups grp_v6nh3ta8rk2e --table-id tbl_8fj3kq2wmv5d --op read
```

Each page of the [App API](/docs/app-api/records/list) and
[Builder API](/docs/builder-api/apps/list) references names its command.

## Signing in

Three ways, one per situation:

```bash
gtable auth login                                            # the Studio, in your browser
gtable auth login --target https://your-suite.gtable.app/your-app   # one app
gtable auth login --device                                   # a machine with no browser
```

In CI, skip the login: set `GTABLE_TOKEN` to one of your keys and `GTABLE_URL` to the Studio or
the app it is for. On a desktop, tokens are kept in the system keychain.

## Made for scripts and agents

- **Output is JSON whenever it is not going to a terminal**, so nobody has to remember `--json`.
- **The exit code says what kind of failure it was**: 2 usage, 3 authentication, 4 not found,
  5 rate limited, 6 conflict, 7 plan. The API's error envelope goes to stderr.
- **Deleting asks for the name**, as the Studio does:
  `gtable tables delete app_5mg8rw2kx4tn tbl_x2c7nw4hq9fk --confirm "Old deals"`.
- `gtable mcp` will bridge a local stdio client to the MCP server, and `gtable doctor` will say
  whether a problem is your setup, the network or gtable.

## More than MCP, by design

Two things will be possible from the CLI and not from MCP: uploading files, because a terminal
can send bytes and a model cannot, and walking every page of a list, because a script can loop.
Everything else is at parity by construction.
