# atlas run cannot read interactive input: how to fix INTERACTIVE_INPUT_ERROR

> Fix INTERACTIVE_INPUT_ERROR by piping the prompt into `atlas run` on stdin or passing it as an argument, instead of relying on a TTY.

The INTERACTIVE_INPUT_ERROR from `atlas run` means Atlas tried to read interactive input from a terminal that is not there, and the fix is to pipe the prompt into `atlas run` on stdin or pass it as an argument instead of relying on a TTY. In CI, never let Atlas prompt: supply the model and prompt explicitly. Related failures are: Failed to create session, and: runtime closed.

## Symptom

Running Atlas non-interactively fails with the INTERACTIVE_INPUT_ERROR message, or with: Failed to create session, or: runtime closed. The command exits without doing any work.

## Cause

Atlas cli/cmd/run wraps stdin errors in INTERACTIVE_INPUT_ERROR, fails when a session cannot be created, and rejects any work submitted after the runtime lifecycle has been closed. Non-interactive environments such as CI have no TTY for Atlas to read from.

## Fix

1. Pipe the prompt into `atlas run` on stdin, or pass it as an argument, instead of relying on a TTY.
2. In CI, never let Atlas prompt: supply the model and the prompt explicitly.
3. If you see "runtime closed", the process was already shutting down; do not submit work after the run completes.
4. For a persistent interactive session, use the Atlas TUI rather than `atlas run`.

## Why does atlas run report INTERACTIVE_INPUT_ERROR

Atlas reports INTERACTIVE_INPUT_ERROR because cli/cmd/run wraps every stdin error in that 1 message. In 2026 the `atlas run` command still needs a usable stdin or TTY, and when it finds neither it surfaces the wrapped error rather than hanging forever waiting for a keystroke.

The `atlas run` command is the non-interactive entry point to Atlas, the terminal-native AI coding agent. When it is invoked in an environment with no attached terminal, such as a CI job, a cron task, or a container step, any attempt to read from stdin fails, and Atlas surfaces that failure as INTERACTIVE_INPUT_ERROR. The error is a signal that the invocation is missing something the command expected to ask for, most often the prompt itself. Fixing it means supplying that input up front instead of letting `atlas run` reach for a terminal that does not exist.

## How to pass a prompt to atlas run without a TTY

Pass a prompt to `atlas run` in 1 of 2 ways: pipe it in on stdin, or pass it as an argument. Both remove the need for a TTY, which is exactly what INTERACTIVE_INPUT_ERROR is complaining about, and both work identically inside containers and CI runners.

Piping is the usual choice when the prompt is generated by another step, since the upstream command writes the text straight into `atlas run` on stdin. Passing the prompt as an argument is the usual choice when the prompt is a fixed string in a script, because the invocation stays readable and greppable. Either shape makes the run fully specified before Atlas starts, so nothing is left for the command to ask about interactively. Do not mix the two and expect a fallback: give `atlas run` the prompt through one path and let it execute.

## How to run Atlas in CI without interactive prompts

In CI, never let Atlas prompt: supply the 2 values Atlas would otherwise ask for, the model and the prompt, explicitly on every `atlas run` invocation. A CI runner has no TTY, so any input Atlas has to request becomes an INTERACTIVE_INPUT_ERROR or a hung job.

Treat a CI invocation as a contract: every value Atlas might otherwise ask a human for must be present in the command. That means the model is named explicitly rather than chosen interactively, and the prompt arrives on stdin or as an argument. Atlas lets you switch the active model and provider on the fly with favorites and recents when you are sitting at the TUI, but that interactive selection has no place in a pipeline. Pinning the model in CI also makes runs reproducible, which matters when you are diffing agent output across builds.

## What "Failed to create session" and "runtime closed" mean in Atlas

Atlas has 2 sibling failures to INTERACTIVE_INPUT_ERROR. "Failed to create session" fires when a session cannot be created for the run, and "runtime closed" fires when work is submitted after the runtime lifecycle has already been closed. All 3 come from the same `atlas run` path in cli/cmd/run.

