Piped Input

Compose praisonai run/code/chat in Unix pipelines and CI

Pipe any text into praisonai run, code, or chat and it is merged with your prompt before the agent runs.

Diagram

Piped Input

💻 cat file

🔀 prompt + piped body

✍️ prompt arg

🤖 Agent

✅ Result

Quick Start

  1. Pipe a file into run
    bash
    cat error.log | praisonai run "Diagnose the root cause"
  2. Pipe into code
    bash
    cat data.json | praisonai code "Write a parser for this shape"
  3. Pipe into chat
    bash
    echo "$STACKTRACE" | praisonai chat "Explain this"

How It Works

The prompt argument and piped stdin are merged before dispatch.

Diagram
Agentresolve_cli_inputCLIShellAgentresolve_cli_inputCLIShellcat file | praisonai run “prompt”prompt + piped stdin“prompt\n<piped body>”merged inputResponse
ComponentRole
resolve_cli_input(prompt)Merges the prompt argument with piped stdin (prompt first).
read_stdin_if_available()Non-blocking read with a 10 MB cap.
select.select guardPrevents stalls when stdin is an open pipe with no EOF (common in CI).

Merge Order

The prompt argument comes first, then the piped body, joined with \n.

Prompt argPiped stdinFinal input to agent
SetSetprompt + "\n" + piped
SetEmpty / no pipeprompt (unchanged)
NoneSetpiped (becomes the prompt)
NoneEmpty / no pipeNone (interactive REPL if TTY)

Decision Diagram

praisonai run chooses one path per invocation — only the default text path merges piped stdin.

Diagram

Yes

No

Yes

No

💻 praisonai run

📄 Target is
a YAML file?

▶️ Run the YAML
no stdin merge

⚙️ –agent or
–command set?

▶️ Dispatch definition
no stdin merge

🔀 resolve_cli_input target
merge piped stdin

🤖 Agent


Skip Rules for praisonai run

praisonai run skips the stdin merge when merging a piped body would be meaningless.

  • YAML target — an existing .yaml / .yml file (case-insensitive, so AGENTS.YAML counts). Concatenating a piped body into a YAML path would be nonsense.
  • --agent — a named custom agent runs its own definition.
  • --command — a named custom command uses TARGET as $ARGUMENTS.
  • --restore — the command exits before ingestion, so ... | praisonai run --restore last never drains the pipe.

praisonai code and praisonai chat call resolve_cli_input(prompt) unconditionally at the top of the handler, so they always merge piped stdin.


Size Cap & Platform Notes

Piped input is capped at 10 MB. Larger streams are truncated to 10 MB before merging.

Windows piped stdin works as of PraisonAI 2026-07-07 (PR #2705). Because Python’s select.select is socket-only on Windows, the reader now uses a stat-based pipe classifier instead. Both cmd and PowerShell redirection are supported:

bat
type error.log | praisonai run "Diagnose the root cause"
powershell
Get-Content error.log | praisonai run "Diagnose the root cause"

Interactive terminals with no redirection continue to skip the stdin read, so a bare praisonai run still drops into the REPL. On Unix the existing select.select() guard is unchanged. To attach a file explicitly instead, --file still works on praisonai code / praisonai chat:

bash
praisonai code --file error.log "Diagnose the root cause"

CI / Scripting Examples

GitHub Actions
- name: AI review of the diff
  run: git diff origin/main...HEAD | praisonai run "Review these changes for bugs"
  env:
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Kubernetes logs
kubectl logs deploy/api --tail=200 | praisonai run "Explain these errors"
Remote log
curl -s https://api.example.com/log | praisonai code "Add tests for the failing calls"

Best Practices

Put the prompt first, pipe the context second

The merge order is prompt then piped body, so a leading prompt produces the clearest instruction for the agent.

bash
cat error.log | praisonai run "Diagnose the root cause"
For YAML agents, do not pipe — use –file or an inline instruction

The YAML skip rule means a pipe into a YAML target is silently ignored. Pass context with --file or write the instruction inline.

bash
praisonai code --file config.yaml "Validate this config"
In CI, do not pipe more than 10 MB — split large logs

The 10 MB cap truncates silently. Trim or tail large streams before piping.

bash
tail -n 500 huge.log | praisonai run "Summarize the recent failures"
Prefer named custom agents for repeatable pipelines

A named agent (--agent) keeps repeatable pipelines cleaner than reshaping stdin every invocation.

bash
praisonai run --agent reviewer "Audit the latest changes"

Related