altic-studio について
altic-studioは、AppleScript、Swiftスクリプト、MCPツールでmacOSアプリ、ファイル、ブラウザー、クリップボード、ウィンドウを操作する自動化スキルです。一般的なシステム操作を構造化されたワークフローで扱います。
主な機能
- 01AppleScriptによるmacOSアプリの自動化
- 02MCPによるリマインダー、カレンダー、メモの操作
- 03MCP CDPによるChrome制御
- 04Finderとファイルシステムの操作
- 05クリップボードとウィンドウの管理
- 06Swiftによるスクリーンショットとユーティリティ
活用シーン
- 01連絡先、リマインダー、メモ、予定の管理
- 02Chromeでのページ移動と操作の自動化
- 03Finderでのファイル検索、移動、確認
- 04ウィンドウの配置とアクティブ画面の撮影
MCP 対応
メッセージ、連絡先、リマインダー、カレンダー、メモ、Chrome、ファイル、クリップボード、ウィンドウを操作するMCPツールを提供します。Chromeの自動化にはMCP CDPを使用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ altic-dev/ altic-mcp --skill altic-studioインストール後、Claude Code で/altic-studioを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/calendar-manager.applescriptcapture-active-screen.swiftcapture-screenshot.applescriptclipboard.swiftclose-safari-tab.applescriptclose-safari-window.applescriptcontacts-manager.applescriptcreate-calendar-event.applescriptcreate-note.applescriptdecrease-brightness.applescriptfetch-all-contacts.applescriptget-safari-page-info.applescriptget-safari-tabs.applescriptincrease-brightness.applescriptlist-all-calendar-events-for-day.applescriptmessages-manager.applescriptnavigate-safari.applescriptnotes-manager.applescriptopen-application.applescriptopen-safari-tab.applescriptopen-safari-window.applescriptread-recent-messages.applescriptREADME.mdreload-safari-page.applescriptreminders-manager.applescriptrun-safari-javascript.applescriptsafari-go-back.applescriptsafari-go-forward.applescriptsearch-for-note.applescriptsend-message.applescript詳細
Altic Studio
altic-studio には、次の 2 つの自動化モードがあります。
- macOS アプリとシステム操作向けの AppleScript モード
- Google Chrome のブラウザー制御向けの MCP CDP モード
- Finder とファイルシステムを安全に操作する MCP ファイルモード
- テキスト、ファイル、画像のペーストボード操作向けの MCP クリップボードモード
- macOS アプリとウィンドウを配置する MCP ウィンドウ/ワークスペースモード
また、macOS でアクティブディスプレイのスクリーンショットを撮影する Swift ユーティリティスクリプトや、クリップボードのファイル/画像操作、ウィンドウ/ワークスペース管理用のスクリプトも含まれています。
モード A:AppleScript(macOS アプリ)
- AppleScript は必ず Bash 経由で
osascriptを使用して実行してください。 - 必ずワークスペースのルートを作業ディレクトリとして実行してください。
- スクリプトのパスと引数は引用符で囲んでください。
- 直接スクリプトを呼び出す方法を優先し、明示的に求められない限り Python ラッパー経由で実行しないでください。
コマンドテンプレート:
osascript "skills/altic-studio/scripts/<script>.applescript" [arg1] [arg2] ...
AppleScript の機能
Altic の自動化機能はすべて、skills/altic-studio/scripts 以下のスクリプトから利用できます。
open-application.applescript- 引数:<app_name>send-message.applescript- 引数:<phone_or_handle> <message>messages-manager.applescript- 引数:<list_chats|send_file> ...read-recent-messages.applescript- 引数:<phone_or_handle> <count>fetch-all-contacts.applescript- 引数:なしcontacts-manager.applescript- 引数:<get|create|update> ...set-reminder.applescript- 引数:<text> <YYYY-MM-DD HH:MM> [list_name]reminders-manager.applescript- 引数:<list_lists|list|search|complete|delete|reschedule|update|show> ...create-note.applescript- 引数:<title> <body> [folder]search-for-note.applescript- 引数:<query> [max_results]notes-manager.applescript- 引数:<list_folders|list|get|append|update|delete|move> ...create-calendar-event.applescript- 引数:<title> <YYYY-MM-DD HH:MM> <duration_minutes> [calendar]list-all-calendar-events-for-day.applescript- 引数:<YYYY-MM-DD>calendar-manager.applescript- 引数:<list_calendars|list|search|update|delete|availability|create_recurring> ...open-safari-tab.applescript- 引数:[url]close-safari-tab.applescript- 引数:[tab_index|-1]get-safari-tabs.applescript- 引数:なしswitch-safari-tab.applescript- 引数:<tab_index>run-safari-javascript.applescript- 引数:<javascript_code>navigate-safari.applescript- 引数:<url>reload-safari-page.applescript- 引数:なしsafari-go-back.applescript- 引数:なしsafari-go-forward.applescript- 引数:なしopen-safari-window.applescript- 引数:[url]close-safari-window.applescript- 引数:なしget-safari-page-info.applescript- 引数:なしdecrease-brightness.applescript- 引数:[amount_0_to_1]increase-brightness.applescript- 引数:[amount_0_to_1]turn-up-volume.applescript- 引数:[amount_0_to_100]turn-down-volume.applescript- 引数:[amount_0_to_100]capture-screenshot.applescript- 引数:[output_path] [full|interactive|window]capture-active-screen.swift- 引数:<output_path>(最前面のアプリが表示されているディスプレイ全体を撮影)clipboard.swift- サブコマンド:get-files、set-files <paths...>、save-image <output_path>、set-image <image_path>window-manager.swift- サブコマンド:get_frontmost_app、list_windows、focus_window、move_window、resize_window、center_window、tile_windows、minimize、hide_app、quit_app
Swift コマンドテンプレート(アクティブディスプレイのスクリーンショット用):
swift "skills/altic-studio/scripts/capture-active-screen.swift" "/tmp/active-screen.png"
Swift コマンドテンプレート(ウィンドウ管理用):
swift "skills/altic-studio/scripts/window-manager.swift" "list_windows" '{"include_minimized":false}'
モード B:リマインダー、カレンダー、メモ(MCP)
構造化されたメッセージ、連絡先、リマインダー、カレンダー、メモのワークフローには、MCP ツールを使用します。これらの新しいツールは、ok、action、data、error を含む JSON エンベロープを返します。
削除ツールのデフォルトは dry_run=true です。明示的にユーザーの確認を得てから削除してください。
利用可能なメッセージツール:
list_chats- 引数:[limit]send_file_message- 引数:<recipient> <path> [message] [recipient_type]
利用可能な連絡先ツール:
get_contact- 引数:<identifier>create_contact- 引数:<first_name> <last_name> [organization] [phone] [email] [note]update_contact- 引数:<identifier> [first_name] [last_name] [organization] [phone] [email] [note]
利用可能なリマインダーツール:
list_reminder_lists- 引数:なしlist_reminders- 引数:[list_name] [include_completed]search_reminders- 引数:<query> [list_name] [include_completed]complete_reminder- 引数:<identifier> [list_name]delete_reminder- 引数:<identifier> [list_name] [dry_run]reschedule_reminder- 引数:<identifier> <YYYY-MM-DD HH:MM> [list_name]update_reminder- 引数:<identifier> [list_name] [name] [body] [datetime] [completed] [priority] [flagged]show_reminder- 引数:<identifier> [list_name]
利用可能なカレンダーツール:
list_calendars- 引数:なしlist_calendar_events- 引数:<start_date> <end_date> [calendar_name]search_calendar_events- 引数:<query> [start_date] [end_date] [calendar_name]update_calendar_event- 引数:<identifier> [title] [start_datetime] [duration_minutes] [calendar_name] [location] [notes_text]delete_calendar_event- 引数:<identifier> [start_date] [end_date] [calendar_name] [dry_run]check_calendar_availability- 引数:<start_datetime> <duration_minutes> [calendar_name]create_recurring_event- 引数:<title> <start_datetime> <duration_minutes> <frequency> [interval] [count] [until_date] [calendar_name] [location] [notes_text]
利用可能なメモツール:
list_note_folders- 引数:なしlist_notes- 引数:[folder] [max_results]get_note- 引数:<identifier>append_to_note- 引数:<identifier> <body>update_note- 引数:<identifier> <body>delete_note- 引数:<identifier> [dry_run]move_note- 引数:<identifier> <folder>
ワークフローのルール:
- 対象が曖昧な場合は、変更を加える前に list/search ツールを呼び出します。
identifierは、アプリが提供する ID または完全一致するタイトル/名前として扱います。- 変更処理で複数の候補が返された場合は、ユーザーに確認して対象を特定します。
- 破壊的な操作は、ユーザーが明示的に確認するまで dry-run モードにしておきます。
- ツールを呼び出す前に日付を検証します。日付は
YYYY-MM-DD、日時はYYYY-MM-DD HH:MMを使用します。 send_file_messageでは、既存のグループスレッドを続ける場合、list_chatsの後にrecipient_type="chat"を優先します。電話番号またはメールアドレスのハンドルに直接送信する場合は、recipient_type="handle"を使用します。
モード C:Chrome ブラウザーの制御(MCP CDP)
決定論的な Chrome の自動化には、MCP ツールを使用します。
chrome_open_sessionchrome_navigatechrome_wait_forchrome_clickchrome_typechrome_extractchrome_screenshotchrome_close_sessionchrome_list_sessionscapture_active_screen
実行手順:
- Chrome セッションを開きます。
- ページに移動し、セレクターが安定するまで待ちます。
- クリック操作と入力操作を行います。
- 抽出によって状態を確認します。
- チェックポイントまたは失敗時にスクリーンショットを取得します。
- セッションを閉じます。
モード D:ファイルの検索と操作(MCP)
ユーザーがファイルの検索、確認、コピー、移動、名前変更、Finder での表示、またはゴミ箱への移動を依頼した場合は、シェルコマンドではなく MCP ファイルツールを使用します。これらのツールは、検索や操作が成功すると JSON を返し、失敗すると Error: ... という文字列を返します。
利用可能なツール:
find_files- 引数:<query> [root] [max_results] [include_hidden] [kind]list_directory- 引数:<path> [include_hidden] [max_results]get_file_info- 引数:<path>copy_file- 引数:<source> <destination> [overwrite] [dry_run]copy_directory- 引数:<source> <destination> [overwrite] [dry_run]move_file- 引数:<source> <destination> [overwrite] [dry_run]rename_file- 引数:<path> <new_name> [overwrite] [dry_run]trash_file- 引数:<path> [dry_run]reveal_in_finder- 引数:<path>get_finder_selection- 引数:なし
ファイル操作のルール:
- ユーザーが選択中のファイル、現在の Finder ウィンドウ、または「このファイル」に言及した場合は、まず
get_finder_selectionを呼び出します。 - ファイル名が曖昧な場合は、
find_filesを呼び出してからget_file_infoを呼び出します。候補が複数残る場合は、どれを指しているのか確認してください。 - 対象や保存先が曖昧な場合は、
copy_file、copy_directory、move_file、rename_file、またはtrash_fileを実行する前に、dry_run=trueを優先して使用します。 - ユーザーが明示的に置き換えを依頼しない限り、上書きしないでください。既定値は
overwrite=falseです。 - 完全に削除するのではなく、
trash_fileを使用します。 - ファイル操作の結果を Finder で確認したいというユーザーの要望がある場合は、操作後に
reveal_in_finderを使用します。
モード E:クリップボード操作(MCP)
ユーザーがクリップボードの内容の確認、コピー、貼り付け、消去、または保存を依頼した場合は、シェルコマンドではなく MCP クリップボードツールを使用します。これらのツールは、テキストやファイルの操作では JSON を返し、失敗すると Error: ... という文字列を返します。また、保存されたクリップボード画像については画像データを返します。
利用可能なツール:
get_clipboard_text- 引数:[max_chars]set_clipboard_text- 引数:<text>clear_clipboard- 引数:なしget_clipboard_files- 引数:なしset_clipboard_files- 引数:<paths>save_clipboard_image- 引数:[output_path]set_clipboard_image- 引数:<path>
クリップボード操作のルール:
- ユーザーがクリップボードのコピー、設定、消去、または置き換えを明示的に依頼しない限り、内容を上書きする前に確認してください。
- 現在コピーされているテキストを尋ねられた場合は、まず
get_clipboard_textを使用します。 - Finder でコピーしたファイルについて話している場合、またはコピーしたファイルを別の場所に貼り付けたいという要望がある場合は、
get_clipboard_filesを使用します。 - クリップボード上の画像を確認、保存、または変換したいという要望がある場合は、
save_clipboard_imageを使用します。 set_clipboard_filesには既存のパスのみを指定します。クリップボードを変更する前に、曖昧なファイル名はfind_filesで特定します。set_clipboard_imageは既存の画像ファイルに対してのみ使用します。
モード F:ウィンドウとワークスペースの操作(MCP)
ユーザーがワークスペースの整理、アプリやウィンドウへのフォーカス、アプリの横並び配置、ウィンドウのサイズ変更、最小化、アプリの非表示、アプリの終了、または最前面のアプリの確認を求めた場合は、MCP のウィンドウツールを使用します。これらのツールは、操作が成功すると JSON を返し、失敗すると Error: ... 文字列を返します。
利用可能なツール:
get_frontmost_app- 引数:なしlist_windows- 引数:[app_name] [include_minimized]focus_window- 引数:[app_name] [window_id] [window_index]move_window- 引数:<x> <y> [app_name] [window_id] [window_index] [display_index]resize_window- 引数:<width> <height> [app_name] [window_id] [window_index] [display_index]center_window- 引数:[app_name] [window_id] [window_index] [display_index] [width] [height]tile_windows- 引数:[layout=columns|rows|grid] [app_names] [display_index] [padding]minimize- 引数:[app_name] [window_id] [window_index]hide_app- 引数:<app_name>quit_app- 引数:<app_name>
ウィンドウ操作のワークフロールール:
- 対象アプリに複数のウィンドウがある場合、または対象が曖昧な場合は、移動、サイズ変更、最小化、フォーカスの前に
list_windowsを呼び出します。 - ユーザー向けのワークフローでは
app_nameを優先し、list_windowsの後に続けて正確な操作を行う場合はwindow_idを使用します。 - 特定のディスプレイにウィンドウを配置するときは
display_indexを使用します。それ以外の場合、ツールは対象ウィンドウがあるディスプレイを選択します。 - 複数アプリのタスクを準備するときは、
app_namesを明示してtile_windowsを使用します。 - ユーザーがアプリの終了または終了を明示的に求めていない限り、
quit_appを呼び出さないでください。 - ウィンドウの変更に失敗してアクセシビリティエラーが発生した場合は、MCP サーバーを実行しているホストアプリにアクセシビリティの許可を与えるようユーザーに伝えてください。
運用ルール
- リマインダー/カレンダーのスクリプトを実行する前に、日付/時刻の形式を検証します。
- 連絡先の検索で複数の候補が返された場合は、送信する前にどれかを確認します。
- スクリプトの出力に権限の問題が示されている場合は、有効にすべき権限を正確に伝えます。
- 明示的な CSS セレクターを優先し、動的なページでクリック/入力する前に
chrome_wait_forを呼び出します。 - Chrome で変更を行った後は、
chrome_extractでページの状態が想定どおりか確認します。 - ファイルを変更した場合、ユーザーが確認を必要としていれば、操作後に
get_file_infoまたはlist_directoryで対象を確認します。 - クリップボードを変更した場合、ユーザーが確認を必要としていれば、
get_clipboard_text、get_clipboard_files、またはsave_clipboard_imageで確認します。 - ウィンドウを変更した場合、ユーザーが確認を必要としていれば、
list_windowsで確認します。
権限チェックリスト
- 連絡先へのアクセス
- カレンダーへのアクセス
- リマインダーへのアクセス
- アプリ操作のためのオートメーション権限
- システム操作およびウィンドウ管理のためのアクセシビリティ権限
- スクリーンショットの撮影およびウィンドウ検出の改善のための画面収録権限
- Safari の設定:Apple Events からの JavaScript を許可
- CDP ツールのための Google Chrome のインストール
- メッセージのデータベースを読み取るためのフルディスクアクセス
- Finder で選択項目を表示、ゴミ箱に入れる、または読み取るためのオートメーション権限