crypto-price について
crypto-priceは、暗号資産や対応する市場ティッカーの価格・期間変動を調べ、チャートを生成するエージェントスキルです。Hyperliquid、CoinGecko、Yahoo Financeへデータ取得先を振り分け、複数資産の正規化比較にも対応します。
主な機能
- 01価格と期間変動の取得
- 02ローソク足・出来高チャート
- 03複数資産の正規化比較
- 04期間とティッカー別名の振り分け
- 05テキストとチャートの出力
活用シーン
- 01指定期間のBTCやHYPEの価格確認
- 02SP500、GOLD、SILVERの騰落比較
- 03株式・ETF・FXティッカーの価格取得
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ evgyur/ crypto-price --skill crypto-priceインストール後、Claude Code で/crypto-priceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEQUICK_START.mdREADME.mdPUBLISH_INSTRUCTIONS.md.gitignorePUBLISH.mdrequirements.txt.clawdhub/origin.json.github/workflows/test.ymlreferences/hip3-tradexyz-tickers.mdlegacy-SKILL.mdprotocol-revenue-yield-checks.mdrefactor-notes.mdhyperliquid-symbol-map.mdscripts/get_price_chart.pyhype_quick.pyprice_quick.pyspaghetti_quick.pytests/test_spaghetti.py詳細
/crypto-price
暗号資産の価格とチャートを扱うスキルのルーターです。
Trigger
トークンの価格、期間内の変動、またはチャート(BTC、ETH、HYPE など)が必要な場合に使用します。
Commands
/crypto-price <SYMBOL> [duration]
サポート対象のあらゆるトークン/資産に対応する標準の汎用コマンドです。
python3 {baseDir}/scripts/get_price_chart.py <SYMBOL> [duration]
データソースは、metaAndAssetCtxs に含まれるすべてのライブ無期限先物シンボルについて Hyperliquid を最優先し、次に暗号資産トークンには CoinGecko、従来型のティッカー/エイリアスには Yahoo Finance を使用します(SILVER→SI=F、GOLD→GC=F、SPX→^GSPC、FX、Yahoo のティッカーが指定された株式/ETF)。
/price <SYMBOL> [duration]
Telegram/ゲートウェイ用の簡易コマンドラッパーです。テキスト + verify + MEDIA:<png> を出力します。
python3 {baseDir}/scripts/price_quick.py <SYMBOL> [duration]
/spaghetti <SYMBOL...> [duration]
複数資産を正規化して折れ線グラフにします。同じ期間の資産を比較する場合(例:6 か月間の SP500 と GOLD と SILVER)に使用します。各系列の最初のローソク足を 0% として正規化し、変動率をプロットするため、単位や価格の異なる資産も比較できます。
python3 {baseDir}/scripts/get_price_chart.py spaghetti SP500 GOLD SILVER 6mo
python3 {baseDir}/scripts/spaghetti_quick.py SP500 GOLD SILVER 6mo
エイリアス:compare、multi、basket は、スクリプトの最初のコマンドとして使用できます。カンマ区切りの入力にも対応しています:SP500,GOLD,SILVER 6mo。
/hype [duration]
この同じスキルが所有する組み込みエイリアスコマンドです。別の hype スキルにせず、crypto-price 内に置いてください。
python3 {baseDir}/scripts/hype_quick.py [duration]
このエイリアスは、次のコマンドに処理を委譲します:
python3 {baseDir}/scripts/get_price_chart.py HYPE [duration]
Command contract
生成されるすべてのチャート画像には、右下に公開用の帰属ウォーターマーク Telegram: @human20 を必ず含めてください。標準的なローソク足/出来高チャートとスパゲッティ比較チャートの両方に表示してください。
期間:分/時間/日/週/月。コンパクト形式は <数値>[m|h|d|w|mo] で、接尾辞がない場合は時間です。例:30m、2h、3h、12h、24h、2d、1w、2weeks、1mo、2months。1 week、2 months、30 分、3 時間、1 か月 のような分離形式にも対応しています。1 か月は 30 日として計算します。デフォルト:24h。
Router Map
- データソース/期間のルーティング ->
modules/source-routing/SKILL.md - データ取得 + チャート成果物 ->
modules/price-chart/SKILL.md - エラー/レート制限への対応 ->
modules/ops-fallback/SKILL.md - Hyperliquid のライブシンボルスナップショット ->
references/hyperliquid-symbol-map.md - HIP-3/TradeXYZ のティッカーの意味 ->
references/hip3-tradexyz-tickers.md - プロトコル収益/ステーブルコイン利回りに関する主張の検証 ->
references/protocol-revenue-yield-checks.md
HIP-3 routing pitfall
デフォルトの無期限先物ユニバース(metaAndAssetCtxs)と現物ユニバース(spotMetaAndAssetCtxs)だけを調べて、Hyperliquid に暗号資産以外の資産がないと結論づけないでください。HIP-3 のビルダーがデプロイした市場は、perp dex 名の配下にあり、xyz:SILVER のような完全修飾シンボルを使用します。
/price <symbol> の正しい検索順序:
- Hyperliquid のデフォルト無期限先物を確認します。
perpDexsを照会して HIP-3 の dex を特定します。- 各 dex について、
dex=<name>を指定してmetaAndAssetCtxsを照会し、市場名またはエイリアスを照合します。 xyz:SILVERのような完全なdex:tickerコイン文字列を使ってローソク足を照会します。SILVERのみは使用しないでください。- その後で初めて CoinGecko/Yahoo にフォールバックします。
TradeXYZ/HIP-3 のエイリアス例:SILVER→xyz:SILVER、GOLD→xyz:GOLD、SPX/SP500→xyz:SP500、NASDAQ/NDX→xyz:XYZ100、WTI→xyz:CL、BRENT→xyz:BRENTOIL。データソースのルーティングを変更する前に、references/hip3-tradexyz-tickers.md を参照してください。
Protocol revenue / yield claim verification
ユーザーが暗号資産の収益に関する主張(+25% annual revenue、準備金利回りの分配、トークンのファンダメンタルズへの影響)の確認を求めた場合、ウェブ検索の要約だけで済ませないでください。可能な限り直接データ API を使用し、そのうえで主張を明示的に再計算してください:
- プロトコル収益のランレート:DefiLlama の fees API。通常は直近 30 日分を年率換算します。
- ステーブルコイン供給量:チェーン/プロトコル別の DefiLlama stablecoins API
- 増加分:
supply * reserve_yield * protocol_share / annualized_revenue
チームが公式ガイダンスを公開していない限り、概算として明記した範囲を返してください。詳細と Hyperliquid/Coinbase/Circle を使った計算例については、references/protocol-revenue-yield-checks.md を参照してください。
クイックコマンドのエイリアス
トークン固有のスラッシュエイリアス(例:/hype)で、Hermes の quick_commands を type: exec として使用する場合は、エイリアスをこの crypto-price スキル内に置き、クイックコマンドの実行先をこのスキルのラッパー(scripts/hype_quick.py)にしてください。エイリアス設定では、期間の引数を転送する(append_args: true)か、ラッパーから HERMES_COMMAND_ARGS を参照できるようにする必要があります。そうしないと、/alias 2h が 2h を渡さずにこのスクリプトを呼び出し、一見正常に見えながらデフォルト期間のチャートを返すことがあります。ゲートウェイの仕組みについては、hermes-agent → references/gateway-quick-commands.md を参照してください。
出力仕様(必須)
必ず以下を返してください。
symbolとdurationpriceとchange_period_percent(またはエラー)chart_path(ある場合)- 余分な書式を含まない
text_plain - 簡潔な検証結果(JSON/ファイルに基づく)
chart_path がある場合は、text_plain とともに PNG を添付してください。
配信ルール(重要)
- Telegram や、添付ファイルに対応したその他のチャットチャンネルでは、
messageツールを使い、チャートをファイルとして送信してください(filePath/path=chart_path)。 message action=sendの後は、重複を防ぐためNO_REPLYだけを返してください。- Telegram では、
/tmp内のファイルにMEDIA:を使わないでください。添付されない可能性があります。 - 利用可能な Telegram 送信ツールが
MEDIA:<path>を使ったテキスト送信のみに対応している場合(個別のfilePathに対応していないsend_messageなど)は、まず PNG を/tmpから/home/hermes/workspace/artifacts/crypto_chart_<SYMBOL>_<ts>.pngのような永続的なパスにコピーし、test -s/サイズで確認してから、MEDIA:<persistent_path>を送信してください。テキストとメディアを同じメッセージで送るとタイムアウトする場合は、まず短いキャプション/検証結果を送り、次にメディアのみのメッセージを送信してください。その場合も、最後はNO_REPLYとしてください。 messageツールが不要な web/local render の場合に限り、MEDIA:は予備の方法として使用してください。
重複出力の切り分け
ユーザーがチャートの下に重複したキャプション(HYPE... + verify... の繰り返し)を示した場合、最初に価格スクリプトを書き換えないでください。まず次のレイヤーを確認してください。
python3 scripts/get_price_chart.py HYPE <duration>を実行し、JSON にtext_plain、verify、chart_pathがそれぞれ 1 つずつ含まれていることを確認します。- スクリプトの出力が重複していない場合、原因はほぼ間違いなく配信レイヤーにあります。キャプションと後続テキスト、
MEDIA:と最終応答の併用、またはmessageツール使用後のNO_REPLYの欠落を確認してください。 - 可能であれば、正確なメッセージ取得で Telegram の形式を検証します。メッセージ A が
has_media=true/写真付きで価格テキストをキャプションとして含み、メッセージ B がhas_media=falseで同じテキストを含む場合、OpenClaw の配信重複排除がtext+mediaと最終的なtext-onlyを異なるペイロードとして扱っていることが原因です。 - OpenClaw では、
reply-delivery.ts、agent-runner-payloads.ts、block-reply-pipeline.tsを調べてください。永続的な修正は、同じテキストがメディアのキャプションとしてすでに配信されている場合に、後続のテキストのみの最終ペイロードを抑制することです。references/openclaw-media-caption-dedupe.mdを参照してください。 - transcript/session JSONL を確認します。toolResult が 1 つなのに Telegram の送信/アシスタントの応答が重複している場合は、価格計算ではなく、ゲートウェイ/スキルの配信指示を修正してください。
- live Claw では、ユーザーメッセージ前後のログも確認してください。メモリ圧縮/ツール許可リストの失敗により、診断応答が重複することがありますが、これは別のゲートウェイ/ツールポリシーの問題です。
セットアップ/依存関係の確認
- チャート描画では
_build_chart内でmatplotlibをインポートします。ローソク足データがあるのに JSON のchart_pathがnullの場合は、まずゲートウェイ/クイックコマンドが使用する Python 環境を確認してください。/opt/hermes-agent/venv/bin/python3 - <<'PY' import matplotlib print(matplotlib.__version__) PY - その仮想環境に不足している場合は、そこでインストールしてからスクリプトを再実行してください。
/opt/hermes-agent/venv/bin/python3 -m pip install matplotlib /opt/hermes-agent/venv/bin/python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 24h - 今後に活かす教訓は、「ゲートウェイが使用するものと同じ Python 環境にチャート描画の依存関係をインストールすること」です。チャート描画に問題があると断定しないでください。
クイックテストチェックリスト
-
/opt/hermes-agent/venv/bin/python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py BTC -
python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 12h -
python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 2hはduration: "2h"を返し、text_plainにover 2hと表示され、chart_pathが既存の PNG を指していること。 -
python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 1wはduration: "1w"と週単位のチャートを返すこと。 -
python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 1moはduration: "1mo"と月単位のチャートを返すこと。 -
HERMES_COMMAND_ARGS='1 week' /opt/hermes-agent/venv/bin/python3 /home/hermes/.hermes/skills/crypto-price/scripts/hype_quick.pyはover 1wとMEDIA:<png>を出力すること。 - 成功時の JSON に
price|change_period_percent|text_plainが含まれていること。 -
2hのような短い期間では、チャートが一部だけに切り詰められず、指定した期間全体を表示していることを目視で確認します。チャート作成処理では「余白を作る」ために指定したローソク足の範囲を切り詰めないでください。変動の計算にも X 軸にも期間全体を使用します。 - フラクタルが絶対高値/安値と同じローソク足にある場合、そのポイントの価格ラベルがチャートに 1 つだけ表示されることを確認します。ラベルが重複しないよう、絶対値マーカーにラベルの表示を優先させます。
- 無効なシンボルに対して、わかりやすいエラー JSON が返されること。
手動レビューのチェックリスト
- スキルファイルにシークレット/トークン/チャット ID が含まれていないこと。
-
text_plainがそのまま使用されていること(追加の書式設定なし)。 - フォールバックパスで内部のスタックトレースが公開されないこと。
- コマンドが以前の使用方法との後方互換性を保っていること。
完了条件
-
SKILL.mdに有効なフロントマターとコマンドの仕様があること。 -
scripts/get_price_chart.py HYPE 12hがsymbol、duration、price、change_period_percent、text_plainと、任意のchart_pathを含む JSON を返すこと。 -
chart_pathが返された場合、PNG が存在し、チャットチャネルに添付できること。 - 無効なシンボルに対して、スタックトレースを含まない構造化エラー JSON が返されること。
正規リポジトリ/プッシュ時の注意事項
~/.hermes/skills/crypto-priceにインストールされた実行環境は、Git のワークツリーではない場合があります。正規の公開リポジトリはhttps://github.com/evgyur/crypto-price.gitです。- 実行環境の修正をプッシュする場合は、このリポジトリをクリーンな一時チェックアウトにクローンまたは同期してください。.github/workflows、ドキュメント、
.clawdhub、フォント、公開用ファイルなどのリポジトリメタデータは保持してください。 - 実行環境のファイルには空白文字やローカルでの差分が含まれ、正規の差分に不要な変更が混入する可能性があるため、実行環境のファイル全体をコピーするのではなく、クリーンなチェックアウトに必要最小限のパッチを適用してください。
- ユーザーから別のブランチを指定されていない限り、デフォルトのリモートブランチ(
origin/HEAD。現在はmaster)にプッシュしてください。 - プッシュ後、
git ls-remoteとリモートの HEAD が一致していることを確認してください。GitHub Actions が設定されている場合は、最新のワークフロー実行をsuccessになるまで確認するか、失敗を明示的に報告してください。
後方互換性マップ
- 旧形式の実行コマンド
python3 {baseDir}/scripts/get_price_chart.py <SYMBOL> [duration]は維持されています - 旧形式の説明は
references/legacy-SKILL.mdに移されています - 互換性を保つため、スクリプトのコードは名前を変更せずに残されています
- JSON には
durationとduration_labelの両方を含める必要があります。一部の OpenClaw コマンドエイリアスとチャット配信のチェックでは、durationが明示的に確認されます。 scripts/price_quick.py:汎用の/price <SYMBOL> [duration]ラッパーです。argv とHERMES_COMMAND_ARGSを解析し、text_plain、検証行、およびMEDIA:<png>を出力します。scripts/spaghetti_quick.py:正規化された複数アセット比較チャート用の/spaghetti <SYMBOL...> [duration]ラッパーです。デフォルトはSP500 GOLD SILVER 6moです。- OpenClaw/Hermes の
/hypeは、この同じcrypto-priceスキル内の薄いエイリアスコマンドとして維持し、crypto-price/scripts/get_price_chart.py HYPE [duration]に処理を委譲する必要があります。別のhypeスキルを作成したり、維持したりしないでください。 - 期間エイリアスでは、要求された全期間を最初から最後まで維持する必要があります。以前のバグでは、
2hを受け付けてキャプションにover 2hと表示したものの、チャートの「余白」のためにローソク足を 80% に切り詰め、その結果、チャートと変動幅の対象が約 96 分になっていました。要求された期間のローソク足を切り詰めないでください。視覚的な余白が必要な場合は、データ選択ではなく軸のマージンを調整してください。