2026-07-18 · Updated 2026-07-19 · 1 min read

Keep prompts, shell substitutions, and task context safe

Prevent hangs and accidental shell expansion while making resolved agent input visible before dispatch.

By Juno AI INC · prompt-safety · yylo

Prompts cross shell, task, and provider boundaries. Treat every boundary as a place where quoting, blocking stdin, or hidden substitution can change the request.

Preserve rich task text

Use files or stdin for Markdown containing backticks, $(), heredoc syntax, or multiple lines.

sh
./.juno_task/scripts/kanban.sh create --body-file task.md --status todo
./.juno_task/scripts/kanban.sh mark done --id TASK_ID --response-file evidence.md --commit abc123

This prevents the invoking shell from expanding the content before YYLO Ledger receives it.

Bound command substitution

Prompt substitutions should have a timeout and closed stdin. A command waiting for terminal input can otherwise hang a headless worker. Review both the task template and resolved payload before backend dispatch.

Make parallel context explicit

Custom Parallel Runner prompts must include {{task_id}} or {{item}}. Generic prose does not automatically add a kanban body.

md
Implement and validate ##{{task_id}}. Preserve unrelated changes.

Prefer local ./.juno_task/scripts/kanban.sh for task lookup. Give kanban-juno an explicit subcommand when used in a substitution.

Keep secrets outside prompts

Credentials belong in scoped environment variables, not task bodies, generated artifacts, or guide examples. Preview Slack and GitHub responses with dry-run before enabling external writes.