ほとんどのAIアシスタントの根本的な限界は、受動的であることだ。メッセージを送るまでアイドル状態で待ち、リクエストを処理し、応答し、また眠りにつく。高性能な留守番電話だ——有能だが、受け身。自ら動くことはない。何かをチェックすることもない。「ねえ、知っておくべきことに気づいたよ」と言うこともない。
考えてみると、これは奇妙な制限だ。最も有能な人間のアシスタントは質問に答えるだけではない——能動的にタスクを管理し、締め切りをフォローアップし、状況を監視し、聞かれる前に情報を提示する。話しかけられたときだけ応答するアシスタントは便利だ。ニーズを先読みするアシスタントは不可欠だ。
NanoClawのスケジュールタスクシステムがそのギャップを埋める。ホストプロセスに組み込まれたcronライクなスケジューラーで、指定された時間に、指定された指示で、エージェントコンテナを起動し、結果を指定されたWhatsAppグループに配信する。エージェントはあなたが聞くのを待たない——あなたが定義したスケジュールで、通常の会話と同じツールと機能を使って行動する。
スケジュールタスクの仕組み
メカニクスはシンプルだ。NanoClawアシスタントに、自然言語で何をいつやってほしいかを伝える。「毎朝8時にHacker NewsでAIエージェントに関する記事をチェックしてサマリーを送って」。「毎週金曜17時にタイムシートの提出をリマインドして」。「毎日東京行きのフライト価格をチェックして800ドル以下になったら教えて」。
NanoClawのホストプロセスがスケジュールを解析し、SQLiteに保存し、期限のタスクをチェックするタイマーループを実行する。タスクが期限になると、ホストはコンテナを起動する——通常の会話に使われるコンテナと同一——タスクの指示を初期メッセージとして渡す。エージェントが実行し、タスクが必要とするアクション(Web閲覧、ファイルアクセス、API呼び出し)を行い、結果を指定されたWhatsAppグループに送り返す。
タスクは他のエージェントインタラクションと同じ隔離されたコンテナ環境で実行される。同じツール、同じセキュリティ境界、コンテキストのための同じCLAUDE.mdメモリを持つ。唯一の違いは、トリガーがユーザーメッセージではなくタイマーであることだ。
実際に機能するパターン
ユーザーが最も価値を見出すスケジュールタスクのパターンはいくつかのカテゴリに分かれ、単純なリマインダーよりも興味深い。
第一はモニタリングだ。「このウェブサイトを毎時チェックして、何か変わったら教えて」。これは驚くほど強力だ。エージェントは変更をチェックするだけでなく、理解するからだ。価格モニタリングタスクは「価格が899ドルから749ドルに変わった」とだけ報告するのではない。「東京行きのフライトが一晩で17%下がった——追跡を始めて3週間で最安値だ。監視を続ける?それとも予約するのに十分?」と報告する。
第二はダイジェスト生成だ。「毎朝、AIインフラの仕事に関連するこの3つのニュースソースのトップ記事をまとめて」。エージェントがサイトを閲覧し、記事を読み、あなたの興味(CLAUDE.mdメモリから)に基づいて関連性をフィルタリングし、パーソナライズされたブリーフィングを配信する。ニュースフィードをスクロールする30分が、あなたにとって重要なものがすでにフィルタリングされた2分の読み物に置き換わる。
第三は定期的な管理タスクだ。「毎週月曜の朝、プロジェクトのGitHub issueをチェックして、新しいもの、放置されているもの、注意が必要なものをまとめて」。エージェントはWeb閲覧(またはGitHub MCPサーバーを設定していればMCP)を使ってデータを取得し、分析し、アクション可能なサマリーを配信する。人間がGitHubのUIをクリックして15分かかるタスクが、エージェントのAPI呼び出しなら30秒で済む。
第四は締め切り管理だ。「確定申告の締め切りは4月15日。3月1日から毎週リマインドして。4月1日からは毎日リマインドして」。エージェントは単にリマインダーを送るのではなく、コンテキスト付きのリマインダーを送る。「確定申告の締め切りまであと8日。前回この話をしたとき、フリーランスクライアントからのW-2をまだ待っていると言っていた。届いた?」
背後のアーキテクチャ
スケジュールタスクシステムは意図的にシンプルだ——NanoClawのコアでおそらく50行のコード。SQLiteテーブルにcron式、指示テキスト、ターゲットグループ、最終実行時刻のカラムを持つ。setIntervalループが毎分、期限のタスクをチェックし、マッチするものがあればコンテナを起動する。
このシンプルさは意図的だ。スケジュールタスクの複雑さはスケジューリングにあるのではなく、実行にある。「毎朝Hacker Newsをチェック」の難しい部分は、午前8時にコードを実行することではない。ウェブサイトを閲覧し、記事を読み、関連性を評価し、一貫したサマリーを書くことだ。その難しい部分は、通常の会話を処理するのと同じAgent SDKとツールを使って、コンテナ内のClaudeが処理する。
代替案——リトライロジック、依存関係管理、ワークフローグラフを備えた洗練されたタスク実行エンジンの構築——は、AI自身がより上手に処理する問題を解決するために数千行のコードを追加することになる。Claudeは失敗したWebリクエストのリトライ方法、一時的にダウンしているウェブサイトの処理方法、一部のデータソースが利用できない場合でも有用な結果を生成する方法をすでに知っている。スケジューラーは適切なタイミングでトリガーするだけでいい。
会話によるタスク管理
タスク管理は他のすべてと同じWhatsAppインターフェースで行われる。「スケジュールタスクを見せて」でリスト表示。「フライト価格チェックをキャンセルして」で削除。「ニュースダイジェストを8時から7時に変更して」でスケジュール更新。「月曜までタスクを全部一時停止して」で一時停止。
会話型インターフェースにより、タスク管理UIを学んだりcron構文を覚えたりする必要がない。自然言語で欲しいものを記述すれば、エージェントがスケジュールタスクに変換する。スケジュールが曖昧な場合——「数日おきにリマインドして」——エージェントは推測するのではなく確認を求める。
タスクはWhatsAppグループにスコープされるため、仕事グループのタスクは家族グループに表示されず、その逆も同様だ。管理チャンネル(アシスタントとのダイレクトメッセージ)はすべてのグループのすべてのタスクを表示・管理できるが、グループメンバーは自分のグループに属するタスクのみ見える。
受動から能動へのシフト
スケジュールタスクシステムは、数週間使ってみるまで実感しにくい方法で、あなたとAIアシスタントの関係を変える。アシスタントは質問があるときに行く場所ではなくなり、知る価値のあることがあるときに向こうから来るものになる。
朝はSNSスクロールの代わりにパーソナライズされたニュースダイジェストで始まる。プロジェクトは、放置されたissueが問題になる前にアシスタントが浮上させるため軌道に乗り続ける。旅行計画は、手動では面倒な継続的な価格モニタリングの恩恵を受ける。締め切りはコンテキストを覚えて適切にエスカレーションするものに管理される。
技術的な実装はシンプルだ——タイマーループとSQLiteテーブル。しかし、それが可能にする行動の変化は大きい。受動的なアシスタントは使うツールだ。能動的なアシスタントは一緒に働くパートナーで、重要だが忘れがちなモニタリングやメンテナンスタスクを処理する。両者の違いは、50行のスケジューリングコードと、指示なしでも有用な仕事ができるほど有能なAIだ。