remctl について
RemCTLは、macOSのRemindersを操作するCLI兼MCPサーバーです。AIクライアントからリマインダーを読み書きしたいユーザー向けで、署名済みホストアプリが必要な権限を持ち、書き込みにはEventKitまたは任意のReminderKitを使います。データベースを直接変更しません。
主な機能
- 01今日、近日、期限超過、フラグ付きの項目を取得
- 02リマインダーを検索し、リストや詳細を表示
- 03リマインダーの作成、更新、完了、フラグ設定、削除
- 04リストの管理と最近削除した項目の復元
- 05権限診断によるサービス状態の確認
活用シーン
- 01AIクライアントで今日または期限超過の項目を確認
- 02特定のリスト内のリマインダーを検索・確認
- 03リマインダーを作成または期限を変更
- 04リマインダーを完了、フラグ設定、復元
MCP 対応
RemCTLはローカルMCPサーバーを稼働させ、リマインダーとリストの読み書きツールをMCPクライアントに公開します。Tailscale経由で他のデバイスにもツールを提供でき、リマインダー操作にはCLIより専用MCPツールを使うよう案内しています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ viticci/ remctl --skill remctlインストール後、Claude Code で/remctlを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdCHANGELOG.mdLICENSE.gitignore.agents/plugins/marketplace.json.claude-plugin/marketplace.jsondocs/desktop-capabilities.mdarchitecture.mddesktop-plugin.mdcommands.mdmcp.mdhermes.mdinstallation.mddocs/notes/README.mdevent-demo-results.jsonaudit-2026-10-02.mddistribution-permission-continuity.jsondistribution-validation-2026-09-30.mdicon-provenance.mdevents-2026-09-30.mdissues-57-59-2026-10-03.mddesktop-validation-2026-09-30.mdmacos27-compat-review.mdpr-fixes-2026-10-02.mdrelease-2.0.4-validation.mdrelease-2.1.0-validation.mdrelease-2.0.0-validation.mdprivate-api-audit-2026-08-12.mdrelease-2.0.2-validation.mdrelease-2.0.3-validation.md詳細
RemCTL
RemCTL は、macOS 用のリマインダー CLI および MCP サーバーです。データ操作コマンドは、macOS のアクセス許可を保持する署名済みアプリ RemCTL Capability Host.app 内で実行されます。ご自身のプロセスにフルディスクアクセス、リマインダー、またはオートメーションへのアクセスを許可する必要はありません。読み取りはローカルのリマインダーデータベースから行います。書き込みは EventKit を経由するか、ユーザーが --private を指定した場合は Apple の非公開 ReminderKit フレームワークを経由します。RemCTL がデータベースに直接書き込むことはありません。
ローカル MCP サーバーを使用する
この Mac 上でローカルに実行されている RemCTL 2.0 サーバー mcp__remctl__<tool> を、すべてのリマインダーの読み取りと書き込みに使用してください。Mac Remote コネクターの RemCTL ラッパーよりもこちらを優先してください。リマインダー操作のために CLI をシェルから実行したり、MCP 接続に失敗した際に CLI へ暗黙的にフォールバックしたりしないでください。
専用ツールは today、upcoming、overdue、flagged、search、show_list、lists、get_list、get_reminder、resolve_location、create_reminder、update_reminder、set_completion、set_flagged、delete_reminder、recently_deleted、restore_reminder、create_list、update_list、doctor です。これらは引数を検証し、structuredContent を返します。リストの結果では、行が items に格納され、count が付与されます。呼び出しが成功したと判断する前に、isError と structuredContent.error を確認してください。
専用ツールのない操作(非公開メタデータなど)に限り、run を使用してください。正確な引数項目を並べた args 配列を渡し、--json を含め、許可された破壊的操作には --force を追加してください。この場合も MCP 経由で実行されます。run は mcp、onboard、setup、permissions、completion、open を拒否します。シェルコマンドは、インストール、接続の修復、アクセス許可の設定、またはユーザーが明示的に CLI の使用を求めた場合に限り使用します。ツールが見つからない場合は、ローカルの登録状態を調査または修復して、クライアントを再接続してください。
MCP ツールの引数の例:
today({"include_overdue":true})
show_list({"list":"Work"})
get_reminder({"reminder_id":23880})
create_reminder({"title":"Research","list":"Work","due":"2026-09-20 15:00","priority":"high"})
update_reminder({"reminder_id":23880,"due":"clear"})
search({"query":"macstories.net","list_id":153,"offset":100})
set_completion({"reminder_ids":[23880,23881],"completed":true})
get_list({"list":"Shopping"})
create_reminder({"title":"Research","list":"Projects","private":true,"tags":["remctl"],"url":"https://example.com","section":"Research","subtasks":["Outline"]})
resolve_location({"query":"Piazza Navona, Rome"})
update_reminder({"reminder_id":23880,"private":true,"location_address":"Piazza Navona, Rome","location_title":"Stamps","radius":150})
run({"args":["sections","--json"]})
run({"args":["edit","23880","--private","--set-tags","remctl,work","--json"]})
以下のコマンド構文は、基盤となるオプションを説明するものであり、シェルを使用する指示ではありません。利用できる場合は名前付きの専用 MCP ツールを使い、それ以外の場合は remctl 実行ファイルを省いて、その構文を run.args に変換してください。現在の型付き引数の仕様と接続の詳細は、docs/mcp.md をお読みください。呼び出しの前に、現在のツールスキーマを確認してください。create_reminder と update_reminder では、同期タグ、リッチリンク、セクション、サブタスク、割り当て、Early Reminders、緊急状態、Groceries の分類、位置情報アラームに private: true を指定します。指定しない場合、これらのフィールドは拒否され、url はメモに追加され、create_reminder の tags は #hashtags になります。update_list は private: true を指定すると、Groceries リストに変換します。画像、並べ替え、グループ、スマートリスト、テンプレートには、引き続き run を使用します。
セットアップと診断
一度だけインストールしてオンボーディングを行います。ユーザーはリリースのディスクイメージから「Install RemCTL」を開くか、チェックアウトからビルドします。
cd /path/to/remctl && ./install.sh --from-source --bootstrap
remctl onboard
通常の ./install.sh は、代わりに公証済みのリリースをダウンロードしてインストールします。どちらの方法でも、RemCTL の保護された Python をインストールするため、ユーザーの管理者パスワードを一度だけ求めます。
onboard は、macOS の権限設定、ヘルスチェック、Mac 上の AI アプリへの接続、さらに任意で Tailscale 経由でユーザーのほかのデバイスにツールを提供するためのガイド付きフローです。変更を行う前に、その都度確認します。onboard --json は確認を行い、検出したアプリを確認なしで報告します。フルディスクアクセスのヘルパーが開いたら、そこでいったん停止します。ユーザーはシステム設定で正確なホストアプリ(doctor の capabilityHost.app.path)を追加してから、ホストを再起動する必要があります。
launchctl kickstart -k "gui/$(id -u)/net.macstories.remctl.capability-host"
doctor MCP ツールで準備状況を確認します。MCP 自体を起動できない場合は、次のセットアップ診断を使用します。
remctl doctor --for-agent --json
access.effective を確認します。準備完了とは、route: "capabilityHost"、ready: true、capabilityHost.fullReady: true、capabilityHost.protocolVersion: 2、capabilityHost.privateProtocol.compatible: true であり、capabilityHost.permissions の fullDiskAccess、reminders、automation がすべて authorized であることを意味します。access.direct が示すのはユーザー自身のプロセスのみで、通常はブロックされていますが、それで問題ありません。準備状況が確認できたら、タスクごとに doctor を実行する必要はありません。
AI アプリを接続します。
remctl mcp install --client claude-code # claude mcp add
remctl mcp install --client codex # codex mcp add
remctl mcp install --client claude-desktop # Claude Desktop and Cowork; the user must restart Claude
remctl mcp install --client tailscale # HTTPS endpoint for the user's other tailnet devices
remctl mcp status
remctl mcp config --format tailscale # commands for another device; the token stays in its Keychain
tailnet トークンには、ユーザーのリマインダーの読み取りと変更を行う権限があります。ユーザーから依頼された場合に限り remctl mcp token で表示し、コマンド、シェルファイル、設定ファイル、チャットには絶対に書き込まないでください。ユーザーは別のデバイスで security add-generic-password -U -a remctl -s remctl-mcp-token -w を実行して保存します。このコマンドを実行すると、トークンの入力を求められます。
Codex プラグインには RemCTL 接続が組み込まれているため、remctl mcp install は Codex への接続を設定しません。以前のインストールによる接続が残っていると、プラグインのサイドバー項目が表示されません。remctl doctor はこれを重複として報告し、remctl mcp remove --client codex で削除できます。その後、ユーザーは Codex を再起動します。docs/desktop-plugin.md を参照してください。
Claude Code プラグイン(remctl@remctl)にも独自の接続があるため、ツール名は mcp__plugin_remctl_remctl__<tool> となります。remctl mcp install は Claude Code への接続も設定しません。remctl doctor は以前の接続を重複として報告し、remctl mcp remove --client claude-code で削除できます。README.md を参照してください。
アップグレードでは、インストール時の署名方法を維持してください。ソースからビルドする場合(Apple Development 証明書で署名された 2.0 のプレリリースを含む)は git pull && ./install.sh --from-source、ダウンロードする場合は新しいリリースの「Install RemCTL」(または ./install.sh)を使用します。インストーラーは --migrate-signing が指定されていない限り、署名方法の変更を拒否します。このフラグを追加するとフルディスクアクセスを再度許可する必要があるため、ユーザーから切り替えを依頼された場合以外は追加しないでください。1.7.1 以降では、古いファイルを置き換える前にインストーラーが Terminal で確認を求めます。ターミナルがない場合は、一度だけ --adopt-existing-install が必要です。その後、doctor を実行します。onboard を再度実行するのは、doctor が権限の問題を報告した場合に限ります。ホストアプリを手動でコピーしたり、再署名したりしないでください。また、通常の対処として macOS のプライバシーレコードをリセットしないでください。Terminal、Python、Hermes、Codex、Claude には、フルディスクアクセス、リマインダー、オートメーションを絶対に許可しないでください。これらの権限が必要なのはホストだけです。
常に適用されるルール
info、edit、done、undone、delete、link、open、subtasksには、JSON の数値idを使用してください。deepLinkの UUID は絶対に渡さないでください。- 期限は決定的な値を指定してください。終日のリマインダーには
YYYY-MM-DD、時間指定のリマインダーにはYYYY-MM-DD HH:MMを使用し、ユーザーのタイムゾーンに基づいて解決してください。clearは期限を削除します。日付を解析できない場合、コマンドは書き込み前に停止し、例とともにcode: "invalid_due_date"を返します。値を修正して再試行してください。 - 破壊的なコマンド(
delete、list-delete、section-delete、group-delete、smart-list-delete、template-delete)では、--jsonを指定する場合、またはターミナルがない場合に--forceが必要です。指定しないと何も書き込まれず、stderr にcode: "confirmation_required"が出力されます。削除はユーザーの許可がある場合に限ってください。明示的な削除リクエストがあれば、すでに許可されています。 - リストの指定には名前または
--list-idを使用し、両方を指定しないでください。名前は完全一致、大文字・小文字を区別しない一致、正規化した一致の順に解決されます(Weekly 513は🗓️ Weekly 513に一致します)。一致するリストが複数ある場合、コマンドは停止して候補の ID を一覧表示します。--list-idを使用してください。グループはリマインダーへの書き込み対象として無効です。 - 繰り返し、アラーム、優先度、メモ、通常のリスト間移動には
--privateを指定しないでください。これらは EventKit の機能です。--privateはプライベートメタデータのメタデータに対してのみ使用するか、ユーザーから求められた場合に使用してください。 - タスクで限定的なデータを明示的に受け入れる場合を除き、
--via-eventkitは使用しないでください。このオプションは、数値 ID を受け付けるコマンドでは使用できないeventKitIdの値を返し、セクション、タグ、プライベートフィールドも返しません。 searchは、アクティブなリマインダーのタイトル、メモ、保存されたリッチリンクを、大文字・小文字とアクセントを区別せずに検索します。完了済みのリマインダーを含めるには--completedを追加してください。MCP ツールは常にページを返します。hasMoreが true の間は、offsetにnextOffsetを設定して再度呼び出してください。listまたはlist_idで範囲を指定してください。done、undone、delete(MCP のreminder_ids)で指定できる ID は最大 50 件です。succeeded、failed、uncertainを確認してください。uncertainの ID は、先にget_reminderを実行せずに再試行しないでください。繰り返しリマインダーを完了すると、実行するたびに次の回が設定されます。- JSON は Reminders のテキストをそのまま保持します。人間向けの出力では制御文字が取り除かれ、JSON には含まれないマーク(
⚑、!!!、🔗、🌄)が追加されます。 - Reminders の SQLite データベースを自分で読み書きしないでください。
読み取り
| タスク | CLI | MCP ツール |
|---|---|---|
| 今日が期限、または期限超過 | remctl today --json | today |
| 今後 N 日間 | remctl upcoming 7 --json | upcoming |
| 期限超過のみ | remctl overdue --json | overdue |
| フラグ付き | remctl flagged --json | flagged |
| 検索 | remctl search "query" [--completed] [--list NAME|--list-id ID] [--limit N --offset N] --json | search |
| 1 つのリストを Reminders の順序で表示 | remctl show Work --json、remctl show --list-id 153 --json | show_list |
| ID 付きですべてのリストを表示 | remctl lists --json | lists |
| セクション ID と共有相手を含む 1 つのリスト | remctl list-info Work --json | get_list |
| 位置アラームの住所を確認 | remctl location-lookup "ADDRESS" --json | resolve_location |
| 1 つのリマインダーの全情報 | remctl info 23880 --json | get_reminder |
| グループ、セクション、タグ、サブタスク、共有相手、統計、スマートリスト、テンプレート | remctl groups --json、sections --json、tags --json、subtasks ID --json、sharees LIST --json、stats --json、smart-lists --json、templates --json、template-info NAME --json | run |
行のフィールド:id、title、list、completed、flagged、urgent、priority、subtaskCount、dueDate、allDay、deepLink。存在する場合は、さらに notes、section、recurrence、attachments が含まれます。info では、さらに alarms、earlyReminder、tags、subtasks、assignment、リッチリンクの url が追加されます。dueDate は実際の期限日です。Reminders が別の時刻にリマインダーを表示する場合、たとえば絶対時刻のアラームが以前の時刻を指している場合は、displayDate が表示されます。Reminders.app ではリマインダーが displayDate に表示され、その日時でラベル付けされます。また、today、overdue、upcoming でも同じ日時に配置されます。attachments[].path はホストで確認されたファイルの場所です。この Mac にダウンロードされていないファイルの場合は resolved: false とともに null になります。これは、プロセスがファイルを開けることを意味するものではありません。
書き込み
| タスク | CLI | MCP ツール |
|---|---|---|
| 作成 | remctl add "Title" -l Work -d "2026-05-20 15:00" -p high --json | create_reminder |
| フィールドを編集 | remctl edit 23880 --title "New" -d clear -n "Notes" --json | update_reminder |
| リストに移動 | remctl edit 23880 -l Work --json | list または list_id を指定して update_reminder |
| 完了、未完了に戻す | remctl done 23880 [23881 …] [--date 2026-05-27] --json、remctl undone 23880 --json | reminder_id または reminder_ids を指定して set_completion |
| フラグを付ける、解除する | remctl flag 23880 --json、remctl unflag 23880 --json | set_flagged |
| 削除 | remctl delete 23880 [23881 …] --force --json | reminder_id または reminder_ids を指定して delete_reminder |
| リストを作成または編集 | remctl list-create NAME --json、remctl list-rename、remctl list-edit … --private | create_list、update_list |
| 繰り返し、アラーム | remctl add "Standup" -d "tomorrow 09:30" --recurrence "weekly mon,wed,fri" --alarm 15m --json | due を指定した create_reminder / update_reminder |
| 順序を変更 | remctl reminder-move 23880 --before 23881 --private --json | run |
create_reminderはstatus: "created"、次の呼び出しに使う数値のid、および CloudKit のcloudKitIdを返します。CLI のadd --jsonでは名前が異なり、idは UUID、numericIdは数値です。数値を読み戻せなかった場合、create_reminderにidは含まれず、numeric_id_unavailableという警告が返されます。タイトルを指定してsearchまたはshow_listでリマインダーを探してください。add -f/--flagはまずリマインダーを作成し、自動化によってフラグを設定します。フラグ設定に失敗しても、結果はcreatedのままで、warnings: ["flag_not_set: …"]が含まれます。addを再実行しないでください。代わりに、返された ID にフラグを設定してください。- 通常、
edit -lとedit --list-idでは ID は維持されます。EventKit が単純な移動(サブタスクを持つ親項目、共有リストの境界をまたぐ移動)を拒否した場合、RemCTL は ReminderKit を通じて複製と削除を行い、method: "clone-delete"、oldId、新しいidを返します。新しいidを使ってください。他の編集を適用する前に、移動してください。 edit -dは、古い期限時刻に一致する絶対アラームを移動するため、Reminders に表示される時刻は期限日に合わせて変わります。Reminders では、処理したデバイスごとにアラームのコピーが保持されることがあり、その場合はすべてのコピーが移動します。日付のみの移動先を指定すると、これらのコピーは午前 0 時に移動するのではなく、削除されます。明示的に--alarmを指定した場合は、そちらが優先されます。リマインダーに他のアラームがある場合、それらのアラームはそのままです。edit -d clearは一致するアラームを削除しますが、繰り返しリマインダーは期限日を維持する必要があります。そのため、同じ編集で--recurrence clearも渡さない限り、editはcode: "repeating_reminder_requires_due_date"を返して拒否し、何も変更しません。done --dateに指定できるのはYYYY-MM-DDまたはYYYY-MM-DD HH:MMのみで、繰り返しリマインダーには指定できません。引数なしのdoneは繰り返しを次回に進めます。flag/unflagは、status: "flagged"または"unflagged"で成功します。失敗すると、終了コード 1 でcode: "applescript_flag_failed"が stderr に出力され、フラグは変更されません。よくある原因は、ホストに Automation へのアクセス権がないこと、または Reminders が 120 秒以内に応答しなかったことです。代わりにedit ID --private --flaggedまたは--no-flaggedを使うと、ReminderKit を通じてフラグを設定できます。reminder-moveには--privateが必要です。同じリスト内で移動する場合、アンカーは同じリスト内になければなりません。--smart-list NAMEまたは--smart-list-id IDは、セクションのないカスタムスマートリストの順序を変更します。セクションのあるスマートリストでは拒否されます。成功するとverified: trueが返されます。
繰り返しの構文:daily、weekly、monthly、yearly。頻度の直後に間隔を指定できます(daily x2。N は 1~999)。週次では曜日を指定できます(weekly mon,wed,fri)。月次では日付(monthly 1,15)または曜日の序数指定(monthly 4th-fri、monthly 1st-mon,3rd-mon、monthly last-fri)を使えますが、両者を混在させることはできません。5th-fri より last-fri を優先してください。edit --recurrence clear(または none、never)は繰り返しルールを削除します。無効な繰り返し、アラーム、優先度の値は、書き込み前にエラーになります。繰り返しと相対アラーム(15m、1h、1d)には期限日が必要です。add では -d(MCP の due)を指定してください。edit では、リマインダーにすでに設定されている期限日も使用できます。期限日がない場合、相対アラームは code: "relative_alarm_requires_due_date" で停止し、Reminders は繰り返しリマインダーの保存を拒否します。何も書き込まれません。
最近削除した項目
復元可能なリマインダーを見つけるには、recently_deletedを使用します。hasMoreがtrueの場合はnextOffsetに従ってください。ページ数は親項目を数え、サブタスクはその中にネストされます。削除済みのIDを調べるには、include_deleted: trueを指定してget_reminderを呼び出します。元のリストは利用できない場合があり、削除済みの詳細にはすべての非公開メタデータが含まれるわけではありません。
復元するには、同じアカウント内の復元先となるlistまたはlist_idと、項目のrestoreIdを指定してrestore_reminderを呼び出し、private: trueを指定します。これにより、親項目とそのサブタスクが元のIDのまま復元されます。create_reminderで再作成しないでください。verified: trueは、IDと階層を読み戻したことを意味します。already_restoredは、そのリスト内ですでに有効なIDに対して何も行わず、以前のサブタスクの有無は検証しません。restore_unconfirmedの場合は、IDを調べて「最近削除した項目」を更新してから再試行してください。
Appleは通常、削除したリマインダーを30日間保持します。期限や、データベースの削除フラグに基づく復元可能性を約束しないでください。RemCTLはAppleの復元画面を確認しますが、完全消去機能は公開していません。復元の詳細を参照してください。
非公開メタデータ
--privateは、ReminderKitを通じてリマインダー専用のフィールドを書き込みます。次の用途に使用します。同期されるリッチリンク(--url)、同期されるタグ(-tは追加、--set-tagsは置換、--remove-tagと--clear-tagsは削除)、セクション(--section、--section-id、--new-section、およびsection-*コマンド)、共有リストへの割り当て(--assign、--unassign)、サブタスク(--subtask TITLEまたはJSONオブジェクト)、画像添付(--image PATH)、フラグと緊急状態(--flagged、--urgent)、早期リマインダー(--early-reminder 15m|1h|2d|1w|1mo|clear。期限日が必要)、位置アラーム(--latitudeと--longitudeを指定した--location-title、または--location-address。EventKit経由で保存されますが、--privateが必須です)、並べ替え(reminder-move)、リストの外観とピン留め(list-create、list-edit、list-pin、list-unpin)、食料品リスト(--groceries、--grocery)、グループ(group-*)、カスタムスマートリスト(smart-list-*)、テンプレート(template-*)。
remctl add "Research" -l Projects --private --url https://example.com -t remctl --section Research --json
remctl edit 23880 --private --set-tags remctl,work --json
remctl edit 23880 --private --subtask '{"title":"Follow up","due":"2026-06-01","tags":["work"]}' --json
remctl edit 23880 --private --assign [email protected] --json
remctl section-create "Research" -l Projects --private --json
ルール:
- リッチURLには、公開されている
httpまたはhttpsのホストを指定する必要があります。--privateを指定しない場合、--urlは既存のメモ(または--notesで明示的に置き換えたメモ)に追記されます。add -tはタイトルに#hashtagsを追加しますが、edit -tには--privateが必要です。 - リッチリンクと画像は追加のみ可能です。RemCTLは既存のものを削除または置換しません。一般的なファイルとPDFは拒否されます。
--sectionは名前で解決します。同じリスト内に同名のセクションが複数ある場合、RemCTLは空でないものが1つだけならそれを使用し、それ以外の場合は--section-idを使用してください。セクションの作成と名前変更では、重複する名前は拒否されます。--assignには、一意の名前、メールアドレスまたは電話番号、数値の共有相手id、objectUUID、またはmeを指定できます。先にsharees LIST --jsonを呼び出し、アドレスまたはIDを優先してください。--location-address(MCPのlocation_address)は、何かを書き込む前にジオコーディングされます。RemCTLが使用するのは、入力された住所に町名または郵便番号も含まれ、入力された通り名と一致する単一の街路規模の候補のみです。location_not_found、location_ambiguous(candidatesを確認)、location_imprecise(市全体または地域全体)、location_unconfirmed(別の通り、または町名なし。reasonを確認)、location_label_not_address(Home、Work)の場合、何も変更されません。個人的なラベルを自分で住所に変換してはいけません。ユーザーに住所を尋ね、そのラベルを--location-titleに渡してください。- サブタスクのJSONフィールド:
title、notes、due、priority、alarm、recurrence、earlyReminder、url/urls、tags、image/images、flagged、urgent、位置情報フィールド。 - リマインダーの作成後に非公開の処理が失敗すると、
add --jsonはnumericId、failed、errorとともにstatus: "partial"を返します。editで完了してください。addを再実行しないでください。
リスト、グループ、食料品
list-create --color NAMEは EventKit の機能です。正確な#RRGGBBの色、--symbol(公式名称はlist-symbolsに表示されるもののみ)、--emoji、食料品モード、ピン留めには--privateが必要です。list-pin/list-unpinは、名前または--smart-list-idを指定してスマートリストも対象にできます。スマートリストのピン留めはlists --jsonではなく、smart-lists --jsonのpinnedと正の値を持つpinnedDateで確認してください。組み込みスマートリストのピン留めは、汎用 ReminderKit フェッチに対応していないホスト(Tahoe 26.2 および Golden Gate 27.0)では、保存前に失敗します。- グループに格納されるのはリマインダーではなくリストです。
group-create、group-edit(--new-name、--add-list、--remove-list、--before-list、--after-list、--first、--lastを指定する--move-list)、list-create --private --group、group-deleteで移動できるのはコンテナのみです。group-info、groups --json、lists --json、show <group> --jsonで確認してください。 - 食料品リストは、
lists --jsonでlistType: "groceries"と表示されます。そのリストに限り、add --private --groceryとedit --private --groceryを使用し、show <list> --jsonのsectionを確認してください。
スマートリスト
smart-lists --json は読み取り専用です。smart-list-create、smart-list-edit、smart-list-delete には --private が必要で、正確な名前または --smart-list-id を指定してカスタムスマートリストを対象にします。対応フィルター:--any-tag、--tag-match all|any を指定する --tags a,b、--date any|today と --date-today-include-past-due、--date-on、--date-before、--date-after、--date-range START,END、--time morning|afternoon|evening|night、--priority high|medium|low|none(none は優先度なし)またはカンマ区切りのリスト、--flagged、--vehicle connected、1 つの --include-list または --include-list-id、--match all|any、外観設定の --color、--symbol、--emoji。未タグ、日付なし、相対日付、時刻なし、車両の未接続、リストの除外、複数のリストの指定、旧形式の短縮タグ JSON は拒否されます。複数のリストを 1 つのスマートリストにまとめないでください。--filter-json にはフィルターの生 JSON または @path を指定でき、検証されます。--match または --tag-match のみを指定した編集はエラーになります。smart-lists --json で objectUUID、デコードされたフィルター、filter.supported、minimumSupportedVersion が 20220430 であることを確認してください。
テンプレート
templates --json と template-info は読み取り専用です。template-create --from-list NAME|--from-list-id ID [--include-completed]、template-apply、template-delete には --private が必要で、リスト全体のみを対象にします。テンプレート内の個別リマインダーの編集や、iCloud テンプレートリンクの作成ができるとは案内しないでください。templates --json、template-info、適用後は lists --json と show <new list> --json で確認してください。
検証
書き込み後は、MCP 経由でデータを読み戻して確認してください。
- リマインダーのフィールド、タグ、セクション、サブタスク、アラーム、早期リマインダー、リッチリンク、割り当て:
get_reminder({"reminder_id":ID})。 - リストの順序:正確な
listまたはlist_idを指定してshow_list。 - リストの外観と食料品のメタデータ:
lists。グループ:group-infoと--jsonを指定してrun。 - スマートリストとピン留め:
run({"args":["smart-lists","--json"]})。 - テンプレート:
templatesまたはtemplate-infoと--jsonを指定してrun。 - デバイス間の同期が重要な場合は、別のデバイスでも確認するようユーザーに依頼してください。
日付の不一致をデバッグするときは、バグと判断する前に dueDate、displayDate、alarms を比較してください。
エラー
| シグナル | 意味 | 対応 |
|---|---|---|
code: "invalid_due_date" | 期限を解析できません。何も書き込まれていません | YYYY-MM-DD または YYYY-MM-DD HH:MM を指定して再試行してください |
code: "confirmation_required" | --force を指定せずに破壊的なコマンドを実行しました。何も書き込まれていません | 承認を確認してから、--force を追加してください |
status: "partial" | リマインダーは作成されましたが、非公開の手順に失敗しました | 返された numericId を edit してください。再度 add しないでください |
バッチの不確定な ID、code: "completion_uncertain" または "write_uncertain" | 書き込みが反映されている可能性があります | 再試行する前に各 ID で get_reminder を実行してください。繰り返しリマインダーを確認なしに再度完了にしないでください |
code: "location_…" | 住所の検索が拒否されました。何も書き込まれていません | メッセージに従ってください。より詳細な住所、候補の座標を指定するか、ユーザーに尋ねてください |
warnings: ["flag_not_set: …"] | リマインダーは作成されましたが、フラグは設定されていません | 返された ID にフラグを設定してください |
code: "applescript_flag_failed" | フラグは変更されていません | doctor でホストのオートメーション許可を確認するか、edit --private --flagged を使用してください |
| 複数のリストが一致 | リスト名が曖昧です | --list-id を使用してください |
| Capability Host が利用できない、または準備ができていない | ホストが停止しているか、権限が不足しています | remctl doctor --for-agent --json を実行して、表示された修正を行ってください。プロトコルが 2 でない場合は再インストールしてください |
remctl-private is outdated | 封印されたヘルパーが CLI より古いです | 同じ方法で再インストールしてください:./install.sh --from-source または最新リリース |
権限
macOS のプライバシー対象となるのはホストだけです。onboard は不足している場合に限り、リマインダーとオートメーションの権限を要求し、macOS で手動設定のみが許可されているフルディスクアクセスの設定を案内します。フルディスクアクセスを変更した後は、ホストを再起動して doctor を実行してください。doctor がリマインダーまたはオートメーションの拒否を報告した場合は、その「システム設定」パネルで RemCTL Capability Host を有効にしてから、再度 onboard を実行してください。remctl permissions full-disk-access を実行すると、フルディスクアクセスの設定ヘルパーが再度開きます。起動直後のホストは、状態を確認するまでオートメーションを targetNotRunning または unknown と報告する場合があります。リマインダーを開いたままにしておく必要はありません。
非公開 API の変更監査では、インストール済みの remctl-private に {"action":"capabilities"} を送信してください。これは読み取り専用で、saveCalled: false を報告します。インストール済みの世代をライブリリースで確認するには、次のコマンドを実行します。
REMCTL_CAPABILITY_HOST=force python3 scripts/live_private_matrix.py --remctl "$HOME/bin/remctl"