# Call Cady from the shell

Every tool Cady serves to an AI app is also a shell command, so a script can do what an agent can.

The CLI is not released yet; see [Install the CLI](https://cadyworks.com/docs/install.md).

```sh
cady records read company:setup
```

This reads one record by its reference and prints the result as JSON on stdout. `cady --help` lists every command group, such as `work`, `crm`, `files`, `decisions` and `tools`.

## Arguments

Pass a tool’s fields as `--field value`, or the whole input as JSON with `--input file.json` (`-` reads stdin). Each command’s `--help` names the tool it calls and whether it only reads:

```sh
cady work read --help
```

```text
usage: cady work read [--input FILE|-] [--<field> VALUE ...]
{"door": "work_read", "call": "work_read", "family": "work", "effect": "read", "modes": null}
```

## Find a tool and its exact fields

```sh
cady tools find --q "outreach"
cady local tools describe work_read
```

## Call any tool by name

```sh
cady local call work_read --input args.json
```

`--raw` prints the complete result envelope instead of the result alone.

## What can go wrong

- A refused call prints the refusal and why. A CLI call follows the same [approvals](https://cadyworks.com/docs/ai-app.md) as an agent’s.
- Invalid input is rejected before anything is sent.
- A call that could not be verified may have run. Check what was saved before you retry a write.
- Each case has its own exit code: see [Troubleshooting and help](https://cadyworks.com/docs/troubleshooting.md).

Next: [Run many calls: cady local batch](https://cadyworks.com/docs/batch.md)
