# Native CLI Commands

## Purpose

Use this page when you want to understand how `clisbot` coexists with native command or skill systems from the underlying coding CLI.

Today this matters most for:

- Codex
- Claude Code
- Gemini CLI

Related CLI-specific notes:

- [Codex CLI Guide](codex-cli.md)
- [Claude CLI Guide](claude-cli.md)
- [Gemini CLI Guide](gemini-cli.md)

## Core Rule

`clisbot` reserves a small set of chat-surface control commands such as:

- `/start`
- `/help`
- `/status`
- `/whoami`
- `/transcript`
- `/stop`
- `/new`
- `/nudge`
- `/followup ...`
- `/streaming ...`
- `/responsemode ...`
- `/additionalmessagemode ...`
- `/queue ...`
- `/steer ...`
- `/loop ...`
- `/bash ...`

Anything starting with `/` that is **not** one of those reserved `clisbot` commands is forwarded to the underlying agent CLI unchanged.

That means `clisbot` already preserves the native command surface instead of trying to reinterpret everything itself.

## What This Means In Practice

### Claude Code

Claude Code users often invoke native commands or skills directly with `/...`.

Examples:

- `/review`
- `/memory`
- `/agents`
- `/code-review`

In `clisbot` chat surfaces:

- if the command is reserved by `clisbot`, `clisbot` handles it
- otherwise the raw command is forwarded to Claude unchanged

So if your Claude setup already knows a native command or skill such as `/code-review`, you can keep using it through Slack or Telegram with `clisbot`.

Recommended invocation:

- Telegram or any chat surface that lets the message through unchanged:
  - use `/code-review`
- Slack, where a leading `/...` can be intercepted by Slack-native slash-command handling:
  - use a leading space, for example ` /code-review`
- plain-language prompting also works when that matches your Claude habit:
  - `Invoke /code-review`

Example:

```text
/code-review
```

Loop example:

```text
/loop 3 /code-review
```

Current meaning:

- `clisbot` handles `/loop`
- the loop body stays `/code-review`
- each iteration forwards `/code-review` to Claude as native input

Important warning:

- do **not** use `\code-review` or `::code-review` for native Claude commands
- `\` and `::` are `clisbot` shortcut prefixes, not a translation layer from `clisbot` syntax into Claude slash syntax
- unknown inputs such as `\code-review` are forwarded with that same text, so Claude would receive `\code-review`, not `/code-review`

### Codex

Codex users often rely on:

- native slash commands such as `/model` or `/review`
- skill invocation by name in normal prompt text
- short patterns such as `$gog` when their Codex setup treats that as a fast skill summon

In `clisbot` chat surfaces:

- reserved `clisbot` commands are still handled by `clisbot`
- any non-reserved native slash command is forwarded unchanged
- any non-command text is also forwarded unchanged

So if your Codex workflow already uses things like:

- `/review`
- `$gog`
- `$code-review`
- `use gog to check my calendar`

`clisbot` does not strip or rewrite those inputs before sending them to Codex.

Recommended invocation for Codex:

- if your Codex setup already uses a `$...` summon such as `$code-review` or `$gog`, that is usually the cleanest chat-surface form
- this avoids Slack slash-command ambiguity because the message does not start with `/`
- if you use a native Codex slash command such as `/review`, the same Slack leading-space rule still applies there

Important distinction:

- `clisbot` does not implement Codex skill resolution itself
- it simply preserves the input so Codex can resolve native skills or prompts the same way it normally would

### Gemini CLI

The same pass-through rule applies architecturally to Gemini:

- reserved `clisbot` commands are handled by `clisbot`
- other `/...` commands are forwarded unchanged

However:

- Gemini native-command behavior has not yet been validated as deeply in routed Slack or Telegram usage as Codex and Claude

So current operator guidance is:

- treat Gemini native command pass-through as the intended model
- but validate your exact Gemini command or extension flow in your own route before depending on it heavily

## Force A `clisbot` Command

If you want to avoid ambiguity and explicitly call a `clisbot` control command, use the extra control prefixes:

- `::status`
- `\\status`
- `::transcript`
- `\\transcript`

These prefixes belong to `clisbot`, not to the underlying coding CLI.

This is the safest escape hatch when:

- native CLI commands overlap with `clisbot` names
- Slack native slash handling is getting in the way
- you want a guaranteed `clisbot` command even in a heavily customized native CLI environment

Do not use these prefixes for native Claude or Gemini slash commands unless the underlying CLI itself expects that exact syntax.

## Slack Note

Slack itself may intercept slash-style messages before `clisbot` sees them.

If that happens, send a leading space:

```text
 /review
```

or use a `clisbot` shortcut prefix:

```text
::status
```

## Limits

Current behavior is intentionally simple:

- `clisbot` does not autocomplete native CLI commands
- `clisbot` does not scan your native CLI skill folders and render a merged command menu yet
- `clisbot` does not rewrite one vendor's native syntax into another vendor's syntax

It simply preserves native command text when that text is not one of `clisbot`'s own reserved commands.

## Mental Model

Use this rule of thumb:

- if you are asking `clisbot` to control the chat surface or runtime, use a `clisbot` command
- if you are asking Codex, Claude, or Gemini to do agent work with its own native command or skill system, `clisbot` will usually just forward that text unchanged

That is why existing Codex or Claude habits can continue to work naturally in chat surfaces behind `clisbot`.
