一键导入
things-url
Things 3とClaude Codeのタスクを双方向で共有する。URLスキームによるタスク送信とAppleScriptによるタスク読み取りに対応する。macOS環境でThings 3とのタスク同期が必要な場合に使用する。Do NOT use for macOS以外の環境でのタスク管理。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Things 3とClaude Codeのタスクを双方向で共有する。URLスキームによるタスク送信とAppleScriptによるタスク読み取りに対応する。macOS環境でThings 3とのタスク同期が必要な場合に使用する。Do NOT use for macOS以外の環境でのタスク管理。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Jules REST APIを使用してタスクを対話的に依頼・管理する。セッション作成・プラン承認・メッセージ送信・進捗監視をAPI経由で行い、Claudeと協調してタスクを完遂する。ベースブランチ指定とPR自動作成に対応。認証はJULES_API_KEY_OP_URI(1Passwordシークレット参照)またはJULES_API_KEYで行う。Do NOT use for 認証情報未設定の環境でのタスク実行(task-executingを使用すること)。
SDDワークフロー全体を統括するオーケストレーター。要件定義・設計・タスク計画・実装・逆順レビューの一連のフローを管理する。新規プロジェクトのSDD一括作成、複数フェーズにまたがるワークフロー管理、エラー・バグの体系的な分析と修正に使用する。Do NOT use for 個別フェーズのみの作業(requirements-defining、software-designing、task-planningを直接使用すること)。
設計書から実装タスクへの分解を行う。デフォルトで各タスクをGitHub Issueとして起票し(1タスク=1 Issue、詳細はIssue本文に集約、ラベルでフェーズ・ステータス管理)、ユーザーがファイル管理を明示した場合のみdocs/sdd/tasks/にファイル生成する。AIエージェント向けの具体的な実装指示やTDD手順を定義する。タスク計画フェーズのみを単独で実行する際に使用する。Do NOT use for SDDワークフロー全体の管理(sdd-documentationを使用すること)。
SDDドキュメントの整合性チェック、実装同期確認、アーカイブ(CLAUDE.md同期含む)、ファイル最適化を行う。ドキュメント間の矛盾検出、実装との乖離確認、完了タスクの整理と仕様のCLAUDE.md転記、肥大化ファイルの分割が必要な場合に使用する。Do NOT use for ドキュメントの新規作成(requirements-defining、software-designing、task-planningを使用すること)。
エラー・バグ・問題を体系的に分析し修正方針を策定する。テスト失敗、ビルドエラー、実行時エラー、動作不良、バグ報告に対応し、根本原因を分析してから修正を行う。Do NOT use for 根本原因分析が不要な軽微な修正(typo、設定値変更、フォーマット修正など)。
IPA非機能要求グレード2018(可用性・性能拡張性・運用保守性・移行性・セキュリティ・システム環境)の記入済み要件を入力として、運用設計書を生成する。非機能要件定義が完了しているプロジェクトの運用設計フェーズで使用する。Do NOT use for 非機能要件の定義自体(requirements-definingを使用すること)。Do NOT use for 業界調査やヒアリングから始める運用設計(operations-designを使用すること)。
基于 SOC 职业分类
| name | things-url |
| description | Things 3とClaude Codeのタスクを双方向で共有する。URLスキームによるタスク送信とAppleScriptによるタスク読み取りに対応する。macOS環境でThings 3とのタスク同期が必要な場合に使用する。Do NOT use for macOS以外の環境でのタスク管理。 |
| metadata | {"version":"1.0.0"} |
Claude Codeで管理しているタスクとThings 3を双方向で共有するスキルです。URLスキームによるタスク送信(書き込み)と、AppleScript(osascript)によるタスク読み取りの両方をサポートし、人間とClaude Codeが同じタスク情報を共有できます。
このスキルは以下の機能を提供します:
add-jsonコマンドによる一括インポートURL生成openコマンドによるURL直接実行以下の状況でこのスキルを使用してください:
「タスクをThingsに送って」「SDDのタスクをThingsと共有して」などと依頼されたら:
docs/sdd/tasks/の読み取り
送信対象の確認
Things URL の生成
add、add-project、または add-json を使い分けるURLの実行
openコマンドで直接実行を提案「今のタスクリストをThingsに送って」と依頼されたら:
現在のTodoWriteの状態を確認
Things URLを生成
add-jsonで一括作成in_progress → タグ「進行中」)URLを実行または提示
「Thingsにタスクを追加して」と依頼されたら:
things:///add URLを生成「Thingsのタスクを確認して」「今日のタスクを教えて」「Thingsから同期して」と依頼されたら:
macOS環境の確認
unameコマンドでmacOSであることを確認読み取り対象の確認
AppleScriptでデータ取得
osascriptコマンドでThings 3からタスクデータを読み取る結果の表示
「ThingsのタスクをTodoWriteに反映して」と依頼されたら:
Things 3からタスクを読み取る(上記ステップ4と同様)
現在のTodoWriteの状態と比較
ステータスのマッピング(Things → TodoWrite)
| Things status | Things tag | TodoWrite status |
|---|---|---|
open | 進行中 | in_progress |
open | TODO またはタグなし | pending |
open | レビュー | in_progress([REVIEW]付記) |
open | ブロック | pending([BLOCKED]付記) |
completed | - | completed |
canceled | - | 除外(同期対象外) |
ユーザー確認
TodoWriteを更新
「ThingsのステータスをSDDに反映して」と依頼されたら:
Things 3から該当プロジェクトのタスクを読み取る
docs/sdd/tasks/と照合
[TASK-XXX]のIDで照合ステータスの差分を検出
| Things status | Things tag | SDD ステータス |
|---|---|---|
open | TODO | TODO |
open | 進行中 | IN_PROGRESS |
open | レビュー | REVIEW |
open | ブロック | BLOCKED |
completed | - | DONE |
canceled | - | 除外(同期対象外) |
差分をユーザーに提示
ユーザー承認後にdocs/sdd/tasks/を更新
| ユースケース | コマンド | 説明 |
|---|---|---|
| 単一のTo-Do作成 | things:///add | 1つのタスクを素早く追加 |
| プロジェクト作成 | things:///add-project | 見出し付きプロジェクトを作成 |
| 複数アイテム一括作成 | things:///add-json | 複雑な構造を一度に送信 |
| 既存アイテム表示 | things:///show | Things内のリストを表示 |
| 検索 | things:///search | Things内をキーワード検索 |
すべてのパラメータはURLエンコード(パーセントエンコーディング)が必要です:
タイトル: "APIの実装"
→ エンコード後: API%E3%81%AE%E5%AE%9F%E8%A3%85
重要: URLエンコードにはBashのpython3 -cやjqを使用してください。手動でのエンコードは行いません。
# python3を使ったURLエンコードと実行
python3 -c "
import urllib.parse
params = {
'title': 'APIエンドポイントの実装をレビュー',
'notes': 'Claude Codeが実装したPOST /api/auth/loginのレビュー\n\n受入基準:\n- テスト通過\n- ESLintエラーゼロ',
'when': 'today',
'tags': 'Claude Code,レビュー',
'list': 'プロジェクト名'
}
query = urllib.parse.urlencode(params, quote_via=urllib.parse.quote)
url = f'things:///add?{query}'
print(url)
"
python3 -c "
import urllib.parse
params = {
'title': 'SDD Phase 1: 基盤構築',
'notes': 'SDDタスク管理 - Phase 1のタスク一覧',
'when': 'today',
'tags': 'SDD,Claude Code',
'to-dos': '\n'.join([
'TASK-001: データモデルの定義',
'TASK-002: APIエンドポイントの実装',
'TASK-003: 認証ミドルウェアの実装',
])
}
query = urllib.parse.urlencode(params, quote_via=urllib.parse.quote)
url = f'things:///add-project?{query}'
print(url)
"
python3 -c "
import urllib.parse, json
data = [
{
'type': 'project',
'attributes': {
'title': 'SDD Phase 1: 基盤構築',
'notes': 'Claude Codeで管理中のSDDタスク',
'when': 'today',
'tags': ['SDD', 'Claude Code'],
'items': [
{
'type': 'heading',
'attributes': {
'title': 'データ層'
}
},
{
'type': 'to-do',
'attributes': {
'title': 'TASK-001: データモデルの定義',
'notes': '推定工数: 1時間\nステータス: TODO',
'tags': ['TODO']
}
},
{
'type': 'to-do',
'attributes': {
'title': 'TASK-002: APIエンドポイントの実装',
'notes': '推定工数: 2時間\nステータス: TODO\n依存: TASK-001',
'tags': ['TODO']
}
},
{
'type': 'heading',
'attributes': {
'title': 'ミドルウェア層'
}
},
{
'type': 'to-do',
'attributes': {
'title': 'TASK-003: 認証ミドルウェアの実装',
'notes': '推定工数: 1.5時間\nステータス: IN_PROGRESS\n依存: TASK-001',
'tags': ['IN_PROGRESS']
}
}
]
}
}
]
json_str = json.dumps(data, ensure_ascii=False)
encoded = urllib.parse.quote(json_str)
url = f'things:///add-json?data={encoded}'
print(url)
"
# macOSで直接実行
open "things:///add?title=..."
# URLが長い場合は変数に格納して実行
URL=$(python3 -c "...URL生成スクリプト...")
open "$URL"
注意: openコマンドはmacOSでのみ動作します。実行前にOSを確認してください。
SDDタスクのステータスをThingsの状態にマッピングします:
| SDD ステータス | Things 状態 | タグ | when |
|---|---|---|---|
| TODO | 未完了 | TODO | (設定なし) |
| IN_PROGRESS | 未完了 | 進行中 | today |
| REVIEW | 未完了 | レビュー | today |
| DONE | 完了 | 完了 | (設定なし) |
| BLOCKED | 未完了 | ブロック | someday |
docs/sdd/tasks/
├── index.md → Things プロジェクト(全体)
├── phase-1/
│ ├── task-001.md → Things To-Do(見出し「Phase 1」配下)
│ ├── task-002.md → Things To-Do
│ └── task-003.md → Things To-Do
└── phase-2/
├── task-004.md → Things To-Do(見出し「Phase 2」配下)
└── task-005.md → Things To-Do
マッピング結果:
Things プロジェクト: [プロジェクト名] SDDタスク
├── 見出し: Phase 1 - [フェーズ名]
│ ├── To-Do: TASK-001: [タスク名]
│ ├── To-Do: TASK-002: [タスク名]
│ └── To-Do: TASK-003: [タスク名]
└── 見出し: Phase 2 - [フェーズ名]
├── To-Do: TASK-004: [タスク名]
└── To-Do: TASK-005: [タスク名]
タスクの受入基準はThingsのチェックリストにマッピングします:
# 受入基準 → チェックリスト
{
"type": "to-do",
"attributes": {
"title": "TASK-001: データモデルの定義",
"checklist-items": [
{"title": "prisma/schema.prismaにUserモデルが定義されている"},
{"title": "prisma migrateが正常に実行できる"},
{"title": "TypeScript型定義が自動生成される"}
]
}
}
1. docs/sdd/tasks/のindex.mdを読み取る
↓
2. 各フェーズのタスク詳細を読み取る
↓
3. ユーザーに送信対象を確認(全タスク or フィルタ)
↓
4. タスク構造をThings JSONにマッピング
↓
5. add-json URLを生成
↓
6. ユーザーに確認してURL実行
↓
7. 完了を報告
[things-url] ステップ 1/4: docs/sdd/tasks/を読み取り中...
docs/sdd/tasks/から以下のタスクを検出しました:
Phase 1: 基盤構築(3タスク)
- TASK-001: データモデルの定義 [TODO]
- TASK-002: APIエンドポイントの実装 [IN_PROGRESS]
- TASK-003: 認証ミドルウェア [TODO]
Phase 2: UI実装(2タスク)
- TASK-004: ログイン画面 [TODO]
- TASK-005: ダッシュボード [TODO]
すべてのタスクをThingsに送信しますか?
それとも特定のフェーズ・ステータスでフィルタしますか?
[things-url] ステップ 2/4: Things JSON を構築中...
以下の構造でThingsに送信します:
プロジェクト: [プロジェクト名] SDDタスク
├── Phase 1: 基盤構築
│ ├── TASK-001: データモデルの定義 [タグ: TODO]
│ ├── TASK-002: APIエンドポイントの実装 [タグ: 進行中, when: today]
│ └── TASK-003: 認証ミドルウェア [タグ: TODO]
└── Phase 2: UI実装
├── TASK-004: ログイン画面 [タグ: TODO]
└── TASK-005: ダッシュボード [タグ: TODO]
この内容でURLを生成してよろしいですか?
[things-url] ステップ 3/4: Things URL を生成中...
URLを生成しました。macOS環境のため直接実行します。
# URL生成と実行
URL=$(python3 -c "
import urllib.parse, json
# ... JSON構築とエンコード ...
")
open "$URL"
[things-url] ステップ 4/4: 完了
Things 3に以下を送信しました:
- プロジェクト: 1件
- 見出し: 2件
- To-Do: 5件
Things 3アプリで確認してください。
1. 現在のTodoWriteタスクを取得
↓
2. Things To-DoのJSON配列に変換
↓
3. ステータスに応じたタグ・when設定
↓
4. add-json URLを生成・実行
↓
5. 完了を報告
変換例:
TodoWriteの状態:
- [x] TASK-001: データモデルの定義(completed)
- [>] TASK-002: APIエンドポイントの実装(in_progress)
- [ ] TASK-003: 認証ミドルウェア(pending)
Things JSONへの変換:
[
{
"type": "to-do",
"attributes": {
"title": "TASK-001: データモデルの定義",
"completed": true,
"tags": ["完了"]
}
},
{
"type": "to-do",
"attributes": {
"title": "TASK-002: APIエンドポイントの実装",
"when": "today",
"tags": ["進行中"]
}
},
{
"type": "to-do",
"attributes": {
"title": "TASK-003: 認証ミドルウェア",
"tags": ["TODO"]
}
}
]
読み取り機能を使用する前に、macOS環境であることを確認します:
if [[ "$(uname)" != "Darwin" ]]; then
echo "読み取り機能はmacOS環境でのみ利用可能です"
exit 1
fi
[things-url] ステップ 1/3: macOS環境を確認中...
[things-url] ステップ 2/3: Things 3から今日のタスクを読み取り中...
osascript <<'APPLESCRIPT'
tell application "Things3"
set todoList to to dos of list "Today"
set output to ""
set openCount to 0
set doneCount to 0
repeat with t in todoList
set taskName to name of t
set taskStatus to status of t
if taskStatus is not canceled then
set taskTagNames to name of tags of t
set tagStr to ""
repeat with i from 1 to count of taskTagNames
if i > 1 then set tagStr to tagStr & ", "
set tagStr to tagStr & item i of taskTagNames
end repeat
set output to output & "- " & taskName & " [" & taskStatus & "]"
if tagStr is not "" then
set output to output & " (tags: " & tagStr & ")"
end if
set output to output & linefeed
if taskStatus is open then
set openCount to openCount + 1
else
set doneCount to doneCount + 1
end if
end if
end repeat
if output is "" then
return "(今日のタスクはありません)"
end if
set totalCount to openCount + doneCount
set output to output & linefeed & "合計: " & totalCount & "件(未完了: " & openCount & "件、完了: " & doneCount & "件)"
return output
end tell
APPLESCRIPT
[things-url] ステップ 3/3: 完了
Things 3「今日」のタスク一覧:
- [TASK-001]: データモデルの定義 [open] (tags: 進行中, SDD)
- [TASK-002]: APIエンドポイントの実装 [open] (tags: TODO, SDD)
- レビュー依頼への対応 [open] (tags: レビュー)
- ミーティング準備 [completed]
合計: 4件(未完了: 3件、完了: 1件)
osascript <<'APPLESCRIPT'
tell application "Things3"
set projList to projects
set output to ""
repeat with p in projList
if status of p is open then
set projName to name of p
set todoList to to dos of p
set openCount to 0
set doneCount to 0
repeat with t in todoList
if status of t is open then
set openCount to openCount + 1
else if status of t is not canceled then
set doneCount to doneCount + 1
end if
end repeat
set output to output & "## " & projName & " (未完了: " & openCount & ", 完了: " & doneCount & ")" & linefeed
repeat with t in todoList
set taskName to name of t
set taskStatus to status of t
if taskStatus is open then
set output to output & " - [ ] " & taskName & linefeed
else if taskStatus is not canceled then
set output to output & " - [x] " & taskName & linefeed
end if
end repeat
set output to output & linefeed
end if
end repeat
if output is "" then
return "(アクティブなプロジェクトはありません)"
end if
return output
end tell
APPLESCRIPT
「Claude Code」タグや「SDD」タグが付いたタスクのみを取得する場合。全ビルトインリストおよびプロジェクト内を横断検索します:
osascript <<'APPLESCRIPT'
tell application "Things3"
set targetTag to "SDD"
set listNames to {"Inbox", "Today", "Upcoming", "Anytime", "Someday"}
set output to ""
-- 各ビルトインリストを検索
repeat with listName in listNames
set currentList to contents of listName
repeat with t in to dos of list currentList
set tagNames to name of tags of t
if tagNames contains targetTag then
set taskName to name of t
set taskStatus to status of t
if taskStatus is open then
set output to output & "- [ ] [" & currentList & "] " & taskName & linefeed
else if taskStatus is not canceled then
set output to output & "- [x] [" & currentList & "] " & taskName & linefeed
end if
end if
end repeat
end repeat
-- 各プロジェクト内も検索
repeat with p in projects
if status of p is open then
repeat with t in to dos of p
set tagNames to name of tags of t
if tagNames contains targetTag then
set taskName to name of t
set taskStatus to status of t
if taskStatus is open then
set output to output & "- [ ] [" & name of p & "] " & taskName & linefeed
else if taskStatus is not canceled then
set output to output & "- [x] [" & name of p & "] " & taskName & linefeed
end if
end if
end repeat
end if
end repeat
if output is "" then
return "(「" & targetTag & "」タグのタスクはありません)"
end if
return output
end tell
APPLESCRIPT
1. osascriptでThings 3から対象リスト/プロジェクトのタスクを取得
↓
2. 現在のTodoWriteの状態と比較
↓
3. 差分を検出してユーザーに提示
↓
4. ユーザー承認
↓
5. TodoWriteを更新
↓
6. 完了を報告
差分提示の例:
[things-url] Things → TodoWrite 同期
以下の変更を検出しました:
変更あり:
[TASK-001]: データモデルの定義
Things: completed → TodoWrite: in_progress → 更新: completed
[TASK-003]: 認証ミドルウェア
Things: open (tag: 進行中) → TodoWrite: pending → 更新: in_progress
変更なし:
[TASK-002]: APIエンドポイントの実装 (in_progress)
TodoWriteを更新してよろしいですか?
1. osascriptでThings 3からSDDプロジェクトのタスクを取得
↓
2. `[TASK-XXX]` IDでdocs/sdd/tasks/の各タスクと照合
※ `[TASK-XXX]`形式のIDを持つタスクのみ同期対象とする
※ `[TASK-XXX]`パターンに一致しないファイルはスキップして保持する
↓
3. ステータスの差分を検出
↓
4. ユーザーに差分を提示
↓
5. ユーザー承認
↓
6. docs/sdd/tasks/のタスクファイルを更新
※ `[TASK-XXX]` IDで照合されたファイルのみ更新する
※ 非SDDタスク(外部作成のファイル)は変更・削除しない
↓
7. TodoWriteも連動更新
※ 非SDDタスクのtodo(contentが`[Phase-`または`[BLOCKED] [Phase-`で始まらないもの)はそのまま保持する
↓
8. 完了を報告
既存のThingsアイテムを更新するにはauth-tokenが必要です:
auth-tokenはThings 3の設定画面から確認できます:
- Mac: Things → Settings → General → Enable Things URLs → Manage
- iOS: Settings → General → Things URLs
auth-tokenをお知らせください(このスキルでは保存しません)。
auth-tokenはコマンドライン引数に直書きせず、環境変数経由で安全に渡します:
# ステップ1: ユーザーからauth-tokenを受け取り環境変数に設定
read -s -p "Things auth-token: " THINGS_AUTH_TOKEN && echo
# ステップ2: 環境変数経由でpython3に渡し、直接openコマンドで実行
THINGS_AUTH_TOKEN="$THINGS_AUTH_TOKEN" python3 -c "
import urllib.parse, subprocess, os
auth_token = os.environ['THINGS_AUTH_TOKEN']
params = {
'id': 'THINGS_ITEM_ID',
'auth-token': auth_token,
'when': 'today',
'append-notes': '\n\n[更新: YYYY-MM-DD] ステータスがIN_PROGRESSに変更されました'
}
query = urllib.parse.urlencode(params, quote_via=urllib.parse.quote)
url = f'things:///update?{query}'
subprocess.run(['open', url])
"
セキュリティ上の注意:
~/.bash_history)やプロセス一覧(ps)に残るおそれがありますread -sで標準入力から受け取り、環境変数経由でスクリプトに渡してくださいprint()で標準出力に表示しないでくださいプロジェクトをThingsのAreaに配置する場合:
# add-projectでareaを指定
params = {
'title': 'SDD Phase 1',
'area': '開発プロジェクト', # 既存のArea名
# ...
}
# add-jsonでarea指定
{
"type": "project",
"attributes": {
"title": "SDD Phase 1",
"area": "開発プロジェクト",
# ...
}
}
osascript)はmacOS環境でのみ動作。Linux/Windows環境では書き込み(URL生成)のみ利用可能openコマンドはmacOSのみ: Linux/Windows環境ではURLの提示のみ良い例: フェーズごとにプロジェクトを分けて送信
プロジェクト: Phase 1 - 基盤構築(5タスク)
プロジェクト: Phase 2 - UI実装(3タスク)
悪い例: 全タスクを1つのプロジェクトに詰め込む
プロジェクト: 全タスク(50タスク) # 見通しが悪い
一貫したタグ付けでフィルタリングを容易にします:
推奨タグ:
Claude Code: Claude Codeから送信されたタスクであることを示すSDD: SDDプロセスのタスクであることを示すTODO、進行中、レビュー、ブロックThings側で人間が判断できるよう、十分な文脈をnotesに含めます:
notes に含めるべき情報:
- タスクの目的・背景
- 受入基準(チェックリストにも反映)
- 依存関係
- 関連ファイルパス
- 推定工数
大きな進捗があったタイミングで再送信を提案します:
このスキルは将来的に以下の機能追加を検討しています: