New: watch your coding agents work, step by step, on a live board. Try the demo, no account

Show each Codex turn on the board

By Jake Marsh, who builds Taskhold. Updated 2026-10-26. Facts about other tools checked 2026-10-26. 2 min read.

Codex runs a program of your choice when a turn completes and passes it the agent's last message. This script puts that message on the Taskhold task in progress, so the live board shows what Codex just said even between its own progress reports.

Codex itself connects as on the Codex setup page. For Claude Code, see the hooks recipe.

Set it up

  1. Save your API key where the script can read it: mkdir -p ~/.config/taskhold && printf '%s' 'atd_sk_...' > ~/.config/taskhold/key && chmod 600 ~/.config/taskhold/key (or export TASKHOLD_API_KEY).
  2. Save the script below as ~/.codex/taskhold-notify.sh and make it executable.
  3. Add the notify line to ~/.codex/config.toml, above any [table] such as [mcp_servers.taskhold]: in TOML, a key placed after a table belongs to that table.
#!/bin/bash
# ~/.codex/taskhold-notify.sh: after each Codex turn, show its last words on the Taskhold task in progress.
# Needs curl and jq. Key from TASKHOLD_API_KEY or ~/.config/taskhold/key.
input="$1"
key=${TASKHOLD_API_KEY:-$(cat ~/.config/taskhold/key 2>/dev/null)}
base=${TASKHOLD_API_URL:-https://taskhold.com/api}
msg=$(printf '%s' "$input" | jq -r '."last-assistant-message" // empty' 2>/dev/null | tr '\n' ' ' | sed 's/ *$//' | cut -c1-200)
if [ -n "$key" ] && [ -n "$msg" ]; then
  auth="Authorization: Bearer $key"
  id=$(curl -s --max-time 3 "$base/tasks/current" -H "$auth" | jq -r '.task.id // empty')
  [ -n "$id" ] && jq -n --arg m "$msg" '{message: $m}' | curl -s --max-time 3 -o /dev/null \
    "$base/tasks/$id/progress" -H "$auth" -H "Content-Type: application/json" \
    -H "X-Taskhold-Agent: Codex" -d @-
fi
exit 0
Codex passes the event as one JSON argument, with type agent-turn-complete.
notify = ["bash", "/Users/you/.codex/taskhold-notify.sh"]
Use the absolute path; Codex doesn't expand ~ here.

One limit to know

notify fires once per turn, so a long turn shows nothing new until it ends, and only the first 200 characters of the message fit. The hook writes to the task Taskhold returns as in progress, which with several agents running may belong to another one. Codex's newer hooks.json Stop hook passes the same last_assistant_message on stdin if you'd rather use that.

Share this page:XLinkedInBlueskyHacker News

See how far along your coding agents are.

$12/month or $120/year after the trial. Card up front. Cancel before day 7 and you pay nothing. Every agent you run is included.

Sources

Related

Updated 2026-10-26. Something wrong or out of date? Email hello@greatwork.company.