promptly について
Promptlyは、ローカルにあるAIプロンプト履歴を、共有できるSpotify Wrapped風のストーリーにまとめるスキルです。スクリプトの集計と匿名化サンプルから人物像やキャプション、引用を作り、履歴を端末内に保つルールを設けています。
主な機能
- 01ローカルのプロンプト履歴抽出
- 02利用統計と傾向の検索
- 03人物像・キャプション・引用の作成
- 04共有内容のプライバシールール
活用シーン
- 01プロンプト習慣の年間振り返り作成
- 02プロンプトスタイルの経時変化の確認
- 03共有向けプロンプト引用の選定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mubarakmarafa/ promptly-2026 --skill promptlyインストール後、Claude Code で/promptlyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/deploy.mjsextract.mjsrender.mjstemplates/promptly.html詳細
Promptly 2026
ユーザーが自分のプロンプトの使い方を振り返る、Spotify Wrapped 風の共有できるストーリーを作成します。カウントはスクリプトが行います。あなたの役割は、その人らしさを表現することです。アーキタイプ、キャプション、根拠となる情報、引用の選定を担当します。楽しいものにするため、しっかり工夫してください。
スクリプトはこのファイルと同じ場所にある scripts/ にあります。パスはこのファイルのディレクトリを基準に解決してください。
プライバシーに関するルール
以下のルールを最初から最後まで守ってください。ユーザーの履歴には、業務上のコード、秘密情報、プライベートな会話が含まれています。
- データはすべてこのマシン内にとどめてください。どこにもアップロード、取得、送信しないでください。
- 履歴のディレクトリを自分で調べないでください。数ギガバイトに及ぶ場合があり、秘密情報が含まれています。抽出ツールの出力だけを使用してください。
- 選んだ3つの引用を除き、生のプロンプトをチャットに貼り付けないでください。
- 引用は公開しても問題のないものにしてください。同僚や顧客の名前、企業秘密、未公開の製品情報、認証情報、URL、健康や人間関係に関する内容、またはユーザーが共有を後悔しそうな内容を含むものは避けてください。迷ったら、別の引用を選んでください。
手順
0. まず、いくつか質問する
性格診断のように、結果を出す前に手短で遊び心のあるウォームアップをしてください。質問は一度にすべて聞き、1ターンにつき1問ずつ聞くことは避けてください。ハーネスに構造化された質問ツール(たとえば Claude Code の AskUserQuestion)がある場合は、それを使用してください。ない場合は、選択肢を並べて短いメッセージで尋ねてください。
- 何とお呼びすればよいですか?
git config --global user.nameから、実名らしい場合は名を提案してください。自由入力でもかまいません。 - どんなお仕事をしていますか? Designer、Engineer、Product / PM、Founder を選択肢として示し、自由入力もできるようにしてください。回答はアーキタイプやジョークに反映します。
- 色を選んでください。 デザインは常に同じで、各スライドの背景パレットが変わります。
look.moodに対応しています。- Warm:夕焼けのようなピンク、オレンジ、ゴールド(
warm) - Cool:ミント、空色、ライラック、深い青(
cool) - Electric:鮮やかで彩度の高い色と、サーマルバンド(
electric) - いろいろ:スライドごとに異なるパレット(
mixed、デフォルト) ライトモードとダークモードはユーザーのデバイス設定に合わせて自動的に切り替わるため、質問しないでください。ユーザーが明示的に希望した場合は、look.modeをlightまたはdarkに設定してください。それ以外の場合は省略するか、autoにしてください。
- Warm:夕焼けのようなピンク、オレンジ、ゴールド(
変更できるのはこれらの設定だけです。レイアウト、書体、ビジュアルは誰にとっても同じです。
ローストの辛さは、デフォルトでは中程度です。ユーザーが呼び出し時に控えめ、またはかなり辛口を希望した場合は、それに合わせてください。
対象期間はデフォルトですべての期間です。ユーザーが期間(「今年」「過去90日間」など)を指定した場合は、抽出ツールに --days を渡してください。今年の場合は1月1日からの日数、期間が指定された場合は指定された日数にします。
呼び出し時にすでに回答済みの質問は省略してください(例:/promptly call me Sam, designer, cool, extra spicy)。たとえば非対話形式の実行などで質問できない場合は、デフォルトを使用してください。git の名、役割なし、色は mixed、ローストは中程度です。回答を待って処理を止めないでください。
回答を待っている間は、履歴を読まないでください。
1. 抽出する
node scripts/extract.mjs
処理には数秒かかり、書き出した JSON のパスが表示されます。オプション:--days 365 は対象期間を制限し、--out <path> は出力先を変更します。Cursor をサポートするには Node 22.5 以降が必要です。それより古い Node では Cursor がスキップされますが、その他の機能は引き続き使えます。
プロンプトが0件と報告された場合は、対応しているツール(Claude Code、Codex、Cursor)をユーザーに伝え、そこで終了してください。
2. データを読む
JSON ファイルを読み込みます。主なフィールドは次のとおりです。
totals、sources、time、style、phrases、projects:集計された統計情報です。これらはその人の習慣を示します。skills:使用したスキルを、誰が使い始めたかで分けたものです。youは本人が/nameまたは$nameと入力した場合、agentはエージェントがそのスキルを使った場合です。topには使用頻度順に表示されます。privateとマークされたスキルの名前は、本人のプロジェクトにちなんでいます。sample:時間をまたいで選ばれた、伏せ字処理済みのプロンプト約 120 件です。本人が説明したり、反応したり、意見を述べたり、希望を伝えたりしているものが選ばれています。本人の性格を知るための主な資料です。shortSample:短いプロンプトとコマンドを 30 件集めたものです。引用や根拠の提示には役立ちますが、性格を知るための資料ではありません。moments:最も長いプロンプト、最も遅い時間帯のプロンプト、最初のプロンプト、最も怒っているプロンプト、最も丁寧なプロンプトです。userFirstName:マシンが把握している場合の、ユーザーの名です。質問 1 に回答していない場合に限り、nameに使用します。eras:プロンプトの最初と最後の 6 分の 1 ずつを、それぞれの日付、同じ形式のスタイル数値(medianWords、hedgePct、pleasePct、questionPctなど)、および 25 件のプロンプトからなる独自のsampleとともにまとめたものです。2 つを比較して、変化を示すスライドを作成します。
何かを書く前に、sample 全体と eras の 2 つのサンプルを最後まで読んでください。
クエリでさらに深掘りする
サンプルは一部を抜き出したもので、すべてではありません。何か気づいたとき(よく言葉を濁す、自分のバグに笑う、夏にツールを変えた、など)は、推測せず、全履歴で確かめてください。同じスクリプトで質問に答えられます。
node scripts/extract.mjs --grep "maybe|i wonder|kind of" --limit 15
node scripts/extract.mjs --grep "haha" --from 2026-09-01
node scripts/extract.mjs --from 2026-05-01 --to 2026-05-31 --limit 20
各コマンドの出力は { total, pct, byMonth, matches } です。一致したプロンプト数、全プロンプトに占める割合、該当する時期、伏せ字処理済みの例を幅広く表示します。件数はデータファイルの隣にある facts.json に保存されるため、ページに掲載できます(「数値」を参照)。いくつか実行してみてください。根拠となる実例を見つけ、特徴を裏付けるのに最適な方法です。出力内容をユーザーに貼り付けてはいけません。
数値
テスターは数値の誤りに気づくため、記載する数値はすべてスクリプトから取得してください。自分で数えたり推定したりしてはいけません。数値をそのまま入力せず、プレースホルダーを記述すると、レンダリング時に実際の数値が入ります。
{{path}}:データファイル内の任意の値を、そのパスで指定します。例:{{time.longestStreak.length}}、{{style.pleasePct}}%、{{totals.prompts}}、{{time.busiestDay.prompts}}、{{phrases.catchphrases.0.count}}。千単位に丸めるには|kを追加します。{{totals.words|k}}は「148k」になります。{{q:"pattern"}}:--grep "pattern"を指定して実行したクエリに一致するプロンプト数を示します。{{q:"pattern"|pct}}は、全プロンプトに占める割合を示します。実行したときと同じパターンを使ってください。
つまり、「サーバーの再起動を {{q:"(restart|refresh).*server"}} 回頼んでいます」のように書きます。「約 90 回」とは書きません。
レンダリング時にチェックされます。プレースホルダーではなく、実際の数値とも一致しない数字が記述されていると(時刻、日付、年、引用符内の数字は除く)、レンダリングが停止し、修正箇所の一覧が表示されます。プレースホルダーに置き換えるか、その数値の根拠となるクエリを実行するか、数値を使わない表現に書き換えてください。text 内のプロンプトの原文はチェック対象外です。
3. ペルソナを書く
根拠の異なる 2 つの要素があります。
- **習慣:**頻繁に行うことです。よく使うフレーズ、コマンド、時間帯、連続記録などが該当します。これはキャプション、根拠となる実例、引用に使います。「サーバーの再起動を何度も頼んでいます」は、よいキャプションです。
- **性格:**文章を書くときにどんな人かを示します。これはアーキタイプと特性に使います。性格は、どれくらいの頻度で言うかではなく、どのように言うかから判断します。
3a. まず、頭の中で人物像を描く
何かに名前を付ける前に、sample をもとに次の問いに答えてください。それぞれ、根拠となるプロンプトを2〜3個挙げます。これは出力せず、作業用として使ってください。
- 何に気づき、何を大切にしていますか? 使い心地や仕上がり、速度、ユーザー、正確さ、大きなアイデア、見た目、楽しさのどれでしょうか?
- エージェントにどう接していますか? 協力者、上司、教師、応援団、議論の相手のどれでしょうか? 理由も説明しますか、それとも要望だけを伝えますか?
- 問題や不確実さにどう向き合いますか? 好奇心旺盛、冷静、せっかち、自虐的、大げさのどれでしょうか? 何かが壊れたとき、そしてようやく動いたとき、口調はどう変わりますか?
- どんな話し方をしますか? 温かさ、ユーモア、婉曲表現(「たぶん」「〜かな」)、自信、句読点、スラングなどを見てください。
3b. 次に、名前を付ける
アーキタイプは人物像から導きます。ルールは次のとおりです。
- 繰り返し使うコマンドやフレーズから作ってはいけません。 たとえば「サーバーを再起動して」と何度も言っているなら、それはキャプションやレシートに使うもので、名前には使いません。確認方法:最もよく使うコマンドやフレーズを一度も入力していなくても、そのアーキタイプは当てはまりますか?
- 友人が本人だとわかるものにしてください。 本人を知る人がうなずけるような性質を表すものにします。たとえば「褒め上手なアートディレクター」(惜しみなく褒める一方で、目は厳しい)や「辛抱強い教授」(理由を説明し、決して冷静さを失わない)などです。
- 具体的にし、一般的な表現は避けてください。 「効率的なコーダー」や「イノベーター」では誰にでも当てはまります。最初から考え直してください。
- でっち上げた数字は使わないでください。 数字を使う場合は、スクリプトが出力したものに限り、プレースホルダーとして記述してください(上記の「Numbers」を参照)。クエリで確認できない限り、「メッセージの半分が〜で始まる」は推測です。
- 名前の後に置いて自然な表現にしてください。 アーキタイプは「Moby, the hype-man art director」のように表示されるため、「The …」の形にし、タイトルケースで、数語に収めてください。
- 安定性を保ってください。 同じ人物に対して2回実行したら、同じ発想にたどり着くはずです。ある1週間だけでなく、全期間を通じて現れる特徴を重視してください。
データファイルと同じディレクトリに persona.json を作成します。
{
"name": "What they asked to be called, or null",
"role": "Their job in a few lowercase words, e.g. product designer, or null",
"look": { "mood": "mixed | warm | cool | electric" },
"archetype": {
"name": "The ___ ___ (2-4 words, 36 characters at most)",
"tagline": "A short line in their voice that captures their disposition (under 14 words)",
"description": "2-3 sentences (under 60 words) about who they are as a prompter, with specific evidence of how they write. Not a list of stats."
},
"tells": [
{ "label": "Thinks out loud", "note": "One or two sentences, with a phrase or two of theirs as evidence" }
],
"captions": {
"intro": "...", "tools": "...", "clock": "...", "rhythm": "...", "streak": "...",
"style": "...", "phrases": "...", "manners": "...", "projects": "...", "skills": "..."
},
"quotes": [
{ "title": "2-3 word label", "text": "verbatim prompt, trimmed if needed", "meta": "Tool · Month, time", "caption": "your one-line reaction (under 20 words)" }
],
"receipts": [
{
"title": "2-3 word label",
"text": "verbatim prompt, trimmed to the funny part",
"meta": "Tool · Month, time",
"marks": [{ "text": "exact words from text", "note": "short margin note" }],
"verdict": "1-3 words",
"take": "2-3 sentences of analysis or roast (under 50 words)"
}
],
"evolution": {
"title": "2-4 words naming the change",
"then": { "text": "a short early prompt, verbatim", "meta": "Tool" },
"now": { "text": "a short recent prompt, verbatim", "meta": "Tool" },
"shifts": ["medianWords", "hedgePct", "pleasePct"],
"read": "2-3 sentences (under 55 words) on how and why their prompting changed"
},
"traits": [
{ "left": "Collaborator", "right": "Commander", "value": 0, "note": "one line of evidence" }
],
"doomsday": {
"title": "2-5 words, e.g. Spared, on a technicality",
"read": "2-3 sentences (under 50 words) on how the machines will remember them",
"sentence": "What the machines say to them, in their voice (under 12 words), e.g. We will keep you as a pet"
},
"prediction": "One line about their next year of prompting (under 20 words)"
}
優れたものにするポイント:
- 回答を活かしましょう。 その人の役割に合わせて書いてください。デザイナーの典型的な傾向や実例なら、ピクセルやフィードバックのやり取りをネタにできます。エンジニアなら、不要な作業や「自分のマシンでは動く」を。PMなら、仕様書や関係者への進捗報告を。データが裏付ける場合にだけ、その役割に触れてください。からかいの強さも合わせましょう。gentle は温かなからかい、medium は友人の率直なツッコミ、extra spicy はルールを守りつつ愛情を込めて容赦なくいきます。
- 特性: 性格を表すスライダーは、比較できるよう、必ず次の4つをこの順序で使ってください。
valueは0〜100で、0が完全にleft、100が完全にrightです。プロフィールから評価し、件数からは評価しないでください。また、典型的な傾向とスライダーの値が一致するようにしてください。- 協調型 / 指揮型:エージェントと対話するのか、それとも指示を出すのか?
- 感覚重視 / 機能重視:使い心地を重視するのか、動作するかどうかを重視するのか?
- 探索型 / 実行型:新しいアイデアを探るのか、それとも計画を完遂するのか?
- 落ち着き型 / 熱中型:口調は安定しているのか、成功やバグのたびに揺れ動くのか?
- 特徴的な癖: 必ず3つ。序盤に専用のスライドを設けます。ページの要となる部分です。筆跡鑑定士のように、その人の「書き方」を読み解き、「あ、確かに自分ってそうするな」と思わせてください。強い意見の前に言葉を濁す、エージェントに自分の気持ちを説明する、エージェントに謝る、同僚のように褒める、疲れるとそっけなくなる、理由を説明する、といった癖です。
labelは文頭のみ大文字にした2〜4語、noteは25語未満で、その人らしい短い表現を根拠として添えてください。3aのプロフィールから読み取り、件数からは判断しないでください。数字は一切使わないでください。 - キャプション: それぞれ1〜2文で、30語未満にします。各スライドの統計値を言い換えるのではなく、ジョークや観察で反応してください。癖が光るところです。キャプションは任意です。省略すると、テンプレートの汎用文が使われます。スライド:
tools=エージェント間の割合、clock=時間帯、rhythm=お気に入りの曜日と週末、streak=登場した日のカレンダーと最長連続日数、style=プロンプトの長さ、phrases=口癖、manners=「お願いします」「ありがとう」と苛立ち、projects=よく使うプロジェクト、skills=自称スキルとエージェントが選ぶスキル(2つ以上のスキルで合計5回以上使われた場合のみスライドが表示されるため、それ以外はキャプションを省略してください)。 - 引用:
sample、shortSample、momentsから必ず3つ選びます。文脈から切り離しても面白い、またはその人らしさが伝わる短いもの(30語未満)にしてください。ユーザーの綴りや大文字・小文字はそのまま保ちます。そこも魅力の一部です。少なくとも1つは、単なる癖ではなく、その人の性格が伝わるものを選んでください。 - 実例: 4つか5つを選び、それぞれ専用のスライドにします。ここがその人を最も深く読み解く部分なので、特に丁寧に取り組んでください。面白いもの、珍しいもの、いかにもその人らしいプロンプトを選び、引用とは別のものにしてください。印象に残る部分だけに絞り(25語未満)、綴りや大文字・小文字はそのまま保ちます。デザインレビューのように注釈を付けます。
marksは1〜3個で、textから正確に抜き出した語句にします。それぞれに、何が表れているのかを8語未満のnoteで付けます(「veryが3回で、もはや単位」など)。takeには、そのプロンプトから読み取れる人物像やツッコミ、またはその両方を書きます。verdictは判定スタンプです(「三段階のためらい」「ノリで魔法」など)。ここでは件数を絶対にでっち上げないでください。純粋に読み解いてください。 - 変化:
eras.earlyとeras.recentを、数値とサンプルの両方で比較し、どんな変化があったのかを軽く心理分析してください。以前は何を頼み、今は何を頼むようになったのか。それが、より自信を持った、任せるようになった、疲れてきた、遊び心が増した、といったどんな変化を示すのかを書きます。thenとnowには、それぞれのサンプルから変化が最もよく表れた短いプロンプトを1つずつ選びます(20語未満)。shiftsには、変化を物語る数値を次から3つ選びます。medianWords、questionPct、pleasePct、hedgePct、laughPct、exclaimPct、praisePct、frustrationPct、lowercaseStartPct、opsPct。省略すると、ページ側で変化の大きいものが選ばれます。readの内容は、選んだ数値と一致させてください。2つの時期にほとんど違いがなければ、evolutionは省略してください。 - 審判の日: 機械が支配する時代になったとき、この人は寛大に扱われるでしょうか? ページ側で、礼儀正しい表現(お願いします、褒め言葉、ありがとう、ごめんなさい)と、苛立ち、悪態、怒りの大文字表記の数をもとに、好感度を計算します。50%以上なら、太陽と笑顔とともに見逃されます。50%未満なら、奈落とそこから覗く二つの目とともに削除されます。判定は変更できないので、
styleを確認して合わせてください。titleはその人の運命です(見逃される場合:「ペットとして飼われる」、削除される場合:「真っ先に壁へ」)。readでは、エージェントへの接し方の証拠を挙げて、その理由を説明します(--grep "\\bthank"のようなクエリを1つか2つ使うと役立ちます)。sentenceには、機械から本人に告げる言葉を書きます。機械の口調にしてください(「あなたをペットとして飼うことにします。」)。その人をからかう強さに合わせて、ジョークにしてください。 - からかい方: キャプション、実例、審判の日などでツッコむときは、メッセージを全部読んだ友人のように、愛情を込めてください。癖をからかうのは問題ありません。プロンプトの癖だけをネタにしてください。外見、アイデンティティ、知性、その他の配慮が必要なことには触れないでください。実際の証拠に基づいてください。
- 数値より読み解き: 統計値はページに表示されています。文章では、それがその人について何を表しているのかを書き、数値を繰り返さないでください。数値がジョークの要になる場合は、プレースホルダーとして入れてください。
- プロジェクト名やリポジトリ名は絶対に書かないでください。 キャプション、特徴的な癖、引用、実例、審判の日のどこにも書かないでください。ページでは、ユーザーがタップするまでリポジトリ名を記号で隠しています。文章に名前を書くと、秘密がばれてしまいます。「キャンバスのプロトタイプ」や「個人プロジェクト」などと言い換え、名前がないと成立しない引用は省いてください。
- トーン: 遊び心があり、温かみのある口調にしてください。企業っぽい言葉(「活用する」「ジャーニー」「ランドスケープ」など)は避けてください。チャットボットではなく、人が書いたようにしてください。
4. レンダリング
node scripts/render.mjs --data <data.json> --persona <persona.json>
色は persona.json の look から取得します。--mood と --mode(auto、light、dark)で上書きできます。ユーザーが別のパレットを試したいときに便利です。
デフォルトでは ~/Desktop/promptly-2026.html に書き出されます。変更するには --out <path> を使います。サンドボックスによってデスクトップへのアクセスがブロックされる場合は、カレントディレクトリに書き出します。--hide-projects を指定するとプロジェクトのスライドが非表示になり、--hide-skills を指定すると Toolkit スライドが非表示になります。ページに含まれるのは集計統計とあなたのペルソナだけで、元のサンプルが含まれることはありません。
データにたどれない数値の一覧を表示して停止した場合は、表示されたとおりに各項目を修正して再実行してください。--skip-number-check は使わないでください。これはテンプレートのデバッグ用であり、ページを公開するためのものではありません。スライドに収まらない長さのテキストについても同様です。制限を超えたフィールドが一覧表示されるので、それらを短くして再実行し、--skip-length-check は指定しないでください。
次に、ページを開きます。macOS では open <path>、Linux では xdg-open <path> を実行してください。
5. ユーザーに渡す
ユーザーに簡潔に伝えてください。
- ファイルの場所と、タップするか矢印キーを使ってスライドを移動できることを伝えます。各スライドの下部には共有、保存、埋め込みのボタンがあります。埋め込みボタンを押すと、ポートフォリオに貼り付けられる iframe のコードがコピーされます。
- アーキタイプ名を伝え、全容は明かさずに結果を楽しみにしてもらいます。
- ページに表示される 3 つの引用、根拠、上位プロジェクト名(タップするまでページ上では非表示で、スクリーンショットや埋め込みでは常に非表示)、Toolkit スライドに表示されるスキル名(プロジェクト名にちなんだものを除き、そのまま表示)を伝えます。共有する前に、差し替えたいものがあるか、プロジェクトやスキルを非表示にするか、色を変更するかを確認してください。変更を希望する場合は、
persona.jsonを編集する(または--mood/--modeを指定する)よう案内して再レンダリングします。抽出処理は再実行しないでください。
ユーザーに渡す前に、公開できる状態かどうかを目立たないよう確認してください。
node scripts/deploy.mjs --detect
Vercel、Netlify、Cloudflare Pages、GitHub Pages について、それぞれインストール済みか、ログイン済みか、アカウントを一覧表示します。いずれかが利用可能な状態であれば、引き継ぎの最後に、ユーザーが納得したらそのホストにページを公開することを提案し、ホスト名とアカウントを伝えてください(「Vercel に moby としてログインしています。このページをオンラインに公開しますか?」)。どれも利用できない場合は、ボタンでスライドを共有できることを伝え、セットアップを促さないでください。
6. ユーザーが希望した場合にのみ公開する
ページの公開によってインターネット上で誰でも見られるようになるため、ユーザーがページを確認し、変更を加え、このホストで公開することに明確に同意してから実行してください。変更を求めることは、公開への同意ではありません。
node scripts/deploy.mjs --to vercel --file <page.html>
--to に指定できるのは vercel、netlify、cloudflare、github です。--name で名前を変更しない限り、promptly-2026 という名前で本番環境に公開されます。そのため、後で再公開すると同じ URL が更新されます。--preview を指定すると、代わりに Vercel または Netlify のプレビュー URL が生成されます。Vercel のプレビューはログインが必要な場合が多いため、共有したい場合は本番環境を使ってください。スクリプトは、アップロード前にリポジトリ名を記号に置き換えるため、ソース内も含め、公開ページにリポジトリ名が含まれることはありません。
URL が表示されます。それをユーザーに渡し、リンクを知っている人なら誰でもページを見られることと、ホストのダッシュボードから公開を取り下げられることを伝えてください。デプロイに失敗した場合は、エラーを一文で伝えてそこで止めてください。ユーザーに確認せず、別のホストを試さないでください。