Communitygithub.com

GigleAI/cavil-loop

GitHubラベルで駆動する非同期コーディングエージェント — あなたが眠っている間もAIが並行して作業します。

cavil-loop とは?

このスキルは、GitHubのIssueやPRのコメントをローカルAIエージェントへの入力と出力として連携させる、非同期コーディングワークフローを提供します。systemdタイマーとシェルスクリプト、2つのGitHubラベル(pending/agentなど)を組み合わせることで、ユーザーはGitHubのWeb UIやiOSアプリから直接AIに指示を出せます。agent-agnosticな設計で、`WORKER_AGENT`環境変数によりClaude Code(デフォルト)、sst/opencode、OpenAI Codex CLI、Cursor Agent CLIを切り替え可能。`scripts/drivers/<name>.sh`に独自ドライバを追加することもできます。主な操作は`setup`(ホストプロジェクトへのデプロイ)、`status`(状態確認)、`cleanup`(作業完了後の後処理)、`disable`(プロジェクトの停止)の4つ。ホストプロジェクトには`.gitignore`の1行と`coding-agent.config`のみが配置され、スクリプトやログはすべて外部に保持されるため、プロジェクトを汚しません。

対応✓Claude Code✓Codex CLI✓Cursor✓OpenCode
npx skills add GigleAI/cavil-loop

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

coding-agent-work-loop

English · 中文

GitHubのIssue/PRコメントをローカルAIへの入力と出力に変換します。systemdタイマー+いくつかのシェルスクリプト+2つのGitHubラベルを使って、GitHubのWeb UI(またはiOS ghアプリ)を通じて直接AIと対話できます。

このスキルはエージェント非依存の設計です。ワーカーCLIはcoding-agent.config内のWORKER_AGENT=<name>で選択します。デーモン/ディスパッチスクリプトは薄いドライバ層を介してさまざまなエージェントCLIをプラグインします。ビルトインドライバ:claude(デフォルト、Claude Code)、opencode(sst/opencode)、codex(OpenAI Codex CLI)、cursor(Cursor Agent CLI)。scripts/drivers/<name>.shで独自のドライバを追加できます。詳細はdocs/drivers.mdを参照してください。

呼び出しタイミング

ユーザーはホストエージェントランタイムから/coding-agent-work-loop <command>または自然言語リクエスト経由でこのスキルを呼び出します。一般的な形式:

  • 「プロジェクトXにこのデーモンをインストールして」→ setupフローを実行
  • 「コーディングエージェントの状態は?」→ statusフローを実行
  • 「プロジェクトXのコーディングエージェントを無効にして」→ disableフローを実行

呼び出されたときにエージェントが実行すべきこと

setup(ホストプロジェクトへのデプロイ)

ユーザーからホストプロジェクトのパス(例:~/github/myproject)が与えられます。手順:

  1. パスが存在し、Gitリポジトリ(.gitがある)であることを確認する
  2. 依存関係を確認:git、gh(gh auth loginでログイン済み必須)、tmux、jq、flock、systemctl、およびWORKER_AGENTで選択されたワーカーCLI(デフォルトclaude、その他のビルトイン:opencode、codex、cursor)。それぞれがcommand -vで解決可能であること。
  3. 実行:
    bash "${CLAUDE_PLUGIN_ROOT:-$HOME/.agents/skills/coding-agent-work-loop}/setup.sh" <host-project-path>
    
    $CLAUDE_PLUGIN_ROOTはClaude Codeが注入するスキルルート環境変数です。存在しない場合は正規の~/.agents/skills/coding-agent-work-loopにフォールバックします。
  4. setup.shが完了時に次の手順のガイダンスを出力するので、そのままユーザーに伝えてください。

status

ユーザーが状態を求めています。手順:

  1. systemctl --user list-timers 'coding-agent-poll@*' --no-pager — タイマーの健全性
  2. systemctl --user list-units 'coding-agent-poll@*.service' --no-pager — 最後の実行
  3. 登録済みの各~/.config/coding-agent-work-loop/*.confに対して:
    • tail -20 $STATE_DIR/poll.log(STATE_DIRはconfファイルから読み取る)
    • gh issue list --repo $REPO --label pending/agent + gh pr list --repo $REPO --label pending/agent
  4. ユーザー向けにまとめる

cleanup(PRが承認/却下された後)

ユーザーがPRをマージしたか、Issueの作業を中止したい場合。手順:

  1. Issueが完了したことを確認する(PRがマージまたはクローズされた)
  2. 実行:
    bash "$CLAUDE_PLUGIN_ROOT/scripts/cleanup-issue.sh" <issue-number>
    
    オプションフラグ:--force(ワーカーがビジーでもクリーンアップ)、--keep-worktree(セッションのみを強制終了)、--delete-branch(ローカルブランチも削除)

cleanup-issue.shの処理内容:

  • ビジーチェック(デフォルトでは拒否、--forceで回避)
  • プロジェクトレベルのCLEANUP_HOOKを実行(coding-agent.configで設定、例:tailscaleポートの開放、開発サーバーの停止)
  • ワーカーのtmuxセッションを強制終了
  • ワークツリーを削除(デフォルト)
  • オプションでローカルブランチを削除

disable

ユーザーが1つのプロジェクトを停止したい場合。手順:

  1. インスタンス名を確認(systemctl --user list-timers 'coding-agent-poll@*')
  2. systemctl --user disable --now coding-agent-poll@<key>.timer
  3. オプション:~/.config/systemd/user/coding-agent-poll@<key>.{service,timer}のインスタンスシンボリックリンクを削除(テンプレート自体はそのまま)
  4. オプション:~/.config/coding-agent-work-loop/<key>.confを削除
  5. 結果を報告

ホストプロジェクトに配置されるもの

setup後、ホストプロジェクトのワークツリーに追加されるのは以下の2つだけです:

  1. .gitignoreの1行(coding-agent.configを除外)
  2. coding-agent.config(gitignore対象、設定ファイル)

スクリプト、systemdユニット、状態、ログはすべてホストプロジェクトの外部(スキルディレクトリ+~/.config/+~/.local/state/)に保持されます。

全体アーキテクチャ

関連README.mdを参照してください。

ファイル一覧

  • setup.sh — ホストプロジェクトのブートストラップ
  • scripts/ — デーモン+ディスパッチスクリプト(ホストプロジェクトにはコピーされません)
  • prompts/ — 初期ワーカープロンプトテンプレート(ホストプロジェクトの.agents/skills/coding-agent-work-loop/prompts/で上書き可能)
  • systemd/ — [email protected]/.timerテンプレートユニット。セットアップ時に~/.config/systemd/user/にコピーされます
  • coding-agent.config.example — 設定テンプレート

関連スキル