The "runtime closed" message is the more commonly misread of the two. It means the process was already shutting down when the work arrived, so the fix is procedural: do not submit work after the run completes. Scripts that fire a follow-up request at the tail of a run, or that reuse a runtime handle past its lifecycle, will hit it every time. "Failed to create session" fires earlier, when Atlas could not establish the session the run needs at all. Read which of the three messages you got before changing anything, because the remedy differs.

## When to use the Atlas TUI instead of atlas run

Use the Atlas TUI, not `atlas run`, for a persistent interactive session. Atlas in 2026 is a terminal-native TUI rendered with SolidJS through the OpenTUI renderer, and the TUI is the surface built to read interactive input, so it never raises INTERACTIVE_INPUT_ERROR the way a TTY-less `atlas run` does.

The split is deliberate. `atlas run` is for one-shot, fully specified, scriptable invocations where every input is supplied up front. The Atlas TUI is for sitting down and working with the agent over many turns, switching the active model and provider on the fly, and reviewing the unified diff Atlas computes for every file edit before it writes. If you find yourself trying to make `atlas run` behave interactively, you are reaching for the wrong surface. Launch the TUI and keep `atlas run` for automation.

## How to verify the atlas run fix worked

Verify the Atlas fix by re-running the same `atlas run` invocation in the same non-interactive environment, with the prompt now piped on stdin or passed as an argument. A clean run with none of the 3 messages, INTERACTIVE_INPUT_ERROR, "Failed to create session", or "runtime closed", confirms it.

Run the corrected command in the environment that actually failed, not on your laptop, because a local shell has a TTY and will happily hide the problem. If INTERACTIVE_INPUT_ERROR reappears, some other input is still being requested, so audit the invocation for anything Atlas might need to ask about, starting with the model. If "runtime closed" appears instead, the shape of the fix is different: something in the script is submitting work after the run has completed, and that call needs to be removed rather than re-specified.

## FAQ

### What is INTERACTIVE_INPUT_ERROR in Atlas?

INTERACTIVE_INPUT_ERROR is how Atlas cli/cmd/run wraps stdin errors. It means `atlas run` needed to read interactive input but had no usable TTY, which is normal in CI, containers, and cron jobs.

### How do I fix atlas run cannot read interactive input?

Pipe the prompt into `atlas run` on stdin, or pass it as an argument, instead of relying on a TTY. Supplying the prompt up front means Atlas never has to ask for it.

### How do I run Atlas in CI without it prompting?

In CI, never let Atlas prompt: supply the model and the prompt explicitly on the `atlas run` invocation. A CI runner has no TTY, so any interactive request becomes an error or a hang.

### What does "runtime closed" mean when running Atlas?

"runtime closed" means the Atlas process was already shutting down when the work was submitted. Do not submit work after the run completes; Atlas rejects anything sent after the runtime lifecycle has been closed.

### Why does Atlas say "Failed to create session"?

"Failed to create session" means `atlas run` could not create the session the run needs. It comes from the same cli/cmd/run path as INTERACTIVE_INPUT_ERROR, so check that the invocation is fully specified.

### Can I use atlas run for an interactive session?

No. For a persistent interactive session, use the Atlas TUI rather than `atlas run`. `atlas run` is the non-interactive entry point and expects every input to be supplied up front.

### Does piping the prompt to atlas run work inside Docker?

Yes. Piping the prompt into `atlas run` on stdin removes the TTY dependency, so it works in Docker, CI runners, and any other environment without an attached terminal.

---

Canonical HTML: https://runatlas.sh/resources/troubleshooting/interactive-input-not-supported
Source of truth: aeo_pages row `/resources/troubleshooting/interactive-input-not-supported` (segment: Troubleshooting) (this file is generated from it, never hand-edited).
Licence: Atlas is proprietary with a free core. It is not open source and there is no public source repository.
