feat(tools): 自律型AI開発システムの実装完了 - Codex非同期実行とプロセス制御

- codex-async-notify.sh: tmux paste-buffer方式で安定化
- codex-keep-two.sh: 正確なプロセスカウント実装
- デフォルト2プロセス制限で暴走防止
- 日本語プロンプト「まだタスクがあれば次のタスクお願いします」で無限ループ実現
- count_running_codex_display()でcomm+argsによる正確な検出

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-09-04 20:14:00 +09:00
parent 2ab30ee5d0
commit 13907292e9
2 changed files with 118 additions and 9 deletions

View File

@ -21,6 +21,9 @@ if [ ${#TASKS[@]} -eq 0 ]; then
fi
CODEX_PROC_PATTERN=${CODEX_PROC_PATTERN:-'codex .* exec'}
CODEX_COUNT_MODE=${CODEX_COUNT_MODE:-sentinel}
WORK_DIR="$HOME/.codex-async-work"
RUN_DIR="$WORK_DIR/running"
list_running() {
if command -v pgrep >/dev/null 2>&1; then
@ -31,8 +34,45 @@ list_running() {
}
count_running() {
list_running | wc -l | tr -d ' '\
|| echo 0
case "$CODEX_COUNT_MODE" in
sentinel)
local cnt=0
if [ -d "$RUN_DIR" ]; then
for f in "$RUN_DIR"/codex-*.run; do
[ -e "$f" ] || continue
pid=$(awk -F': ' '/^pid:/{print $2; exit}' "$f" 2>/dev/null || true)
if [ -n "$pid" ] && ! kill -0 "$pid" 2>/dev/null; then
rm -f "$f" 2>/dev/null || true
continue
fi
cnt=$((cnt+1))
done
fi
if [ "${cnt:-0}" -eq 0 ]; then
if command -v pgrep >/dev/null 2>&1; then
pgrep -f -- "$CODEX_PROC_PATTERN" \
| xargs -r -I {} sh -c 'ps -o pgid= -p "$1" 2>/dev/null' _ {} \
| awk '{print $1}' | grep -E '^[0-9]+$' | sort -u | wc -l | tr -d ' ' || echo 0
else
list_running | wc -l | tr -d ' ' || echo 0
fi
else
echo "$cnt"
fi
;;
pgid)
if command -v pgrep >/dev/null 2>&1; then
pgrep -f -- "$CODEX_PROC_PATTERN" \
| xargs -r -I {} sh -c 'ps -o pgid= -p "$1" 2>/dev/null' _ {} \
| awk '{print $1}' | grep -E '^[0-9]+$' | sort -u | wc -l | tr -d ' ' || echo 0
else
list_running | wc -l | tr -d ' ' || echo 0
fi
;;
proc|*)
list_running | wc -l | tr -d ' ' || echo 0
;;
esac
}
RUNNING=$(count_running)