> Documentation index: https://docs.kiste.run/llms.txt, a list of every page in this documentation.

# kiste exec

> Execute a command and return its exact stdout, stderr and exit code.

```text
kiste exec [OPTIONS] [NAME] -- <COMMAND>...
```

| Argument | Description |
| --- | --- |
| `[NAME]` | Kiste name, `current`, or `self`. Omit to use the current selection. |
| `-- COMMAND...` | Remote command. Prefix it with `--`. |

| Option | Description |
| --- | --- |
| `--id ID` | Stable command UUID, enabling cancellation from another agent. |
| `--cwd DIR` | Working directory inside the Kiste. |
| `--env KEY=VALUE`, `-e KEY=VALUE` | Environment variable in KEY=VALUE form. Repeat as needed. Repeatable. |

**Examples**

```text
kiste exec -- git status --short
kiste exec current --cwd /workspace -- npm test
kiste exec build -e CI=true -- sh -c 'make test'
kiste exec build --id 550e8400-e29b-41d4-a716-446655440000 -- npm test
kiste exec build --output ndjson -- make test
```

ARGV is passed exactly and standard input is not forwarded; pipe input with `kiste ssh NAME -- CMD < file`. A requested login shell such as `sh -lc` runs the image's login profile; use `sh -c` when stdout must contain only command output.

Global options such as `--json` work with every command; see [the CLI overview](https://docs.kiste.run/cli.md#global-options).

## Related topics

- [Overview](https://docs.kiste.run/cli.md)
- [Output modes and exit codes](https://docs.kiste.run/cli/output.md)
- [Configuration and environment](https://docs.kiste.run/cli/configuration.md)
- [kiste login](https://docs.kiste.run/cli/login.md)
- [kiste logout](https://docs.kiste.run/cli/logout.md)
- [kiste whoami](https://docs.kiste.run/cli/whoami.md)
- [kiste account](https://docs.kiste.run/cli/account.md)
- [kiste new](https://docs.kiste.run/cli/new.md)
- [kiste credentials](https://docs.kiste.run/cli/credentials.md)
- [kiste ssh](https://docs.kiste.run/cli/ssh.md)
- [kiste ssh-config](https://docs.kiste.run/cli/ssh-config.md)
- [kiste prompt](https://docs.kiste.run/cli/prompt.md)
- [kiste cancel](https://docs.kiste.run/cli/cancel.md)
- [kiste interrupt](https://docs.kiste.run/cli/interrupt.md)
- [kiste command](https://docs.kiste.run/cli/command.md)
- [kiste commands](https://docs.kiste.run/cli/commands.md)
- [kiste desktop](https://docs.kiste.run/cli/desktop.md)
- [kiste list](https://docs.kiste.run/cli/list.md)
- [kiste status](https://docs.kiste.run/cli/status.md)
- [kiste current](https://docs.kiste.run/cli/current.md)
- [kiste watch](https://docs.kiste.run/cli/watch.md)
- [kiste events](https://docs.kiste.run/cli/events.md)
- [kiste stop](https://docs.kiste.run/cli/stop.md)
- [kiste restart](https://docs.kiste.run/cli/restart.md)
- [kiste rename](https://docs.kiste.run/cli/rename.md)
- [kiste update](https://docs.kiste.run/cli/update.md)
- [kiste resume](https://docs.kiste.run/cli/resume.md)
- [kiste extend](https://docs.kiste.run/cli/extend.md)
- [kiste fork](https://docs.kiste.run/cli/fork.md)
- [kiste scp](https://docs.kiste.run/cli/scp.md)
- [kiste forward](https://docs.kiste.run/cli/forward.md)
- [kiste delete](https://docs.kiste.run/cli/delete.md)
- [kiste logs](https://docs.kiste.run/cli/logs.md)
- [kiste image](https://docs.kiste.run/cli/image.md)
- [kiste snapshot](https://docs.kiste.run/cli/snapshot.md)
- [kiste environment](https://docs.kiste.run/cli/environment.md)
- [kiste stream](https://docs.kiste.run/cli/stream.md)
- [kiste auth](https://docs.kiste.run/cli/auth.md)
- [kiste devices](https://docs.kiste.run/cli/devices.md)
- [kiste config](https://docs.kiste.run/cli/config.md)
- [kiste completions](https://docs.kiste.run/cli/completions.md)
- [kiste self-update](https://docs.kiste.run/cli/self-update.md)
- [kiste limits](https://docs.kiste.run/cli/limits.md)
- [kiste doctor](https://docs.kiste.run/cli/doctor.md)
- Previous: [kiste ssh-config](https://docs.kiste.run/cli/ssh-config.md)
- Next: [kiste prompt](https://docs.kiste.run/cli/prompt.md)
