autoskill について
autoskillは、ローカルのscreenpipeデーモンが記録した作業履歴を分析し、新しいスキルや既存スキルを組み合わせるレシピを下書きします。明示的な操作時に実行され、提案は確認後に登録できます。
主な機能
- 01指定した期間のscreenpipe記録を分析
- 02LLM処理前に機微なテキストを除去
- 03繰り返される作業パターンをクラスタリング
- 04パターンを既存スキルと照合
- 05新規スキルや組み合わせレシピを下書き
活用シーン
- 01既存スキルで扱えない反復作業の発見
- 02最近の作業履歴からスキルを下書き
- 03既存スキルを連携するレシピの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill autoskillインストール後、Claude Code で/autoskillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreconfig.yamlreferences/https-proxy.mdscreenpipe-config.yamlscripts/autoskill.pybackends.pycluster.pydoctor.pyfetch_window.pymatch_skills.pypromote.pyredact.pyrun.pysynthesize.py詳細
autoskill
screenpipe デーモンが実行中である必要があります。 このスキルには代替データソースがなく、ローカルの screenpipe HTTP API(デフォルトは
http://localhost:3030)からのみデータを読み取ります。デーモンが実行されていない場合、run()はインストール手順を示すScreenpipeUnreachableを発生させます。
ネットワークアクセスと環境変数。 このスキルは、認証済み HTTP リクエストを(a)ユーザーのローカル screenpipe デーモン(ループバック)と、(b)ユーザーが設定した LLM バックエンドのいずれかに送信します。選択肢は
http://localhost:1234/v1(LM Studio、デフォルト)、https://api.anthropic.com(オプトインの Claude)、またはユーザーが用意した BYOK Foundry ゲートウェイです。このスキルは 3 つの環境変数、SCREENPIPE_TOKEN、ANTHROPIC_API_KEY、FOUNDRY_API_KEYを読み取り、それぞれ名前が示す単一のエンドポイントに対する認証にのみ使用します。それ以外のネットワーク接続、テレメトリー、第三者へのデータ送信はありません。
概要
ローカルの screenpipe デーモンが受動的に記録した、ユーザー自身のワークフロー履歴から新しいスキルを作成します。このスキルはオンデマンドで動作します。ユーザーが期間を指定して呼び出すと、screenpipe のローカル HTTP API に問い合わせ、繰り返されるワークフローのパターンをクラスタリングし、各パターンをこのリポジトリ内の既存スキルと比較して、ユーザーが確認、編集、登録できる提案用フォルダーを作成します。
このスキルを使用するタイミング
ユーザーから次のように依頼された場合に、このスキルを呼び出してください。
- 「過去 4 時間/1 日/1 週間を分析して、新しいスキルを提案して。」
- 「自分が何をしていたか確認して、まだカバーされていないことを教えて。」
- 「最近のワークフローからスキルの下書きを作って。」
- 「繰り返しているワークフローの組み合わせ方を見つけて。」
screenpipe 自体に関する単発の質問や、リアルタイムの画面クエリに対して、またはユーザーから明示的な依頼がない場合は、このスキルを呼び出さないでください。このスキルは機密性の高いローカルコンテンツを分析するため、必ずユーザーの明示的な操作によって起動する必要があります。
プライバシー保護の方針
- screenpipe はキャプチャ時にアプリ/ウィンドウのフィルタリングを行います。
references/screenpipe-config.yamlをユーザーの screenpipe 設定にコピーして、初期設定用の拒否リストをインストールしてください。パスワードマネージャー、メッセージアプリ、銀行アプリなどの機密アプリは、そもそも OCR の対象になりません。 - 生の OCR データがマシンの外に出ることはありません。
scripts/fetch_window.pyは localhost HTTP 経由でデータを取得します。scripts/cluster.pyはタイムラインをアプリ/時間/タイトルの要約に集約します。scripts/redact.pyは多層防御として、クラスタの要約が LLM に渡される前にメールアドレス、API キー、ベアラートークン、電話番号を除去します。 - LLM バックエンドのデフォルトは
localです。 推奨構成は、LM Studio 上でGemma-4-31B-itを実行する方法です。多くのワークステーション用 GPU に収まるサイズで優れた推論能力を備え、データがマシンの外に出ることもありません。クラウドバックエンド(claude、foundry)はオプトインであり、明示的に利用を希望するユーザー向けにconfig.yamlに記載されています。選択したバックエンドにかかわらず、検出と埋め込み処理は常にローカルで実行されます。 - ドライランモード(
--plan)では、LLM の呼び出し前に分析対象となるタイムライン全体を表示します。 - localhost での TLS(企業ポリシーへの対応として任意):Caddy の設定パターンについては
references/https-proxy.mdを参照してください。
前提条件
1. Screenpipe デーモン
公式リリースをインストールするか、ソースからビルドしてください。いずれの場合も、デーモンはデフォルトで localhost:3030 で HTTP を待ち受けます。
ソースからビルドする場合(デスクトップ GUI なしで CLI デーモンを使いたい場合に推奨):
git clone --depth 1 https://github.com/mediar-ai/screenpipe.git
cd screenpipe
cargo build -p screenpipe-engine --release
# System deps (macOS): cmake + full Xcode.app (not just Command Line Tools).
# brew install cmake
# # if xcodebuild plug-ins error: sudo xcodebuild -runFirstLaunch
./target/release/screenpipe doctor # confirm permissions + ffmpeg
./target/release/screenpipe record --disable-audio --use-pii-removal
初回起動時に macOS の画面収録の許可を求められます。許可してから再起動してください。
2. Screenpipe API トークン
ローカル API では、現在ベアラー認証が必要です。トークンを取得してエクスポートしてください。
export SCREENPIPE_TOKEN=$(screenpipe auth token)
(または、config.yaml で screenpipe.token を直接設定してください。シークレットをバージョン管理から除外できるため、環境変数の使用を推奨します。)
3. Python 環境
リポジトリのルートから pipenv を使用します。
pipenv install httpx pyyaml sentence-transformers
埋め込みモデル(sentence-transformers/all-MiniLM-L6-v2、約 80 MB)は初回実行時にダウンロードされます。
4. ローカル LLM(デフォルトの方法)— LM Studio
- LM Studioをインストールします。
Gemma-4-31B-itをダウンロードします(または、ほかの高性能な推論モデルを使用します。その場合はconfig.yamlのlocal.modelを調整します)。- ヘッドレスで使用できるよう、CLIから読み込みます(GUIは不要です)。
lms load gemma-4-31b-it --context-length 131072 --gpu max -y
lms status # confirm server running on :1234
5. クラウド LLM バックエンド(任意、オプトイン)
明示的にローカルの使用をオプトアウトする場合のみ、次の設定を行います。
claude:ANTHROPIC_API_KEYを設定し、config.yamlのbackend: claudeに切り替えます。foundry:FOUNDRY_API_KEYを設定し、backend: foundryに切り替え、foundry.endpointに社内ゲートウェイの URL を設定します。
アーキテクチャ
screenpipe daemon (user-installed)
│ HTTP on localhost:3030
▼
scripts/fetch_window.py → normalized timeline events
scripts/redact.py → regex scrub (defense-in-depth)
scripts/cluster.py → sessions + clusters (local only)
scripts/match_skills.py → top-k vs existing 135 skills (local embeddings)
scripts/synthesize.py → LLM judge: reuse / compose / novel
│
▼
~/.autoskill/proposed/<timestamp>/ (default; override with --out)
├── report.md
├── composition-recipes/<name>/SKILL.md
└── new-skills/<name>/SKILL.md
scripts/promote.py → user-approved proposal → skills/<name>/
ワークフロー
このスキルには、3つのサブコマンドを備えた統一 CLI が scripts/autoskill.pyに用意されています。
python scripts/autoskill.py doctor --config config.yaml --skills-dir ../
python scripts/autoskill.py run --start ... --end ... --config config.yaml
python scripts/autoskill.py promote --proposed ~/.autoskill/proposed/<ts> --skills-dir ../ --name <skill>
0. doctorで事前確認する
一括実行の前に、すべての依存関係をまとめて確認します。
python scripts/autoskill.py doctor \
--config skills/autoskill/config.yaml \
--skills-dir skills
レポートでは、config(バックエンドの選択が有効か)、skills_dir(存在するか)、screenpipe(接続可能かつ認証済みか)、llm(LM Studio が稼働中か、または API キーが設定されているか)を確認します。いずれかの確認に失敗するとゼロ以外の終了コードを返し、該当する行にerrorと表示します。
1. パイプラインを実行する
export SCREENPIPE_TOKEN=$(screenpipe auth token)
python scripts/autoskill.py run \
--start "2026-04-17T00:00:00Z" \
--end "2026-04-17T23:59:59Z" \
--config skills/autoskill/config.yaml \
--skills-dir skills
提案はデフォルトで~/.autoskill/proposed/<timestamp>/に保存され、実験的な出力がスキルリポジトリに混在しないようになっています。--out PATHを渡すと、出力先を変更できます。
内部では、次の処理を行います。
- 取得 —
fetch_windowはscreenpipeの/searchエンドポイントをページネーションで呼び出し、イベントを{ts, app, window_title, text, content_type}に正規化します。 - 秘匿化 —
redactは、screenpipe自体の PII 除去に加えて多層防御を行い、OCR テキストとウィンドウタイトルからメールアドレス、API キー、ベアラートークン、電話番号を削除します。 - クラスタリング —
segment_sessionsはアイドル時間(デフォルトは10分)でセッションを分割し、短いセッションを除外します。cluster_sessionsはアプリのシグネチャに基づいてセッションをグループ化し、min_cluster_size(デフォルトは2)以上のクラスターを保持します。 - 照合 —
load_skill_descriptionsはskills/内のすべてのSKILL.mdからフロントマターを読み込みます。top_k_matchesはローカルのsentence-transformers埋め込み(コサイン類似度)を使って、各クラスターをすべてのスキルと照合し、順位付けします。 - 合成 —
synthesizeは設定済みの LLM バックエンドにプロンプトを送り、各クラスターをreuse、compose、novelのいずれかに分類し、該当する場合はSKILL.mdの本文を出力します。 - レポート —
<out_dir>/<ts>/report.mdに加え、各提案についてnew-skills/<name>/SKILL.mdまたはcomposition-recipes/<name>/SKILL.mdを書き込みます。
--dry-runを追加すると、クラスタリング後に処理を停止します。この場合、LLM とsentence-transformersの読み込みを省略し、確認用のplan.mdのみを書き込みます。
2. 確認して昇格する
~/.autoskill/proposed/<ts>/report.mdを開き、ドラフトを直接編集して、不要なものは削除します。その後、次を実行します。
python scripts/autoskill.py promote \
--proposed ~/.autoskill/proposed/2026-04-17T14-30-00 \
--skills-dir skills \
--name zotero-pubmed-helper
promoteはディレクトリをskills/<name>/に移動します。既存のスキルを上書きすることはありません。提案が見つからない場合や移動先がすでに存在する場合は、分かりやすいエラーメッセージを表示して、ゼロ以外の終了コードで終了します。
設定
設定の全体についてはconfig.yamlを参照してください。デフォルト値はローカル優先です。
backend: local
local:
endpoint: http://localhost:1234/v1 # LM Studio's Developer server
model: Gemma-4-31B-it
screenpipe:
url: http://localhost:3030 # or https://screenpipe.local via Caddy
cluster:
min_session_minutes: 5
idle_gap_minutes: 10
min_cluster_size: 2
クラウドバックエンドをオプトインするには、次のようにします。
backend: claude # or foundry
claude:
model: claude-opus-4-7
合成レシピと新しいスキルの違い
- compose:LLM は、既存のスキルを連鎖させることでワークフローを実行できると判断しました。出力される
SKILL.mdは、意図的に最小限の内容にしています。フロントマターと、既存のスキルを順番に呼び出す「Workflow」セクションで構成されます。このスキルを発見したのと同じエージェントランタイムが、その後、エンドツーエンドで呼び出せます。 - novel:既存のスキルの組み合わせでは対応できません。リポジトリの規約(フロントマター、Overview、When to Use、Workflow)に従い、より充実した
SKILL.mdのドラフトを作成します。新しいスキルのドラフトは、昇格前に必ずユーザーが確認してください。
テスト
このスキルは、リポジトリのルートにあるtests/autoskill/の小規模な pytest テストスイートでテストされています。各スクリプトは、依存性の注入(HTTP トランスポートのモック、バックエンドのスタブ、埋め込み器のスタブ)を使って、単独でユニットテストされています。
python -m pytest tests/autoskill -v
このリポジトリ内の他のスキルとの組み合わせ
autoskill の埋め込みインデックスは、135 個すべての関連スキルを対象にしています。科学論文の執筆に見えるワークフローは scientific-writing / literature-review / citation-management に、図の作成は scientific-schematics / generate-image / infographics に、スライドの準備は scientific-slides / pptx に一致します。スキルのグループが関連スキル 2 つまたは 3 つに対して高いスコアを獲得すると、出力される構成レシピでそれらが明示されるため、今後ユーザーがエージェントを呼び出す際に、このリポジトリですでに文書化されている最適化済みの手順を利用できます。
エージェントの作業手順
- 環境を確認します。 目的、評価指標、予算(時間、計算リソース、費用)、停止基準を確認します。
- 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果を左右する値を推測せず、質問してください。
- まず小規模に実行します。 1 回分を最初から最後まで実行し、規模を拡大する前にログを確認します。
- 上記の手順と参考資料を使って、タスク全体を実行します。
- 結果を検証します。 保留データで評価し、各反復、仮説、結果の監査証跡を残します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の点を明記します。
| このような場合 | 次のように対応します |
|---|---|
| 反復で疑わしいほど大きな改善が見られる | 結果を採用する前に、データ漏洩や評価の不具合がないか確認します。 |
| インストール済みバージョンに、この手順で指定された関数、フラグ、エンドポイントがない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応して、その旨をユーザーに伝えます。API をでっち上げてはいけません。 |
| 必須の入力、識別子、パラメーターが曖昧 | ユーザーに尋ねるか、実行前に仮定を明示します。 |
誠実性に関するルール
- 結果、パラメーター、識別子、引用、統計情報を捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
- 否定的な結果も記録し、好ましい結果だけを選んで報告してはいけません。
- バージョン固有の詳細は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
- 費用が発生する操作、共有 GPU やクラウドのクォータを消費する操作、個人データや患者データに触れる操作、取り消せない操作を行う前には、必ず確認を求めます。
関連スキル
research-skill-creator:論文執筆、ラボプロトコル、分析パイプライン、ドメインデータベースなど、研究ワークフロー向けのエージェントスキルを作成、改善、テストします。…