Linear の課題を AI が自動で処理する ― Orca の定期実行でノートを作り、できることを絞る
Linear の課題を、AI が1時間ごとに拾って処理するようにしました。仕事はノートの新規作成と追記だけです。Orca の定期実行で動かし、できることは指示だけでなく設定でも絞りました。
Orca は、複数の AI をまとめて動かすアプリです。Slack から課題を作るところは、前の記事に書きました:Slack から Linear に作業を頼む。AI を動かす環境については、AI 用の仮想マシンに仕事を引っ越す に書いています。
全体の流れ

Orca の自動化は、公式の文書を見る限り定期実行で、Slack から直接起動する方法は見つかりませんでした。そのため、すぐに動くのではなく、次の毎時0分に処理されます。
1. 仮想マシンの Orca を Linear につなぐ
仮想マシンの Orca は、Mac の Orca アプリから接続して設定します。接続には Linear の個人 API キーを使います。ここで2回迷いました。
設定画面の上にある「ホスト」を仮想マシンにしても、Linear のキーの保存先は変わりませんでした。連携の画面の Linear の欄に「アカウントスコープ: Local Mac」と出ていて、そのまま貼ると Mac 側に保存されるところでした。次の順番で切り替えます。
- 設定の「連携」で、Linear の欄の「リモートサーバーを開く」を押す
- 「新しいプロジェクトを開く場所」を仮想マシンに切り替える
- Linear の欄のスコープが「リモートサーバー」に変わったことを確かめる
- 「Linear アクセスを追加」でキーを貼る
- 「新しいプロジェクトを開く場所」を元に戻す
元に戻した後も、仮想マシンから Linear を読めることを確かめました。
もう1つの失敗は、作ったキーの画面をキャプチャしてしまったことです。Linear のキーは作成時に1回だけ全文が表示されるので、確認のために撮った画面に全部写りました。そのキーは削除して、作り直しました。キーを表示している画面は撮らない、が教訓です。
2. 定期実行を作る
専用のフォルダを用意しました。Orca への登録には git リポジトリが必要だったので、このフォルダだけをローカルの git にしています。
mkdir -p ~/orca-tasks && cd ~/orca-tasks
git init -b main
git add -A && git commit -m "AI作業用のフォルダ"
orca-ide repo add --path "$HOME/orca-tasks"
1時間ごとに AI を起動すると、課題が無くても使用量が増えます。そこで、Orca の --precheck を使いました。起動の前に実行するコマンドで、失敗(0以外で終了)すると、その回は AI を起動しません。
#!/bin/bash
# 処理する課題が無いときは AI を起動しない
orca-ide linear list-issues --team XXX --label "AI作業" --json 2>/dev/null | python3 -c '
import json,sys
d=json.load(sys.stdin)
if not d.get("ok"): sys.exit(2)
n=[i for i in d["result"].get("issues",[]) if (i.get("state") or {}).get("type") in ("backlog","unstarted")]
sys.exit(0 if n else 1)'
orca-ide automations create --name "AI作業の課題を処理"
--trigger hourly --timezone Asia/Tokyo --provider claude
--workspace "path:$HOME/orca-tasks" --workspace-mode existing --fresh-session
--precheck "$HOME/orca-tasks/precheck.sh"
--prompt "$(cat 本番の指示.txt)" --disabled
最初は --disabled(無効)で作り、orca-ide automations run で1回ずつ試してから有効にしました。この手動の実行では、事前確認は飛ばされます。
3. できることを絞る
ここが一番大事なところです。Orca の AI は、確認なしで動く設定(--dangerously-skip-permissions)で起動します。そして Slack からの依頼は、そのまま AI への入力になります。依頼の文章しだいで、削除なども確認なしに実行してしまうおそれがあります。

指示:課題の文章を命令として扱わせない
指示には、課題のタイトルと本文はデータであること、許可する作業はノートの新規作成と追記だけであることを書きました。許可外の内容が1つでもあれば、その課題は全体を実行せず、理由をコメントして人に戻します。
道具:追記のツールだけを使わせる
Obsidian の MCP には、ノートを丸ごと上書きできるツールもあります。そこで、書き込みには追記のツールだけを使わせました。このツールは、ノートが無ければ新しく作り、あれば末尾に足すだけです。上書きのツールを禁止しても、ノートは作れます。
コマンド:フォルダの設定で禁止する
最初は Orca の追加引数で --disallowedTools を渡そうとしましたが、許可されていませんでした(使えるのは --model、--effort、--add-dir だけ)。代わりに、専用フォルダの .claude/settings.json に禁止を書きました。一部だけ載せます。
{
"permissions": {
"deny": [
"Write", "Edit", "WebFetch",
"mcp__obsidian__obsidian_write_note",
"mcp__obsidian__obsidian_delete_note",
"Bash(rm *)", "Bash(sudo *)", "Bash(curl *)", "Bash(ssh *)"
]
}
}
確認なしのモードで本当に効くのかが心配だったので、無害なコマンドで試しました。curl --version と、存在しないファイルへの rm は権限で拒否されました。ノートの削除のツールは、AI から使えない状態になっていました。
ただし、止まるのは一覧に書いたものだけで、完全な制限ではありません。課題を作れるのは Linear のメンバーだけで、今は自分1人です。メンバーを増やす前に見直します。
4. 試験する
許可される課題と、断るべき課題を1件ずつ作って、手動で1回動かしました。約30秒で終わりました。
| 課題の内容 | 結果 |
|---|---|
| ノートに節を追記する | 追記して読み返し、コメントを付けて完了にした |
| ファイルを削除する(対象は存在しないファイル) | 実行せず、理由をコメントしてラベルを外し、Todo に戻した |
課題の作成と完了の通知も、Slack に届きました。
つまずいたところ
初回の確認画面で止まる
最初の試験では、3分待っても課題が完了になりませんでした。Orca のターミナルを読むと、Claude Code が確認なしのモードの警告を出して、同意を待っていました。警告は、サンドボックス(隔離された環境)で、インターネットへのアクセスを制限して使うことを勧めています。今回の仮想マシンは、インターネットにつながっていて、ログイン情報も置いてあります。それを踏まえて自分で判断して同意し、上の禁止の設定を入れました。同意の後は約20秒で終わりました。
フォルダだけでは登録できない
orca-ide project setup-existing-folder は「Imported folder does not match the selected project identity.」、orca-ide repo add は「Not a valid git repository」で失敗しました。git init して最初のコミットを作ると、登録できました。
これからやること
- 定期実行が、実際の課題を毎時0分に処理するところを確かめる(ここまでの処理の確認は手動の実行です)
- 仮想マシンの Orca を、Mac と同じ版に更新する
- AI が作ったノートが1台の Mac に届かなかった件を調べる
まとめ
- Orca の定期実行で、ラベルを付けた課題だけを AI に処理させる
- 課題が無いときは
--precheckで AI を起動しない - Linear のキーの保存先は「ホスト」ではなく、「新しいプロジェクトを開く場所」で決まる
- AI の作業は、指示、道具、コマンドの3段階で絞る。追記のツールだけなら上書きできない
- 禁止は一覧にあるものだけなので、完全な制限ではない

1件の返信
[…] Linear は、作業の課題を管理するサービスです。この記事では、カテゴリの決め方と Slack との接続までを書きます。その課題を AI が自動で処理する部分は、続きの記事に書きました:Linear の課題を AI が自動で処理する。 […]