Install the Inline CLI and have Claude/Codex interact with it.
brew tap inline-chat/homebrew-inline
brew install --cask inlinecurl -fsSL https://inline.chat/cli/install.sh | shSupports macOS and Linux (x86_64/aarch64, glibc and musl). Set
INLINE_INSTALL_DIR to choose a custom install directory.
Use the skill markdown at cli/skill/SKILL.md. Ask your agent to "create a skill"
and paste the markdown.
inline logininline login is an interactive terminal flow. For agents, CI, or other
non-interactive environments, pass an existing token with INLINE_TOKEN:
INLINE_TOKEN=... inline me --jsoninline me verifies the current auth state. inline logout clears the saved
local token. It cannot unset a token provided by the parent environment, so
commands remain authenticated while INLINE_TOKEN is set.
Use --json for automation and --compact for pipelines:
inline messages list --chat-id 123 --json --compactUse batch selectors when an agent already knows the relevant message IDs:
inline messages get --chat-id 123 --message-id 91,92,100 --json
inline messages download --chat-id 123 --message-id 80-100 --dir ./media
inline messages download --chat-id 123 --from-msg-id 600 --limit 50 --dir ./mediaSelectors support single IDs (91), comma lists (91,92,100), ranges
(91-100), and repeated --message-id flags. Batch downloads skip messages
without media, report skipped/missing/failed counts, and prefix local filenames
with the message date, MSG ID, media type, and media ID. For contiguous
windows, use --from-msg-id ID --limit N with export/transcript/download.
For reviewable conversation bundles, prefer transcript/export:
inline transcript --chat-id 123 --limit 500 --download-media --output ./feedback-bundle
inline transcript --chat-id 123 --limit 500 --download-media --media-dir ./feedback-media --output feedback.md
inline transcript --chat-id 123 --from-msg-id 600 --limit 50 --download-media --output ./feedback-bundle
inline messages export --chat-id 123 --limit 500 --format json --output feedback.json
inline messages export --chat-id 123 --limit 500 --format jsonl --output feedback.jsonl
inline messages export --chat-id 123 --limit 500 --format csv --output feedback.csvinline transcript is a shortcut for inline messages transcript, a markdown
export optimized for reading: sender names, timestamps, replies, forwards, media
links, file links, and hidden message IDs. Markdown uses CDN URLs by default;
pass --download-media to download photos/files in one pass and rewrite
transcript links to local paths. Messages without media are skipped during media
download. If --output is a directory, or a no-extension path with
--download-media, the CLI writes transcript.md/transcript.<format> there
and defaults downloaded media to a media/ folder inside it.
--translate works in JSON output for messages list, messages search, the
top-level search shortcut, and messages get:
inline messages get --chat-id 123 --message-id 91,92,100 --translate en --jsonList commands can pre-filter JSON payloads before printing:
inline chats list --json --filter "launch"
inline users list --json --filter "sam"
inline bots list --json --filter "deploy"
inline messages list --chat-id 123 --has-media --json --compact
inline messages list --chat-id 123 --empty-text --forwardedFor advanced ad hoc analysis, jq is still useful on compact JSON:
inline messages list --chat-id 123 --limit 500 --json --compact | jq '.messages | length'
inline messages list --chat-id 123 --limit 500 --has-media --json --compact | jq -r '.messages[].id'For message content from standard input, pipe or redirect the input. --stdin
fails fast when stdin is an interactive terminal:
echo "hello" | inline messages send --chat-id 123 --stdinHuman tables adapt to terminal width through COLUMNS. Set NO_COLOR=1 to
disable color, or CLICOLOR_FORCE=1 to force color in a non-TTY. Non-JSON
runtime errors print a short human report with an error code, and may include
status, API error, response preview, hint, and examples.
inline chats list gives chat titles extra room and wraps long titles onto a
second table row before truncating, so filtered chat searches stay readable.
inline doctor --json reports system, client identity, config, path, and auth
state diagnostics. Client identity includes the CLI client type/version,
user-agent, OS version, and metadata header names sent to the API/realtime
server.
Before committing CLI changes, run the local pre-commit check:
bun run --cwd cli precommitThat uses the pinned Rust toolchain in cli/rust-toolchain.toml, runs
cargo fmt, applies machine-fixable clippy suggestions, runs cargo fmt
again, then runs the same bun run --cwd cli ci command used by GitHub
Actions. CI keeps rustfmt as the formatting authority; clippy still denies
warnings, but allows format-argument style churn such as inlined format args.
The CLI is still early and may have bugs.