blog.dopana

Back

OpenCodeはターミナルベースのAIコーディングエージェントとして広く使われています。しかし、AIエージェントを自動実行したい場合 — 毎朝9時にディールをチェック、毎週月曜にGitHub通知を要約、6時間ごとにウェブサイトを監視 — ターミナルを開いたままにする必要はありません。

OpenCode Schedulerは、OpenCodeの公式プラグインとして、OSのネイティブスケジューラをAIエージェントの実行エンジンとして活用します。

OpenCode Schedulerとは#

OpenCode Schedulerは、OpenCode CLIフレームワーク用のプラグインで、OSネイティブのスケジューラ — macOSのlaunchd、Linuxのsystemd --user、Windowsのschtasks、そしてcronフォールバック — を使って定期的なAIエージェントタスクをスケジュールできます。

重いバックグラウンドデーモンやクラウドcronサービスに依存する代わりに、このプラグインはあなたのマシンに既にある実績あるOSスケジューラの薄いラッパーとして機能します。

主な機能#

自然言語でのスケジュール設定#

やりたいことを自然な日本語で説明するだけです。プラグインが自動的に適切なcron式とOSスケジューラ設定に変換します。

「毎朝9時に、300ドル未満のスタンディングデスクをFacebook Marketplaceで検索して、上位5件のディールをTelegramに送信するジョブをスケジュールして」

cron構文を覚える必要はありません — もちろん知っている場合は標準の5フィールドcron式も使えます。

OSネイティブ実行#

一度スケジュールされると、ジョブは自律的に実行されます。OSが指定された時間にタスクを起動し、スーパーバイザスクリプトを実行して、あなたのプロンプトでopencode runを実行します。ターミナルやNode.jsプロセスを常時起動しておく必要はありません。

プラットフォームバックエンドステータス
macOSlaunchdフルサポート
Linux (systemd)systemd --userフルサポート
Linux (POSIX)cron (crontab)フォールバック
Windowsschtasks (Task Scheduler)サポート

監視付き実行 (v1.2.0+)#

スケジュール実行はスーパーバイザスクリプトでラップされており、以下を提供します:

  • 重複実行防止 — 前回の実行がまだアクティブな場合、次のスケジュール実行はスキップされます
  • 非対話モード — スケジュール実行はOPENCODE_PERMISSIONを強制的に拒否設定にし、ジョブがユーザー入力を待ってハングするのを防ぎます
  • 設定可能なタイムアウト — timeoutSecondsを設定して、SIGTERMSIGKILLで長時間実行を強制停止できます

ワークディレクトリによるスコープ分離#

ジョブは作業ディレクトリごとにスコープ分けされます。これにより、異なるプロジェクトが互いに干渉することはありません — 各プロジェクトは独自のジョブ定義、ロック、ログ、OSスケジューラユニットを持ちます。

ビルトインスキルテンプレート#

プラグインには@scheduled-job-best-practicesスキルテンプレートが同梱されています。1つのコマンドで任意のリポジトリにインストールできます:

Install the scheduled job best practices skill
text

スキルは.opencode/skill/scheduled-job-best-practices/SKILL.mdに書き込まれ、スケジュールジョブのプロンプトで参照できます。

インストール方法#

opencode.jsonにプラグインを追加するだけ:

opencode.json
{
  "plugins": ["opencode-scheduler"]
}
json

OpenCode起動時に自動的に全ツールが登録されます。

利用可能なツール#

ツール説明
schedule_job新しいスケジュールジョブを作成(自然言語またはcron)
list_jobs全スケジュールジョブを一覧表示
get_jobジョブの詳細とメタデータを取得
update_job既存ジョブのスケジュール、プロンプト、タイムアウトを更新
delete_jobスケジュールジョブとそのアーティファクトを削除
run_jobジョブを即時実行(fire-and-forget)
job_logsジョブの最新ログを表示
get_versionスケジューラとOpenCodeのバージョンを表示
get_skillビルトインスキルテンプレートを取得
install_skillビルトインスキルをリポジトリにインストール
cleanup_global全スコープのスケジューラアーティファクトを削除

実用的なユースケース#

自動ディールハンティング#

Schedule a daily job at 9am to search for standing desks under $300
text

エージェントがマーケットプレイスを巡回し、結果をフィルタリングして、最良のディールをTelegramやSlackに転送します — あなたが寝ている間に。

週次コード監査#

Schedule a job every Monday at 8am to summarize my GitHub notifications
text

リポジトリ全体のPR、Issue、アクティビティの週次ダイジェストを取得できます。

ヘルスモニタリング#

Schedule a job every 6 hours to check if my website is up and alert me on Slack if it's down
text

別途監視サービスは不要 — あなたのAIエージェントがアップタイムチェックを処理します。

バックグラウンドデータ処理#

Schedule a daily job from /path/to/project to run my-task
text

定期的なメンテナンス、トークンクリーンアップ、ドキュメント生成などを自律的なバックグラウンドエージェントに任せられます。

動作の仕組み#

  1. 自然言語またはcron式でジョブを記述
  2. プラグインが~/.config/opencode/scheduler/scopes/<scopeId>/jobs/にジョブ設定ファイルを書き込み
  3. OSネイティブのタイマーをインストール — launchd用の.plistsystemd用の.service+.timer、またはWindowsのTask Scheduler
  4. 指定時刻にOSがスーパーバイザスクリプト(~/.config/opencode/scheduler/supervisor.pl)を呼び出し
  5. スーパーバイザがopencode run -- "<prompt>"を実行し、ログを追記してメタデータを更新

トラブルシューティング#

ジョブが実行されない場合、スケジューラの登録を確認:

  • macOS: launchctl list | grep opencode
  • Linux: systemctl --user list-timers | grep opencode
  • Windows: schtasks /Query /TN "\OpenCode\opencode-job-*"

ログを確認: OpenCode内でShow logs for my-job

作業ディレクトリにMCPサーバー設定を含むopencode.jsonがあることを確認 — これがないと、スケジュール実行時にMCPツールが利用できません。

哲学#

OpenCode Schedulerは意図的に薄いラッパーです。分散ジョブスケジューラやクラウドcronの代替を目指しているわけではありません。代わりに、主要なOSに既に存在するスケジューリングインフラを活用し、自律的なAIエージェントを本番環境で信頼性高く動作させるのに十分な監視機能(重複防止、タイムアウト、ログ集約)を追加しています。

結果として、追加のインフラコストなしで、数分で自律AIエージェントを自分のマシン上にセットアップできます。

参考資料#