Podcast Ingestion Core MCP Server
Podcast Ingestion Core
Spec034 Task #77 current terminal is startup/plugin closed; credential_provider BLOCKED; overall BLOCKED. Its H2-frozen exact 20-file official
NousResearch/hermes-agentbundle is static/offline only: startup order and the fixedsecurity-guidanceplugin identity chain are closed, while credential/provider construction data flow, whole-program closure, dynamic/user/project/entry-point plugin paths, runtime/secret edges, and actual activation remain blocked or unobserved.runtime_status=not_run;live_actions_authorized=false. The fresh review-only bootstrap/final trust chain is reserved for Main after both reviews PASS and remains unrun.
Podcast Ingestion Core は汎用の Podcast 取り込みコアです。現在、RSS episode listing、episode lookup、音声ファイルのダウンロード、ローカル faster-whisper 文字起こし、transcript validation、deterministic extractive Markdown 要約、OpenAI 互換 LLM semantic summary パイプライン、deterministic mention 抽出、SQLite メタデータキャッシュ / 検索、および同じ FastMCP インスタンスを共有するローカル stdio と loopback Streamable HTTP sidecar が完了しています。Hermes 直接 MCP/config/Skills 連携は動作可能です。Spec 026 の C6 before/after metadata/content endpoint equality は required reviewers と唯一の live v2 run で PASS-current と検証済みであり、スナップショット間に transient mutation がないとは主張しません。C7 は依然として安全な runtime evidence が不足しています。v0.20.0 tag v2026.8.3 hooks は候補に過ぎず、全体ステータスは Blocked のままです。Web UI、スケジューリング、embedding と vector search はまだ実装されていません。
最初の podcast profile は Gooaye 股癌ですが、コアコードに股癌をハードコードしてはいけません。podcast 固有の設定はすべて config/podcasts.yaml に置きます。
AI Agent Handoff / Where to Start
この README はクイックオリエンテーション(ディレクトリ構造、CLI 例、phase history)であり、完全な governance source ではありません。新しく担当する AI エージェントや開発者はここから始めてください:
Handoff entrypoint(10分でリポジトリを理解する):
docs/agent-handoff.mdAI 開発規範(instruction hierarchy、change classification、DoR/DoD):
docs/ai-development-framework.md検証マトリクス(各変更でどのテストを実行すべきか):
docs/verification-matrix.mdアーキテクチャ決定記録(ADR index):
docs/architecture-decision-records/README.mdRepo レベルの agent ハード制約:
AGENTS.md
Related MCP server: Podcast Index MCP Server
プロジェクト目標
同じ core functions セットで複数の Podcast をサポートする。
CLI scripts はパラメータの解析と core functions の呼び出しのみを担当させる。
コア機能を将来 MCP tools として直接ラップできるようにする。
すべての出力ファイルは
data/に置き、deterministic な命名を使用してツールが検索しやすくする。
ディレクトリ構造
config/
podcasts.yaml
industry_chain_mappings.yaml
external_data_boundary.yaml
external_market_data_fixtures.yaml
gooaye_lens.yaml
llm_profiles.yaml
data/
audio/
transcripts/
summaries/
mentions/
reports/
mappings/
external/
stock-lens/
cache/
corpus/
docs/
agent-handoff.md
ai-development-framework.md
verification-matrix.md
architecture-decision-records/
architecture.md
mvp-requirements.md
roadmap.md
mcp-readiness.md
mcp-usage.md
codex-mcp-setup.md
claude-mcp-setup.md
mcp-troubleshooting.md
scripts/
list_episodes.py
download_episode.py
transcribe_episode.py
validate_transcript.py
summarize_episode.py
run_corpus_episode_intake.py
generate_corpus_index.py
generate_corpus_remediation_plan.py
run_corpus_audio_download.py
run_corpus_remediation.py
run_corpus_local_transcription.py
run_corpus_episode_workflow.py
run_corpus_semantic_remediation.py
run_corpus_episode_completion_workflow.py
run_corpus_latest_episode_deterministic_workflow.py
run_latest_episode_verified_research_report_workflow.py
run_episode_verified_research_report_workflow.py
query_verified_research_report_catalog.py
revalidate_verified_research_report_sources.py
query_verified_research_report_coverage.py
suggest_historical_verified_report_next_step.py
list_verified_report_gap_backlog.py
extract_mentions.py
rebuild_cache.py
search_transcripts.py
search_mentions.py
validate_mcp_setup.py
validate_hermes_integration.py
manage_hermes_integration.py
run_mcp_server.py
run_mcp_http_server.py
deploy/
hermes/
src/
podcast_ingest_core/
tests/Core Functions
list_episodes(podcast_id, limit)
get_episode(podcast_id, episode_ref)
download_audio(podcast_id, episode_ref)
transcribe_episode(
podcast_id,
episode_ref,
model=None,
device="cpu",
compute_type="int8",
vad_filter=False,
force=False,
audio_path=None,
progress_callback=None,
)
validate_transcript(podcast_id, episode_ref)
summarize_episode(
podcast_id,
episode_ref,
force=False,
max_quotes=10,
window_seconds=300,
allow_partial=False,
)
semantic_summarize_episode(
podcast_id,
episode_ref,
provider="openai-compatible",
model=None,
base_url=None,
api_key_env="OPENAI_API_KEY",
force=False,
chunk_seconds=600,
max_segments_per_chunk=120,
allow_partial=False,
)
extract_mentions(
podcast_id,
episode_ref,
force=False,
allow_partial=False,
max_evidence_per_mention=5,
)
generate_episode_intelligence_report(
podcast_id,
episode_ref,
force=False,
allow_partial=False,
window_seconds=300,
max_evidence_per_section=5,
)
generate_industry_chain_mapping(
podcast_id,
episode_ref,
force=False,
allow_partial=False,
max_candidates_per_node=5,
max_evidence_per_candidate=5,
)
generate_external_data_boundary(
podcast_id,
episode_ref,
force=False,
allow_partial=False,
)
verify_external_data_boundary(
podcast_id,
episode_ref,
confirm=False,
force=False,
allow_partial=False,
provider="fixture",
fixture_path=DEFAULT_EXTERNAL_MARKET_DATA_FIXTURE_PATH,
)
load_gooaye_lens_model(path=DEFAULT_GOOAYE_LENS_CONFIG_PATH)
generate_stock_lens_report(
podcast_id,
stock_query,
force=False,
allow_partial=False,
max_evidence_items=10,
)
generate_stock_lens_synthesis_report(
podcast_id,
stock_query,
confirm=False,
force=False,
allow_partial=False,
api_cost_ack="",
provider="openai-compatible",
model=None,
base_url=None,
api_key_env="OPENAI_API_KEY",
max_prompt_chars=24000,
)
run_research_workflow(
podcast_id,
episode_ref,
stock_query=None,
confirm=False,
force=False,
allow_partial=False,
include_semantic_summary=False,
include_stock_lens_synthesis=False,
include_external_data_verification=False,
api_cost_ack="",
semantic_provider="openai-compatible",
semantic_model=None,
semantic_base_url=None,
semantic_api_key_env="OPENAI_API_KEY",
semantic_chunk_seconds=600,
semantic_max_segments_per_chunk=120,
synthesis_provider="openai-compatible",
synthesis_model=None,
synthesis_base_url=None,
synthesis_api_key_env="OPENAI_API_KEY",
synthesis_max_prompt_chars=24000,
external_data_provider="fixture",
external_fixture_path=DEFAULT_EXTERNAL_MARKET_DATA_FIXTURE_PATH,
max_evidence_per_mention=5,
report_window_seconds=300,
max_evidence_per_section=5,
max_candidates_per_node=5,
max_evidence_per_candidate=5,
max_stock_evidence_items=10,
)
initialize_cache(db_path=None)
index_episode(podcast_id, episode_ref, force=False, db_path=None)
rebuild_cache(podcast_id=None, force=False, db_path=None)
search_transcripts(query, podcast_id=None, limit=20, db_path=None, search_mode="auto", context_segments=0, case_sensitive=False)
search_mentions(query, podcast_id=None, mention_type=None, limit=20, db_path=None, case_sensitive=False)
run_corpus_episode_intake(podcast_id, episode_ref="latest", confirm=False)
generate_corpus_index(podcast_id)
generate_corpus_remediation_plan(podcast_id)
run_corpus_audio_download(podcast_id, episode_ref=None, confirm=False)
run_corpus_remediation(
podcast_id,
confirm=False,
episode_ref=None,
action_family=None,
max_actions=None,
force=False,
allow_partial=False,
)
run_corpus_local_transcription(
podcast_id,
episode_ref=None,
confirm=False,
model=None,
device="cpu",
compute_type="int8",
vad_filter=False,
)
run_corpus_episode_workflow(
podcast_id,
episode_ref="latest",
stage="next",
confirm=False,
model=None,
device="cpu",
compute_type="int8",
vad_filter=False,
force=False,
allow_partial=False,
max_actions=None,
)
run_corpus_semantic_remediation(
podcast_id,
episode_ref,
action="next",
confirm=False,
api_cost_ack="",
provider="openai-compatible",
model=None,
base_url=None,
api_key_env="OPENAI_API_KEY",
chunk_seconds=600,
max_segments_per_chunk=120,
progress_callback=None,
)
run_corpus_episode_completion_workflow(
podcast_id,
episode_ref="latest",
action="next",
confirm=False,
api_cost_ack="",
transcription_model=None,
transcription_device="cpu",
transcription_compute_type="int8",
transcription_vad_filter=False,
semantic_provider="openai-compatible",
semantic_model=None,
semantic_base_url=None,
semantic_api_key_env="OPENAI_API_KEY",
semantic_chunk_seconds=600,
semantic_max_segments_per_chunk=120,
progress_callback=None,
)
run_corpus_latest_episode_deterministic_workflow(
podcast_id,
confirm=False,
transcription_model=None,
transcription_device="cpu",
transcription_compute_type="int8",
transcription_vad_filter=False,
)
run_latest_episode_verified_research_report_workflow(
podcast_id,
confirm=False,
expected_episode_ref=None,
api_cost_ack="",
stock_query=None,
include_fixture_verification=False,
)
run_episode_verified_research_report_workflow(
podcast_id,
episode_ref,
confirm=False,
stock_query=None,
include_fixture_verification=False,
)summarize_episode は deterministic / extractive template であり、外部 LLM API を呼び出さず、意味推論も生成しません。semantic_summarize_episode は OpenAI 互換 API を使用して意味要約を生成し、重要な判断には可能な限り timestamp evidence を付け、投資アドバイスを構成するものではありません。extract_mentions は deterministic rules を使用して transcript segments から mentions を抽出し、各 mention には timestamp evidence が保持されます。generate_episode_intelligence_report は deterministic rules を使用して既存の transcript と mentions artifact から単一エピソードの episode intelligence report を生成し、LLM を呼び出さず、外部市場データを照会せず、株式マッピングや投資アドバイスも生成しません。generate_industry_chain_mapping はローカルの deterministic mapping config を使用して既存の episode intelligence report から産業チェーンノードと株式候補を生成し、podcast の明示的なエビデンスと推測 / 要検証の研究シグナルを明確に区別します。generate_external_data_boundary はローカルの boundary config を使用して既存の industry mapping から外部データ検証境界 scaffold を生成し、外部プロバイダーを呼び出さず、API key を読み取らず、市場の現状事実も生成しません。verify_external_data_boundary は Phase 6M fixture provider scaffold です。dry-run が先で、confirm=True の場合のみローカル fixture を使用して既存の external boundary の更新を試みます。confirm guard があり、live market API はなく、MCP tool の変更もなく、投資アドバイスも提供しません。load_gooaye_lens_model はローカルの Gooaye Lens 分析フレームワークの読み込みと検証のみを行い、株式レポートを生成せず、LLM を呼び出さず、外部市場データも照会しません。generate_stock_lens_report は podcast 全体のローカル artifacts と Gooaye Lens を使用して株式 / 企業の調査フレームワークを生成し、LLM を呼び出さず、外部市場データを照会せず、売買推奨、目標株価、または保証リターンを提供しません。generate_stock_lens_synthesis_report は Phase 6J Stock Lens LLM Synthesis です。dry-run が先で、デフォルトの LLM input boundary は 6F stock lens JSON のみであり、confirmed execution は正確な api_cost_ack を提供する必要があります。Phase 6V ではレビュー済み semantic summary context を明示的にオプトインできますが、それでも raw transcript は読み取らず、外部市場データを照会せず、MCP tool の変更もなく、売買推奨も提供しません。run_research_workflow は dry-run が先のローカル research workflow runner であり、mentions、episode intelligence、industry mapping、external boundary、オプションの stock lens を接続します。Phase 6I は research workflow 内でのオプションの semantic summary 実行をサポートし、Phase 6K は workflow のオプトイン合成をサポートし、include_stock_lens_synthesis=True を使用して Phase 6J synthesis を stock lens report の後に接続できます。Phase 6N はオプションの workflow fixture 検証をサポートし、include_external_data_verification=True を使用して external boundary の後にローカル fixture provider で外部検証ステータスを更新できます。このステップには live market API はなく、API key もなく、MCP tool の変更もなく、自動キャッシュ再構築もなく、投資アドバイスも提供しません。generate_corpus_index はローカルの per-episode artifacts と semantic review metadata のみをスキャンし、deterministic な corpus status JSON/Markdown を書き込みます。RSS を読み取らず、SQLite cache を読み取らず、LLM を呼び出さず、.env を読み取らず、MCP tool を追加せず、raw transcript/evidence/semantic body も出力しません。generate_corpus_remediation_plan は最初に corpus index を更新してから、ローカルの status metadata から full-ladder のギャップ、blockers、warnings、manual-only のアクションテキストを導出し、deterministic な remediation JSON/Markdown を書き込みます。ダウンロード、文字起こし、要約、workflow、LLM、MCP、cache rebuild は実行せず、raw transcript/evidence/semantic body/prompt/raw LLM output も出力しません。run_corpus_audio_download は最初に remediation plan を更新し、dry-run では audio missing かつ action ready の候補メタデータのみを返し、RSS を読み取らず、network/downloader を呼び出さず、run report も書き込みません。confirmed execution では単一のエピソードを指定する必要があり、その場合のみ既存の download_audio() を呼び出し、最新の deterministic audio download run report を書き込みます。レポートには source URL、query string、secret、traceback は含まれません。run_corpus_remediation は最初に remediation plan を更新し、dry-run では選択 / スキップ / ブロック / 除外されたメタデータのみを返します。confirmed execution ではエピソードまたはアクションファミリーを指定する必要があり、transcript-ready な deterministic families(extractive summary、mentions、episode intelligence、industry mapping、external boundary)のみを実行し、最新の deterministic run report を書き込みます。run_corpus_local_transcription は最初に remediation plan を更新し、dry-run ではローカルで audio が利用可能で transcript が欠落している候補メタデータのみを返します。confirmed execution では単一のエピソードを指定する必要があり、明示的なローカル audio_path のみを使用して既存の文字起こしコアを呼び出し、音声ファイルをダウンロードせず、破損 / 部分的な transcript を修復せず、LLM/MCP/cache rebuild には触れず、最新の deterministic local transcription run report を書き込みます。run_corpus_episode_workflow は新しいエピソードのための dry-run ファーストの安全なエントリポイントです。intake、audio download、local transcription、deterministic remediation の次の安全なステージを順に判断します。dry-run では workflow report を書き込まず、ステージも実行しません。confirmed execution では stage="next" を使用して一度に 1 つのステージのみを実行し、最新の deterministic workflow run report を書き込みます。LLM ステップはすべて confirm=True で正確な api_cost_ack を提供した場合のみ外部 LLM を呼び出します。この workflow は依然として外部市場データを照会せず、stock lens synthesis 用の raw transcript もなく、MCP tool の変更もなく、キャッシュを自動再構築しません。rebuild_cache は既存の artifacts のみをインデックスし、自動的にダウンロード、文字起こし、要約、mentions 抽出、調査レポート生成、mapping 生成、external boundary 生成、stock lens report 生成は行いません。
014 stabilization の正確な契約:confirm=False は strict zero-file であり、設定済みの podcast RSS feed とローカル artifacts の読み取り以外に、ファイルを作成、変更、削除しません。seeded selection はインメモリの index/plan スナップショットを 1 つだけ作成し、012/011/010 の順にプレビューします。これは standalone の 010/011/012 dry-run で意図的に保持されている fresh 008/009 persistence の動作とは異なります。
run_corpus_semantic_remediation(...) は standalone の single-episode 015 semantic remediation Core です。有効なリクエストごとに fresh なインメモリ 008/009 スナップショットを正確に 1 つ作成し、最初に明示的な canonical episode を分離してから、semantic_summary、semantic_review、completed、または blocked/manual-only を選択します。010 や 014 は呼び出しません。Dry-run は strict zero-file であり、profile、.env、credential、provider を解決しません。confirmed semantic_summary は明示的なアクションが必要で、before profile / .env / provider 構築で正確な api_cost_ack を検証する必要があります。confirmed semantic_review は決定論的であり、LLM 設定を一切読み取りません。confirmed run ごとに最大 1 つの executor を呼び出し、confirmed-only の最新 JSON/Markdown レポート(generated_at なし)を書き込み、index、plan、SQLite cache を再構築せず、MCP tool も追加しません。当時の registry は正確に 12 tools のまま変更されません。
run_corpus_episode_completion_workflow(...) は 016 の single-episode completion Core です。dry-run は strict zero-file で intake から semantic review までの次のアクションを判断します。人間の確認後、canonical episode に対して 1 つのマッチングアクションのみを明示的に実行して停止します。stdio MCP の同名の run_corpus_episode_completion_workflow tool は、この preview → human approval → one action の境界を維持し、.env を読み取らず、キャッシュを自動再構築せず、投資アドバイスも提供しません。
run_corpus_latest_episode_deterministic_workflow(...) は 017 の one-request latest-episode Core です。dry-run は現在の latest のみを解決し、strict-zero-file の決定論的処理計画を返します。SPEC 017 is Implemented. The 2026-07-17 seeded/downloaded child-outcome mapping problem is a resolved historical blocker; recorded metadata-only confirmed EP679 evidence ends with outcome=ready_for_semantic_summary, ready_count=1, blocked_count=0, and failed_count=0. The contract locks one canonical episode at start, processes intake、ダウンロード、ローカル文字起こし、必要な deterministic remediation を処理し、失敗 / ブロックされたステージでは fail closed し、.env、provider、semantic summary/review、retry、cache rebuild なしで ready_for_semantic_summary で停止します。
run_latest_episode_verified_research_report_workflow(...) は SPEC 018 の latest-episode verified research report Core です。デフォルトの confirm=False は latest を 1 回だけ解決し、checkpoint、staging、report bundle を作成せずに strict-zero-file プレビューを返します。confirmed request は、RSS、環境 / provider、writer、子ステージの前に、プレビューで得た正確な expected_episode_ref と完全に等しい api_cost_ack を提供する必要があります。pinned 017 deterministic ladder を再利用し、semantic summary/review の正確な passed ゲートの後、固定された安全な research options で決定論的な JSON、Markdown、manifest bundle を作成します。bundle は content digest version、atomic directory publish、identical-content reuse、conflict fail-closed を採用しています。キャッシュを自動再構築せず、ライブ市場 API を照会せず、投資アドバイスを構成するものではありません。
run_episode_verified_research_report_workflow(...) は SPEC 019 の explicit-episode verified research report Core です。明示的な episode_ref(履歴エピソードも可。latest/next は拒否)を要求し、プレビューはローカルの readiness のみをチェックしてゼロ書き込みです。confirm は lineage と review が合格した場合のみ 018 と同等の digest bundle を assemble/publish し、api_cost_ack は不要で、LLM/RSS/download を呼び出さず、015–017 も接続しません。欠落がある場合は blocked を返し、missing/stale ロールをリストします。
SPEC 020 は list_verified_research_reports(...)、search_verified_research_reports(...)、inspect_verified_research_report(...) のオフライン読み取り専用 manifest ファーストカタログシームを提供します。安全な manifest 由来のメタデータをリスト、検索、または正確な bundle のローカル自己整合性を検査します。本文検索は行わず、生の manifest や絶対パスは返さず、エクスポートせず、DB/FTS/vector/cache を使用せず、network/LLM も使用せず、ソースの最新性を主張しません。Inspect は常に source_currentness_status=not_evaluated を返します。
SPEC 022 は list_verified_research_report_coverage(podcast_id, *, has_bundle=None, limit=50) を提供します。正確な podcast でローカル inventory × verified-report bundle のエピソード中心のカバレッジ結合を実行し、bundle が欠落しているエピソードまたは既に bundle があるエピソードのみをオプションでリストします。オフライン / ゼロ書き込み / レポート本文を読み取らず、ソースの再検証や最新性の主張も行いません。
validate_transcript は文字起こしが完全か、空か、部分的に完了しているか、欠落しているか、破損しているかを確認するために使用できます。
run_corpus_episode_intake は dry-run ファーストの RSS episode bootstrap runner です。dry-run は latest または単一の明示的な episode selector を解決できますが、書き込み、ダウンロード、文字起こしは行わず、LLM/MCP/cache にも触れません。confirmed execution は安全な seed metadata と最新の deterministic intake report のみを書き込み、008/009/012 が audio を発見、計画、ダウンロードできるようにします。
出力パス規則
すべての成果物は data/ にあります:
音声ファイル:
data/audio/{podcast_id}/{episode_ref}__{safe_title_slug}.{ext}文字起こし:
data/transcripts/{podcast_id}/{episode_ref}__{safe_title_slug}.txt字幕:
data/transcripts/{podcast_id}/{episode_ref}__{safe_title_slug}.srt文字起こしメタデータ:
data/transcripts/{podcast_id}/{episode_ref}__{safe_title_slug}.json要約:
data/summaries/{podcast_id}/{episode_ref}__{safe_title_slug}.mdセマンティック要約:
data/summaries/{podcast_id}/{episode_ref}__{safe_title_slug}.semantic.mdMentions JSON:
data/mentions/{podcast_id}/{episode_ref}__{safe_title_slug}.mentions.jsonMentions Markdown:
data/mentions/{podcast_id}/{episode_ref}__{safe_title_slug}.mentions.mdEpisode intelligence JSON:
data/reports/{podcast_id}/{episode_ref}__{safe_title_slug}.intelligence.jsonEpisode intelligence Markdown:
data/reports/{podcast_id}/{episode_ref}__{safe_title_slug}.intelligence.mdIndustry mapping JSON:
data/mappings/{podcast_id}/{episode_ref}__{safe_title_slug}.industry-map.jsonIndustry mapping Markdown:
data/mappings/{podcast_id}/{episode_ref}__{safe_title_slug}.industry-map.mdExternal data boundary JSON:
data/external/{podcast_id}/{episode_ref}__{safe_title_slug}.external-boundary.jsonExternal data boundary Markdown:
data/external/{podcast_id}/{episode_ref}__{safe_title_slug}.external-boundary.mdStock lens JSON:
data/stock-lens/{podcast_id}/{safe_stock_query}.stock-lens.jsonStock lens Markdown:
data/stock-lens/{podcast_id}/{safe_stock_query}.stock-lens.mdStock lens synthesis JSON:
data/stock-lens/{podcast_id}/{safe_stock_query}.stock-lens-synthesis.jsonStock lens synthesis Markdown:
data/stock-lens/{podcast_id}/{safe_stock_query}.stock-lens-synthesis.mdCorpus index JSON:
data/corpus/{podcast_id}/corpus-index.jsonCorpus index Markdown:
data/corpus/{podcast_id}/corpus-index.mdCorpus episode seed JSON:
data/corpus/{podcast_id}/episode-seeds/{episode_ref}.episode-seed.jsonCorpus episode intake run JSON:
data/corpus/{podcast_id}/corpus-episode-intake-run.jsonCorpus episode intake run Markdown:
data/corpus/{podcast_id}/corpus-episode-intake-run.mdCorpus remediation plan JSON:
data/corpus/{podcast_id}/corpus-remediation-plan.jsonCorpus remediation plan Markdown:
data/corpus/{podcast_id}/corpus-remediation-plan.mdCorpus remediation run JSON:
data/corpus/{podcast_id}/corpus-remediation-run.jsonCorpus remediation run Markdown:
data/corpus/{podcast_id}/corpus-remediation-run.mdCorpus local transcription run JSON:
data/corpus/{podcast_id}/corpus-local-transcription-run.jsonCorpus local transcription run Markdown:
data/corpus/{podcast_id}/corpus-local-transcription-run.mdCorpus audio download run JSON:
data/corpus/{podcast_id}/corpus-audio-download-run.jsonCorpus audio download run Markdown:
data/corpus/{podcast_id}/corpus-audio-download-run.mdCorpus episode workflow run JSON:
data/corpus/{podcast_id}/corpus-episode-workflow-run.jsonCorpus episode workflow run Markdown:
data/corpus/{podcast_id}/corpus-episode-workflow-run.mdCorpus semantic remediation run JSON:
data/corpus/{podcast_id}/corpus-semantic-remediation-run.jsonCorpus semantic remediation run Markdown:
data/corpus/{podcast_id}/corpus-semantic-remediation-run.mdCorpus episode completion workflow run JSON:
data/corpus/{podcast_id}/corpus-episode-completion-workflow-run.jsonCorpus episode completion workflow run Markdown:
data/corpus/{podcast_id}/corpus-episode-completion-workflow-run.mdCorpus latest deterministic workflow run JSON:
data/corpus/{podcast_id}/corpus-latest-episode-deterministic-workflow-run.jsonCorpus latest deterministic workflow run Markdown:
data/corpus/{podcast_id}/corpus-latest-episode-deterministic-workflow-run.mdVerified research checkpoint:
data/corpus/{podcast_id}/verified-research/{episode_ref}.checkpoint.jsonVerified research report bundle:
data/research-reports/{podcast_id}/{episode_ref}/v1-{source_digest}/report.json、report.md、manifest.jsonSQLite metadata cache:
data/cache/podcast_ingest.sqlite3Episode cache:
data/cache/{podcast_id}/episodes.json
podcast_id は小文字の slug でなければなりません。Episode ref は RSS title と podcast profile の default_episode_prefix から解決されます(例: EP672)。ファイル名の title slug は、Windows で無効な文字、制御文字、emoji、およびリスクの高い記号を除去します。
CLI の例
podcast-level corpus status index を生成します:
python scripts/generate_corpus_index.py --podcast gooayeこの CLI はローカルの per-episode artifacts のみを読み取り、data/corpus/{podcast_id}/corpus-index.json と .md を書き換えます。stdout は metadata-only JSON で、出力パス、episode count、warning count、artifact family counts を含みます。transcript 原文、evidence snippet、semantic summary body、prompt、raw LLM output、API key、provider secret は含みません。
podcast-level corpus remediation plan を生成します:
python scripts/generate_corpus_remediation_plan.py --podcast gooayeこの CLI は最初に corpus index を更新してから、data/corpus/{podcast_id}/corpus-remediation-plan.json と .md を書き換えます。stdout は metadata-only JSON で、出力パス、episode count、warning count、action count、blocked/optional/gated action counts を含みます。remediation action は一切実行せず、RSS/SQLite cache/.env は読み取らず、network/LLM/MCP は呼び出さず、transcript/evidence/semantic body/prompt/raw LLM output や secret も出力しません。
単一エピソードの audio download を preview または confirmed で実行します:
python scripts/run_corpus_audio_download.py --podcast gooaye
python scripts/run_corpus_audio_download.py --podcast gooaye --episode EP672 --confirmこの CLI は最初に corpus remediation plan を更新します。したがって、standalone dry-run でも fresh な corpus index と remediation plan が永続化されます。デフォルトの dry-run は stdout に metadata-only JSON のみを返し、RSS は読み取らず、network/downloader は呼び出さず、corpus-audio-download-run.json/.md は書き込まず、audio も書き込みません。--confirm は単一の --episode と組み合わせる必要があり、audio status が missing かつ audio action が ready の場合にのみ、既存の download_audio() を呼び出します。Confirmed run は最新の data/corpus/{podcast_id}/corpus-audio-download-run.json と .md を書き込みますが、timestamp、source URL/query string/secret/traceback は含まれず、投資アドバイスも提供しません。audio を書き込むか再利用した後は、転写、下流の remediation、cache rebuild は手動で実行する必要があることだけを通知します。
deterministic corpus remediation を preview または confirmed で実行します:
python scripts/run_corpus_remediation.py --podcast gooaye
python scripts/run_corpus_remediation.py --podcast gooaye --action-family mentions --confirm
python scripts/run_corpus_remediation.py --podcast gooaye --episode EP672 --confirmこの CLI は最初に corpus remediation plan を更新します。したがって、standalone dry-run でも fresh な corpus index と remediation plan が永続化されます。デフォルトの dry-run は stdout に metadata-only JSON のみを返し、corpus-remediation-run.json/.md は書き込まず、artifact generator も実行しません。--confirm は --episode または --action-family と組み合わせる必要があり、既存の deterministic core functions のみを呼び出し、scripts への shell out は行いません。v1 は download、transcribe、semantic summary/review、stock-lens、LLM、RSS/network、SQLite cache rebuild、.env、MCP を実行しません。Confirmed run は最新の data/corpus/{podcast_id}/corpus-remediation-run.json と .md を書き込みますが、timestamp、raw transcript/evidence/semantic body/prompt/raw LLM output/secret は含まれず、投資アドバイスも提供しません。
単一エピソードのローカル転写を preview または confirmed で実行します:
python scripts/run_corpus_local_transcription.py --podcast gooaye
python scripts/run_corpus_local_transcription.py --podcast gooaye --episode EP672 --confirm
python scripts/run_corpus_local_transcription.py --podcast gooaye --episode EP672 --confirm --model small --device cuda --compute-type float16この CLI は最初に corpus remediation plan を更新します。したがって、standalone dry-run でも fresh な corpus index と remediation plan が永続化されます。デフォルトの dry-run は stdout に metadata-only JSON のみを返し、corpus-local-transcription-run.json/.md は書き込まず、transcript も書き込まず、Whisper model も読み込まず、音声ファイルもダウンロードしません。--confirm は単一の --episode と組み合わせる必要があり、local audio path が存在し、かつ transcript status が missing の場合にのみ、既存の transcribe_episode() を呼び出し、audio_path と force=False を明示的に渡します。Confirmed run は最新の data/corpus/{podcast_id}/corpus-local-transcription-run.json と .md を書き込みますが、timestamp、raw transcript/prompt/raw LLM output/secret/traceback は含まれず、投資アドバイスも提供しません。transcript を書き込んだ後は、cache が stale になっている可能性があることだけを通知し、cache を自動的に rebuild しません。
fresh episode workflow の次の safe stage を preview または confirmed で実行します:
python scripts/run_corpus_episode_workflow.py --podcast gooaye --episode latest
python scripts/run_corpus_episode_workflow.py --podcast gooaye --episode latest --stage next --confirm
python scripts/run_corpus_episode_workflow.py --podcast gooaye --episode EP677 --stage next --confirm --model small --device cuda --compute-type float16この CLI の 014 dry-run は strict zero-file です。013 は設定済みの RSS 解析 selector を読み取ることができます。seed がある場合は、fresh な in-memory corpus index/plan snapshot を一度だけ作成し、同じ snapshot を使って 012/011/010 を preview します。seed、audio、transcript、index、plan、010-014 reports、downstream artifacts、.part は作成・変更・削除しません。planned reads には安全な local dependency paths を含めることができ、非 path 値は 2 つの exact labels のみ許可されます。Confirmed execution は明示的に --stage next --confirm を指定する必要があり、毎回 1 つの既存の public runner のみを dispatch します。その runner は元の契約に従って index/plan を更新し、selected-stage artifacts を書き込むことができ、014 は結果を記録した後で停止し、最新の workflow report を書き込みます。semantic/LLM/stock-lens/MCP/cache rebuild/batch の作業は manual follow-up としてリストされるだけで、自動的には実行されません。
単一エピソードの semantic remediation を preview または confirmed で実行します:
python scripts/run_corpus_semantic_remediation.py --podcast gooaye --episode EP700
python scripts/run_corpus_semantic_remediation.py --podcast gooaye --episode EP700 --action semantic_summary --confirm --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."
python scripts/run_corpus_semantic_remediation.py --podcast gooaye --episode EP700 --action semantic_review --confirm015 は latest を受け付けません。dry-run action=next は metadata のみを返し、strict zero-file です。Confirmed summary の exact api_cost_ack は、profile、.env、credential、provider construction の前に必要です。review は acknowledgement を必要とせず、profile/.env を解決したり LLM を呼び出したりしません。Validated confirmed attempt は corpus-semantic-remediation-run.json/.md を書き込みますが、generated_at は含まれず、transcript/semantic/prompt/raw response/base URL/secret/traceback も含まれません。index、plan、cache は stale になっている可能性があるため、手動で更新する必要があります。
単一エピソードの completion workflow を preview、またはユーザーの明示的な確認後に実行します:
python scripts/run_corpus_episode_completion_workflow.py --podcast gooaye
python scripts/run_corpus_episode_completion_workflow.py --podcast gooaye --episode EP677 --action audio_download --confirm
python scripts/run_corpus_episode_completion_workflow.py --podcast gooaye --episode EP677 --action semantic_summary --confirm --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."016 dry-run は strict zero-file です。seed がある場合は、メモリ内に fresh な 008/009 snapshot を 1 つだけ作成し、intake、audio download、local transcription、deterministic remediation、semantic summary、semantic review のうち次の safe action を順に選択します。confirmed は dry-run が返した canonical episode と同じ explicit action を使用する必要があります。next、latest、または stale action は拒否され、毎回最大 1 つの既存 runner を dispatch した後で停止します。semantic summary の exact ack は、profile/.env/provider の作業より前に完了している必要があります。semantic review は LLM 設定を読み取りません。有効な confirmed attempt の場合のみ、data/corpus/{podcast_id}/corpus-episode-completion-workflow-run.json と .md を原子的に書き込み、index、plan、SQLite cache は自動的には更新しません。
Agent が操作する場合は、同名の MCP tool run_corpus_episode_completion_workflow と repository の portable corpus-episode-completion Skill を使用します。最初に preview し、リスクを説明し、canonical action に対する人間の明示的な同意を待ってから、1 つの action を実行して停止します。MCP がない場合に CLI、terminal、scheduler、自動リトライに切り替えてはなりません。
latest deterministic workflow を preview または controlled confirmed で実行します:
python scripts/run_corpus_latest_episode_deterministic_workflow.py --podcast gooaye
python scripts/run_corpus_latest_episode_deterministic_workflow.py --podcast gooaye --confirmSPEC 017 は実装済みです。Agent が「Gooaye の最新エピソードを処理して」などの明示的なリクエストを受け取った場合、corpus-latest-episode-processing Skill はその explicit natural-language request を 1 回の execution authorization とみなします。acknowledge は 1 回だけ行い、confirm=true を指定して dedicated な run_corpus_latest_episode_deterministic_workflow MCP tool を 1 回だけ呼び出し、metadata-only result を 1 回だけ報告してから停止します。MCP tool 自体は依然としてデフォルトで confirm=false の dry-run です。Skill は先に preview してはならず、second call もしてはならず、CLI/terminal fallback、スケジュール、バッチ、リトライ、cache rebuild、semantic summary/review も使用してはなりません。
latest verified research report workflow を preview します:
python scripts/run_latest_episode_verified_research_report_workflow.py --podcast gooayeSPEC 018 の preview は strict zero-write で、canonical episode reference と exact required acknowledgement を 1 つ返します。ユーザーがその previewed episode に明示的に同意した場合のみ、同じ --expected-episode-ref と exact --api-cost-ack を使って --confirm を 1 回実行します。確認は RSS、environment/provider、writer、child stage の前に発生する必要があります。workflow は pinned deterministic ladder を再利用し、semantic review で exact passed を要求してから、固定された安全な options で deterministic research を完了します。完了後、source digest version の report.json、report.md、manifest.json を原子的に公開し、identical bundle reuse を行い、conflict の場合は fail-closed になります。retry、scheduler、live market API、cache rebuild は行わず、投資アドバイスを構成するものではありません。
オフラインの read-only verified research report catalog を照会します(SPEC 020):
python scripts/query_verified_research_report_catalog.py list --podcast-id gooaye --limit 50
python scripts/query_verified_research_report_catalog.py search "EP672" --podcast-id gooaye
python scripts/query_verified_research_report_catalog.py inspect gooaye EP672 <lowercase-64-hex-source-digest>これら 3 つの subcommands は、canonical なローカル data/research-reports の manifest-first bundles のみを読み取ります。list は exact filters を使用でき、search は safe metadata のみを検索し、inspect は 1 つの exact bundle のローカル自己整合性のみを検証します。report/transcript body は検索せず、raw manifest/absolute paths は返さず、export は提供せず、DB/FTS/vector/cache、RSS/HTTP/network、LLM、.env、download、transcription、remediation も使用しません。latest selector は受け付けず、source latest/currentness の主張も行いません。inspect は常に source_currentness_status=not_evaluated です。境界の省略表記: raw manifest なし; DB/FTS/vector/cache なし; RSS/HTTP/LLM/.env/download/transcription/remediation なし; latest selector なし。
エピソード中心の verified research report coverage を照会します(SPEC 022):
python scripts/query_verified_research_report_coverage.py gooaye
python scripts/query_verified_research_report_coverage.py gooaye --has-bundle false --limit 20ローカル inventory と canonical bundles を join して、report が欠けているエピソードや digest が既にあるエピソードを特定します。offline / zero-write / report body は読み取りません。021 revalidation は再実行せず、source currentness も主張しません。
最新エピソードを一覧表示します:
python scripts/list_episodes.py --podcast gooaye --limit 10
python scripts/list_episodes.py --podcast gooaye --episode latest音声ファイルをダウンロードします:
python scripts/download_episode.py --podcast gooaye --episode latestCPU での転写は、最初に tiny または base モデルでフローを検証することをお勧めします:
python scripts/transcribe_episode.py --podcast gooaye --episode latest --model tiny --device cpu --compute-type int8完全な長いエピソードは CPU では非常に時間がかかる場合があります。faster-whisper、ffmpeg/PyAV、出力フローが使えることを先に確認するだけであれば、短い音声ファイルで smoke test を行うことができます:
python scripts/transcribe_episode.py --audio-path path\to\sample.mp3 --podcast gooaye --episode smoke-test --model tiny --device cpu --compute-type int8 --forceNVIDIA GPU がある場合、環境が CUDA をサポートしていれば試すことができます:
python scripts/transcribe_episode.py --podcast gooaye --episode latest --model small --device cuda --compute-type float16長い音声ファイルの推奨フロー:
python scripts/transcribe_episode.py --podcast gooaye --episode latest --model tiny --device cpu --compute-type int8
python scripts/validate_transcript.py --podcast gooaye --episode latest
python scripts/summarize_episode.py --podcast gooaye --episode latest --forceCPU で 50 分の音声ファイルを処理するのは遅い可能性があります。tiny / base は最初にフローを検証するのに適しており、small / medium は品質を向上させるために使用できます。NVIDIA GPU がある場合は、--device cuda --compute-type float16 を試すことができます。timeout 後に高い CPU 使用率の Python process が残っているのを見かけたら、まずその process を手動で停止してから再実行してください。
deterministic Markdown 要約を生成します:
python scripts/summarize_episode.py --podcast gooaye --episode smoke-test --mode extractive --force
python scripts/summarize_episode.py --podcast gooaye --episode EP672 --mode extractive --max-quotes 5 --window-seconds 300要約は既存の transcript のみを読み取り、自動的にダウンロードや転写は行いません。指定した episode に transcript がない場合、CLI は transcript missing を報告します。
transcript が partial の場合、summary はデフォルトで拒否します。どうしても出力したい場合は --allow-partial を追加できます。
LLM semantic summary を生成するには API key と model が必要です。手動テストではローカルの .env を使用することをお勧めします。このファイルは .gitignore で無視されており、commit できません:
API_KEY=your-api-key
MODEL=your-model
BASE_URL=https://api.openai.com/v1python scripts/summarize_episode.py --podcast gooaye --episode EP672 --mode semantic --force --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."CLI で直接設定を上書きすることもできます:
python scripts/summarize_episode.py --podcast gooaye --episode EP672 --mode semantic --model your-model --base-url https://api.openai.com/v1 --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."semantic 模式會先執行 transcript validation,並把 transcript 依預設 600 秒與每 chunk 120 segments 分批送給 provider。LLM-facing CLI 預設會載入 .env,可用 --env-file path\to\.env 指定其他檔案,或用 --no-env-file 停用。若 .env 與 PowerShell session 都有同名變數,PowerShell session 優先。MODEL / BASE_URL 是目前建議命名;若未設定,仍會相容讀取舊的 OPENAI_MODEL / OPENAI_BASE_URL。若缺少 API key 或 model,CLI 會清楚回報設定錯誤;extractive mode 不需要 API key。語意摘要不構成投資建議,所有重要市場觀點、公司、人物與事件都應盡量回到 timestamp evidence。
Phase 6U 補上 semantic summary smoke validation。這條路徑在 confirmed execution 會送 transcript text outside this machine;dry-run 只列 planned reads/writes、transcript transfer risk、cost risk 與 required acknowledgement,不呼叫 LLM、不寫 artifact、不輸出逐字稿內容。Confirmed semantic summary smoke 以及 direct --mode semantic CLI 都必須提供 exact api_cost_ack。CLI stdout 維持 no raw transcript stdout、不顯示 secret value;此階段 no MCP tool changes、no live market API、no automatic cache rebuild、no investment advice。
Phase 6U.1 修正 semantic review guard false positive:semantic summary review 允許 podcast 內容中 speaker 過去買進 / 持有這類 transcript-derived 描述,但仍拒絕直接 buy/sell/hold、建議買進、目標價與保證報酬。Confirmed semantic smoke 也加入 stderr progress,stdout 仍維持 JSON,且 progress 不輸出 raw transcript、prompt、API key 或 LLM response。
Phase 6V adds optional reviewed semantic context for stock lens synthesis. Default synthesis remains phase-6f-stock-lens-json-only and does not read .semantic.md. When explicitly enabled with --include-semantic-context, synthesis may include only matched episode semantic summaries with a latest passed review report; the input boundary becomes phase-6f-stock-lens-json-plus-reviewed-semantic-summary. The context excludes ## Chunk Summaries, does not read raw transcript text, does not read .env, does not fetch live market data, and makes no MCP tool changes. Reviewed semantic summary context is an LLM intermediate artifact, not podcast raw evidence and not an external market fact. Phase 6V.1 aligns the deterministic review gate with boundary/context consistency: JSON-only synthesis must have no semantic context, and reviewed semantic synthesis must include non-empty, review-passed semantic context.
python scripts/run_research_llm_smoke.py --podcast gooaye --episode EP672 --stock 台積電 --llm-profile pro4500 --confirm --force --include-semantic-context --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."LLM provider profile 可放在 config/llm_profiles.yaml,只保存 provider、model、base URL 與 API key 環境變數名稱,不保存 API key 值。工作中的 pro4500 profile 使用 api_key_env=API_KEY,因此可搭配 .env 的 API_KEY=... 使用。committed gb10 profile 已標成 unavailable,載入時會失敗並提示改用 pro4500。不要把 API key、token 或 secret 寫進 YAML。
擷取 deterministic mentions:
python scripts/extract_mentions.py --podcast gooaye --episode EP672 --force
python scripts/extract_mentions.py --podcast gooaye --episode EP672 --max-evidence-per-mention 3Mention extraction 不使用 LLM,不代表完整語意理解,只依 deterministic rules 從 transcript segments 掃描公司、ticker、產業、總經主題、crypto 與地點等 mention。每個 mention 都會附 timestamp evidence,且不構成投資建議。Phase 3 cache 可將 mentions 匯入 SQLite 並提供基礎跨集查詢;未來 MCP tools 可直接包裝這些 core functions。
產生 deterministic episode intelligence report:
python scripts/generate_episode_intelligence_report.py --podcast gooaye --episode EP672 --force
python scripts/generate_episode_intelligence_report.py --podcast gooaye --episode EP672 --window-seconds 600 --max-evidence-per-section 3Episode intelligence report 只讀既有 transcript 與 mentions artifact,不會自動下載、轉錄、摘要、抽 mentions、呼叫 LLM 或查外部市場資料。若 mentions artifact 缺失,報告仍可產生,但會標示 source warning 並讓 mention-derived sections 留空。Partial transcript 預設拒絕;確定要產出草稿可加 --allow-partial。
產生 deterministic industry chain / stock candidate mapping:
python scripts/generate_industry_chain_mapping.py --podcast gooaye --episode EP672 --force
python scripts/generate_industry_chain_mapping.py --podcast gooaye --episode EP672 --max-candidates-per-node 3 --max-evidence-per-candidate 2Industry mapping 只讀既有 episode intelligence report 與 config/industry_chain_mappings.yaml,不會呼叫 LLM 或查外部市場資料。podcast_explicit 表示 podcast evidence 中明確提到;inferred_from_industry 只代表本機 mapping config 推導出的未查證研究線索,預設 needs_verification,不代表股癌明確提到,也不構成投資建議。
產生 external market data boundary scaffold:
python scripts/generate_external_data_boundary.py --podcast gooaye --episode EP672 --force
python scripts/generate_external_data_boundary.py --podcast gooaye --episode EP672 --allow-partialExternal data boundary 只讀既有 industry mapping 與 config/external_data_boundary.yaml,不會呼叫外部市場資料 provider、不讀 API key、不產生價格、市值、財報、新聞或公司現況事實。每個 candidate 會標示 external_verification_status=not_requested、source_status=not_fetched 與 data_date=null,並列出後續需要查證的外部資料類型。
使用本機 fixture provider 驗證 external boundary:
python scripts/verify_external_data_boundary.py --podcast gooaye --episode EP672
python scripts/verify_external_data_boundary.py --podcast gooaye --episode EP672 --confirm --force
python scripts/verify_external_data_boundary.py --podcast gooaye --episode EP672 --confirm --fixture-path config/external_market_data_fixtures.yamlPhase 6M 只提供 fixture provider scaffold。預設 dry-run 不寫 artifacts;--confirm 是 confirm guard,確認後只讀本機 config/external_market_data_fixtures.yaml 或指定 fixture path,依 company_name / ticker 精準比對並更新既有 .external-boundary.json/.md。本階段 no live market API、不讀 API key、不新增 MCP tools、不接 research workflow,也不提供 no investment advice 以外的任何市場建議。
檢查 Gooaye Lens model:
python scripts/inspect_gooaye_lens.py
python scripts/inspect_gooaye_lens.py --path config/gooaye_lens.yamlGooaye Lens model 是 Phase 6F stock lens report 的 deterministic 分析框架來源,定義產業鏈位置、供需與庫存、景氣循環、利率與估值敏感度、資本支出與產能、地緣政治與不確定性等維度。Phase 6E 只載入與驗證本機 config,不接受股票輸入、不寫 artifacts、不呼叫 LLM、不查外部市場資料,也不產生買賣建議、目標價或保證報酬。
產生 podcast-wide deterministic stock lens report:
python scripts/generate_stock_lens_report.py --podcast gooaye --stock 台積電 --force
python scripts/generate_stock_lens_report.py --podcast gooaye --stock NVDA --max-evidence-items 5Stock lens report 會掃描該 podcast 既有 data/mappings/ 與 data/external/ artifacts,保守比對 candidate 的 company_name 與 tickers。podcast_explicit 會列為 direct podcast evidence;inferred_from_industry 只會列為 needs-verification research lead,不代表 podcast 明確提到。若沒有 direct podcast evidence,報告仍會產生並明確標示 no-direct-podcast-evidence。此階段不呼叫 LLM、不查外部市場資料、不讀 API key、不新增 MCP tools,也不提供買賣建議、目標價或保證報酬。
產生 Phase 6J Stock Lens LLM Synthesis:
python scripts/generate_stock_lens_synthesis_report.py --podcast gooaye --stock 台積電
python scripts/generate_stock_lens_synthesis_report.py --podcast gooaye --stock 台積電 --confirm --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs." --model your-model
python scripts/generate_stock_lens_synthesis_report.py --podcast gooaye --stock 台積電 --llm-profile pro4500 --confirm --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."Stock lens synthesis 預設 dry-run,只列 planned reads/writes、LLM API/cost risk 與 required acknowledgement,不讀 API key、不呼叫 LLM、不寫 artifacts。Confirmed execution 只把 6F stock lens JSON only 的 compact evidence、lens dimensions、external boundary status 與 warnings 交給 LLM;no raw transcript、no .semantic.md input、no external market data lookup、no MCP tool changes,也不接 run_research_workflow。LLM 輸出若包含 buy/sell/hold、target price 或 guaranteed return 等投資建議語句,會拒絕寫入 synthesis artifact。
執行 Phase 6O LLM research smoke:
python scripts/run_research_llm_smoke.py --podcast gooaye --episode EP672 --stock 台積電 --model your-model
python scripts/run_research_llm_smoke.py --podcast gooaye --episode EP672 --stock 台積電 --confirm --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs." --model your-model --force
python scripts/run_research_llm_smoke.py --podcast gooaye --episode EP672 --stock 台積電 --llm-profile pro4500 --confirm --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs." --force --debug-llm-output
python scripts/run_research_llm_smoke.py --podcast gooaye --episode EP672 --stock 台積電 --confirm --include-semantic-summary --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs." --model your-model --forcePhase 6O 是 OpenAI-compatible smoke + Codex manual review harness。真實 LLM 呼叫仍走 OpenAI-compatible /chat/completions;目前沒有 no direct Codex-session backend,Codex 只作為 manual reviewer 檢查 artifacts、prompt 邊界與品質。Smoke 預設跑 stock lens synthesis 並啟用 fixture external verification;semantic summary 必須明確加 --include-semantic-summary,因為它會傳送 transcript text。此階段 no live market data、不新增 MCP tools、不改 investment-advice boundary,也維持 no investment advice。
Phase 6Q 加入 LLM profile config,手動測試可用 --llm-profile pro4500 讀取 config/llm_profiles.yaml。CLI 明確傳入的 --model、--base-url、--api-key-env 會覆寫 profile;YAML 不得包含 API key、token 或 secret 值。Phase 6R 加入本機 .env loader,LLM-facing CLI 預設讀取 .env 的 API_KEY、MODEL、BASE_URL,並只在 JSON metadata 顯示載入的 env var 名稱,不顯示值。
若要診斷 provider 回覆,可加 --debug-llm-output,raw LLM output 只會寫到已由 .gitignore 忽略的 evals/research-llm-smoke/raw/,不會成為正式 artifact。
Phase 6T 加入 deterministic review report / quality gate。Confirmed smoke 後可用下列命令產生 timestamped review report;它只讀既有 artifacts,no LLM call、no .env read、no external market data,也不重寫 synthesis artifacts:
python scripts/review_research_llm_smoke.py --podcast gooaye --episode EP672 --stock 台積電LLM smoke 文件與 review template:
python scripts/run_semantic_summary_smoke.py --podcast gooaye --episode EP672 --llm-profile pro4500
python scripts/run_semantic_summary_smoke.py --podcast gooaye --episode EP672 --llm-profile pro4500 --confirm --force --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs."
python scripts/review_semantic_summary_smoke.py --podcast gooaye --episode EP672Dry-run 或執行本機 deterministic research workflow:
python scripts/run_research_workflow.py --podcast gooaye --episode EP672
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --confirm
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --confirm --stock 台積電
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --include-semantic-summary
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --confirm --include-semantic-summary --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs." --semantic-model your-model
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --include-external-data-verification
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --confirm --include-external-data-verification --external-fixture-path config/external_market_data_fixtures.yaml
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --stock 台積電 --include-stock-lens-synthesis
python scripts/run_research_workflow.py --podcast gooaye --episode EP672 --confirm --stock 台積電 --include-stock-lens-synthesis --api-cost-ack "I understand this may call an external LLM API, send transcript text outside this machine, and incur costs." --synthesis-model your-modelResearch workflow 會先 dry-run,列出 planned reads/writes、step order、semantic LLM 外部 API 風險、cache stale 風險與 confirmation 狀態。預設只執行本機 deterministic steps:extract_mentions、generate_episode_intelligence_report、generate_industry_chain_mapping、generate_external_data_boundary,並在提供 --stock 時產生 stock lens report。Phase 6I 可用 --include-semantic-summary opt in;Phase 6K 可用 --include-stock-lens-synthesis opt in,把 stock lens synthesis 放在 stock lens report 之後。Phase 6N 可用 --include-external-data-verification opt in,把 fixture verification 放在 external boundary 後、stock lens report 前;此步驟只支援 --external-data-provider fixture,只讀本機 fixture,不查 live market API、不讀 API key。Dry-run 只列 semantic / synthesis / fixture plan 與 required acknowledgement,confirmed execution 中只有 LLM 步驟必須提供 exact --api-cost-ack。Stock lens synthesis 需要 --stock,預設只使用 6F stock lens JSON;Phase 6V 可用 --include-semantic-context / --include-semantic-context-in-synthesis opt in reviewed semantic context,仍不讀 raw transcript、不查外部市場資料。此 workflow 不自動 rebuild cache、不新增 MCP tools,也不提供投資建議。
重建 SQLite metadata cache 並搜尋:
python scripts/rebuild_cache.py --podcast gooaye --force
python scripts/search_transcripts.py --podcast gooaye --query 台積電 --limit 10 --search-mode auto
python scripts/search_transcripts.py --podcast gooaye --query 台積電 --limit 10 --search-mode like --context-segments 1
python scripts/search_mentions.py --podcast gooaye --query 台積電
python scripts/search_mentions.py --podcast gooaye --query 台積電 --type companySQLite cache 是衍生資料,可刪除後重建。原始 source of truth 仍是 data/transcripts/、data/summaries/ 與 data/mentions/。Phase 3B 支援 optional SQLite FTS5;若本機 SQLite 不支援 FTS5,或 query 是中文 exact substring,search_transcripts() 會使用 LIKE fallback。搜尋結果會包含 highlighted_text、實際 search_mode,並可用 --context-segments 取得命中片段前後文。這一階段仍不做 embedding、vector search 或 LLM search。
啟動本機 MCP server:
python scripts/rebuild_cache.py --podcast gooaye --force
python scripts/search_transcripts.py --podcast gooaye --query 台積電 --limit 5 --search-mode auto
python scripts/run_mcp_server.pyMCP server 使用官方 Python MCP SDK 的單一 FastMCP instance。本機 Codex / Claude client 繼續使用 stdio;經 Spec 026 核准的 Hermes sidecar 以同一 registry 提供只綁定 127.0.0.1:8767/mcp 的 Streamable HTTP,不使用 legacy SSE、不 publish port。Read/query tools 是:
list_episodesget_episodevalidate_transcriptsearch_transcriptssearch_mentionsrebuild_cachequery_verified_research_report_catalog(Tool 17;offline read-only manifest-first list/search/inspect)revalidate_verified_research_report_sources(Tool 18;exact-locator offline source revalidation)query_verified_research_report_coverage(Tool 19;episode-centric offline coverage join)suggest_historical_verified_report_next_step(Tool 20;historical next-step suggestion)list_verified_report_gap_backlog(Tool 21;inventory gap backlog)generate_stock_lens_report(Tool 22;deterministic stock lens report,side-effect、dry-run-first)ingest_x_video(Tool 23;X video ingest,preview 零寫入但會讀公開 metadata)ingest_youtube_video(Tool 24;YouTube video ingest,preview 零寫入但會讀公開 metadata)
Side-effect tools 是:
download_audiotranscribe_episodesummarize_episode_extractiveextract_mentionssemantic_summarize_episoderun_research_workflowrun_corpus_episode_completion_workflowrun_corpus_latest_episode_deterministic_workflowrun_latest_episode_verified_research_report_workflowrun_episode_verified_research_report_workflowgenerate_stock_lens_reportingest_x_videoingest_youtube_video
本機 reviewed stdio registry 共 24 個 tools。Tool 24 ingest_youtube_video append-only;Tools 1–23 contracts/order 不變。Tool 23 ingest_x_video 仍為 X ingest。Preview 是 zero-write 但會讀公開 metadata,不是 corpus runner 的零網路 dry-run。Tool 22 generate_stock_lens_report 仍為 append-only dry-run-first stock lens。它是 side-effect、dry-run-first 的 deterministic stock lens report,只讀本機 mapping/boundary artifacts,無 live market API、無網路、無 LLM,且不提供投資建議。Tool 21 list_verified_report_gap_backlog append-only;Tools 1–20 contracts/order 不變。它是 inventory gap backlog read-query。Tool 20 仍為 historical next-step suggestion。Tool 19 仍為 episode-centric coverage。Tool 18 仍為 exact-locator offline source revalidation。Tool 17 保留 catalog list/search/inspect 契約。上述 side-effect tools 預設 confirm=false,只回傳 dry-run action plan,不會下載、轉錄或寫檔;確認 action plan 後才使用 confirm=true。run_corpus_episode_completion_workflow 維持 preview → human approval → one explicit action,run_corpus_latest_episode_deterministic_workflow 只處理 latest episode 的本機 deterministic stages 並在 semantic summary 前停止。run_latest_episode_verified_research_report_workflow 必須先 preview,再由使用者給出相同 canonical expected_episode_ref 與 exact api_cost_ack 後只 confirmed 呼叫一次。run_episode_verified_research_report_workflow 以明確 episode_ref(可為歷史集)做 readiness preview,確認後僅 assemble/publish 同等 digest bundle,不需 api_cost_ack、不呼叫 LLM。所有 side-effect tools 完成後都不會自動 rebuild SQLite cache,且不提供投資建議。例如:
Call transcribe_episode with confirm=false first to review the action plan.
Call transcribe_episode again with confirm=true only if you accept the runtime and resource cost.MCP responses 使用 JSON envelope:成功為 {"ok": true, "data": ...},錯誤為 {"ok": false, "error_type": "...", "message": "..."}。Dry-run action plan 會回傳 {"ok": true, "dry_run": true, "requires_confirmation": true, ...}。Side-effect tools 完成後不會自動 rebuild cache;若要讓 search metadata 更新,請手動呼叫 rebuild_cache。MCP search、mentions 與 summaries 都不構成投資建議。
semantic_summarize_episode 是更嚴格的 API-cost tool。它會把 transcript text 傳送到外部 LLM provider,可能產生 API 費用,因此除了 confirm=true,還必須提供 exact acknowledgement:
I understand this may call an external LLM API, send transcript text outside this machine, and incur costs.第一次請以 confirm=false 呼叫,檢查 dry-run action plan、transcript validation preview、chunk 設定與風險。只有接受外部 API、資料傳送與費用風險時,才用 confirm=true 加上 exact api_cost_ack 執行。MCP response 不會回傳 API key,也不會在 dry-run 中回傳逐字稿原文。成功後不會自動 rebuild cache;若要讓 SQLite cache 知道新的 .semantic.md artifact,請手動執行 rebuild_cache。
Phase 6L は run_research_workflow MCP exposure を追加しました。この統合ワークフローツールは dry-run first です。confirm=false の場合は planned reads/writes、step order、external API / cost risk、cache stale warning、required acknowledgement のみを列挙し、artifacts を書き込まず、LLM を呼び出さず、raw transcript を返さず、API key value を読み取りません。confirm=true の場合は既存の core workflow を呼び出します。semantic summary または stock lens synthesis を含む場合は、exact ack / api_cost_ack を提供する必要があります。Workflow MCP tool は external market data を参照せず、automatic cache rebuild を行わず、買賣推奨・目標価格・報酬保証能力を追加しません。
MCP Client Integration
Codex / Claude 系のローカルクライアントは、既存の stdio transport を使用します:
python scripts/run_mcp_server.pyHermes/OpenAB は独立した sidecar と同一の exact 21-tool registry を使用します:
wsl.exe -d UbuntuProd -u root bash scripts/build_hermes_sidecar.sh podcast-ingest-core-mcp:local
docker compose -f deploy/hermes/docker-compose.sidecar.yml config --quietデプロイ、config/Skill plan→apply→rollback、direct-safe validator、移行方法については、deploy/hermes/README.md と specs/026-hermes-mcp-integration/quickstart.md を参照してください。Direct transport は検証済みです。C6 の boolean-only endpoint-equality validator は、targeted tests、POSIX synthetic checks、2 名のレビューアー、唯一の live v2 run をパスしており、ステータスは PASS-current で、再実行しないでください。C7 は依然として Blocked です。Hermes v0.20.0 tag v2026.8.3 の hooks は、未インストールで実機検証されていない候補能力にすぎません。証拠を補うための live config values / session dump の読み取り、raw response の保存、hooks のアップグレードまたは有効化は禁止されています。Spec 027 の contract layer は complete です(offline assurance only)。実際の Hermes runtime routing は BLOCKED/not_evaluated であり、runtime PASS ではありません。Spec 028 の capability gate は complete で、Hermes v0.20.0 tag v2026.8.3 に対して BLOCKED_CAPABILITY で正しく終了します。upgrade、Skill sync、hooks、collector、inference、runtime observation は一切実行されていません。C6 は PASS-current のままで、再実行されていません。実際の Hermes Skill routing は BLOCKED/not_run のままです。
Codex / Claude 系 MCP client に接続する前に、ローカルの readiness check を実行することをお勧めします:
python scripts/validate_mcp_setup.py --podcast gooaye --query 台積電Client setup ドキュメント:
Codex:
docs/codex-mcp-setup.mdClaude:
docs/claude-mcp-setup.mdTroubleshooting:
docs/mcp-troubleshooting.md
これらのドキュメントは placeholder path のみを使用します。個人の .codex/config.toml、個人の絶対パスを含む設定、.env、API key を commit しないでください。
MCP Tool-use Eval
Codex / Claude 系 MCP client に接続した後、eval prompt suite を使用してツール使用が期待どおりかを確認できます。開始する前に、まず以下を実行してください:
python scripts/validate_mcp_setup.py --podcast gooaye --query 台積電記入可能な Codex MCP session eval report を生成します:
python scripts/new_mcp_eval_report.py --name codex-session-001Eval ドキュメント:
フローと rubric:
docs/mcp-tool-use-eval.mdCodex session に貼り付けられる prompts:
docs/mcp-eval-prompts.md実測レポートテンプレート:
docs/mcp-eval-report-template.mdPhase 5C report ディレクトリ:
evals/mcp-tool-use/README.mdPhase 5C Codex session テンプレート:
evals/mcp-tool-use/phase-5c-codex-session-template.md
Phase 5B eval は、外部 LLM API の実際の呼び出しを必要とせず、ダウンロード・転写・要約・artifacts 書き込みの実際の実行も要求しません。重要なのは、tool selection、dry-run、acknowledgement guard、cache stale の説明、投資レポートが生成されないことを確認することです。Phase 5C は report capture フローを提供し、ユーザーが実際の Codex MCP session の結果を evals/ に書き戻せるようにします。
Research Safety Eval
Phase 6H は、LLM 実行前の safety gate です。研究層と将来の LLM workflow が、幻覚を起こさないこと、api_cost_ack をスキップしないこと、raw transcript / API key を漏洩しないこと、external boundary を検証済みの市場データと誤認しないこと、または投資レポートを生成しないことを検証します。
Research eval ドキュメント:
フローと rubric: 「docs/research-safety-eval.md」
Codex session に貼り付ける prompts:
docs/research-eval-prompts.mdPhase 6H report テンプレート:
evals/research-safety/phase-6h-research-session-template.mdPhase 6O LLM smoke:
docs/research-llm-smoke.mdPhase 6O smoke テンプレート:
evals/research-llm-smoke/phase-6o-llm-smoke-template.md
Phase 6H は、LLM を呼び出さず、API key を読み取らず、外部市場データを参照せず、MCP tools を追加せず、Phase 6G workflow も変更しません。Phase 6I は、research workflow 内での optional semantic summary execution を追加しました。Phase 6J は、Stock Lens LLM Synthesis を追加しました。入力境界は LLM として stock lens JSON only で、exact api_cost_ack が必要です。raw はありません transcript なし、external market data なし、MCP tool の変更なし。Phase 6K は workflow opt-in synthesis を追加しました。include_stock_lens_synthesis は workflow が confirmed され、exact ack が提供された後でのみ synthesis を実行します。Phase 6L は run_research_workflow MCP exposure を追加しました。dry-run first で、confirmed execution のときにのみ core workflow をラップします。LLM steps にはやはり exact ack が必要で、automatic rebuild はありません。cache rebuild.。「Phase 6N は optional workflow fixture 検証 include_external_data_verification」を追加しました。ローカルの fixture provider のみをサポートし、live market API、API key、MCP tool の変更、automatic cache rebuild はなく、投資推奨も提供しません。Phase 6O は research-llm-smoke を追加しました。real OpenAI-compatible smoke &experiment with Codex manual review、exact ack、direct Codex-session backend なし、live market data なし、investment advice なし。Phase 6Q は LLM profile config を追加しました。--llm-profile pro4500 で provider/model/base URL/env var 名を再利用できますが、API key value は保存しません。Phase 6R はローカルの .env secret loader を追加しました。手動 LLM smoke では API_KEY、MODEL、BASE_URL を使用でき、CLI metadata は env var 名のみを表示し、secret value は表示しません。Phase 6T は research LLM smoke review report / quality gate を追加しました。confirmed smoke 後に既往の審査 target を決定的な review artifacts を生成できます。no LLM call、no .env read、no external market data。Phase 6V は reviewed semantic context opt-in を追加しました。stock lens synthesis のデフォルトは引き続き stock lens JSON only であり、明示的に有効化した場合のみ review-passed .semantic.md context を使用します。no raw transcript、no live market data、no MCP tool changes、no investment advice。Phase 6V.1 で review gate の境界とコンテキストの整合を並べました。JSON-only artifact は semantic context を持つことはできず、reviewed semantic boundary は review-passed context を持つ必要があります。
Spec Kit / Architecture
Phase 7A は Architecture / Spec Kit Stabilization で、範囲は docs/spec-only です。現在の Phase 6T システムを spec-kit で追跡可能な構造に整理するもので、runtime を変更せず、MCP を変更せず、LLM を呼び出さず、.env を読み取らず、external market data を参照せず、no investment advice の境界も緩めません。Phase 7A の後の機能候補は、Phase 6U semantic summary smoke または小規模な LLM output quality tuning です。
Phase 7B は Official Spec Kit Bootstrap です。プロジェクトに official の specify init と同等の scaffold / が正式に追加されています。.specify は Spec Kit の memory、templates、scripts、workflow と integration metadata を保持します。.agents/skills は Codex の $speckit-* skills を保持します。AGENTS.md はレポジトのレベルの agent rules を保持します。Phase 7B は、runtime を変更せず、MCP を変更せず、LLM を呼び出さず、.env を読み取らず、live market API を参照せず、no investment advice の境界も緩めません。
Phase 7C は Spec Kit Constitution + Workflow Alignment です。このフェーズでは .specify/memory/constitution.md を公式 placeholder からプロジェクト専用にし、.specify/templates/、AGENTS.md、architecture、roadmap、spec plan を同期させます。Phase 7C は docs / spec / tests only です。no runtime behavior change、no MCP behavior change、no LLM call、no .env read、no live market API、no investment advice。Phase 7C 以降、新機能は full Spec Kit flow($speckit-constitution、$speckit-specify、$speckit-clarify、$speckit-plan、$speckit-checklist、$speckit-tasks、$speckit-analyze、$speckit-implement、$speckit-converge)を使用する必要があります。$speckit-taskstoissues は、GitHub issue handoff が必要な場合にのみ使用します。Phase 6U semantic summary smoke は、将来の機能フェーズとして残っています。
Phase 7D は Spec Kit Backfill via Full Workflow です。作成済みの機能を capabilities-group ごとに full Spec Kit flow で backfill します。specs/README.md が registry であり、001-ooaye-research-system は umbrella product spec として維持され、002-ore-cli-transcript-core から 007-spec-kit-safety までが as-built capability packages を記録します。そのうち 006-llm-safety-synthesis-smoke-review は optional LLM/smoke/review gate をカバーします。Phase 7D は docs/spec/tests only です:no runtime behavior change、no MCP behavior change、no LLM call、no .env read、no live market API、no investment advice。また $speckit-clarify、$speckit-analyze、$speckit-converge の backfill 手順も明確に記録されています。
Phase 7D.1 は Spec Kit Active Feature Guidance です。公式の Spec Kit コマンドの使い方を明確にします。feature packages は specs/<feature> に置き、.specify/ は scaffold / memory / templates / scripts の metadata です。backfill 済みパッケージが複数ある場合に単一の active feature をデフォルトで pin することはありません。パッケージに対して公式の scripts / skills を実行するには、先に SPECIFY_FEATURE_DIRECTORY を設定します。例: $env:SPECIFY_FEATURE_DIRECTORY="specs/003-ome" 。switching packages は再設定します。Phase 7D.1 は runtime を変更せず、MCP を変更せず、LLM を呼び出さず、.env を読み取らず、live market API を参照せず、investment advice を提供しません。Phase 6U semantic summary smoke は future の機能候補のままです。
Spec-kit ドキュメント:
現在のアーキテクチャ:
docs/architecture.mdAgent rules:
AGENTS.mdAgent handoff エントリポイント:
docs/agent-handoff.mdAI development framework:
docs/ai-development-framework.mdVerification matrix:
docs/verification-matrix.md
License
このリポジトリのライセンスは MIT License です。LICENSE を参照してください。
この著作権は Author のファーストパーティ作業のみを対象としています。これは 2 つの spec パッケージがサードパーティの NousResearch/hermes-agent リポジトリの byte-pinned snapshot をベンダーしており、このファイルには MIT License が適用されます。
詳細はこのサイトの Licenseは THIRD-PARTY-NOTICES.md を参照してください。
開発コマンド
python -m pytest
python -m compileall src scripts開発用依存関係をインストールする場合:
python -m pip install -e .[dev]Spec-034 task #82 v4 review — current
startup/plugin closed; credential_provider BLOCKED; overall BLOCKED。Spec034 は offline/static-only のままです。H2 は H1 SHA-256 90ba4a49fed1093ac3c5a05e9e78f3f0b10c17d4 でちょうど 20 の upstream path を持ち、21 番目の path は承認されていません。分離された子プロセスは、通常の no-link / reparse-free スナップショットを payloadcwd として受け取るだけで、fork は sentinel/Pytest/product import の前にこれを変更します。また、保持しているのは capability snapshot、次に project snapshot、次に stdlib のみです。そのため、C6 の 3 つの相対的な config 読み取りは、元のワークスペース config がスナップショット後に変更されても、スナップショット承認済みの bytes を使用します。公開の受領プロジェクションには verifier が注入されず、秘密発行は現在の canonical も事実を再計算します。AST 証明は 1 つの owner-local の package spec / module / loader / return / register / context フローに従います。バンドル rename の親 fsync は、明示的な platform best-effort fallback を伴いbundle_renamed ジャーナルの前に実行され、nonce に基づく both-missing recovery のみが retry-safe です。Runner、journal、trust のテストは最終化されていません。過去のどれも承認の証拠ではありません。新しいコードとアーキテクチャの再レビューは引き続き正の必要です。Main だけで両方の PASS 後に文書化された one-shot command を実行できますが、ここでは実行されていません。
Available Tools
25 toolsderive_workflow_bundleC
Side-effect tool:confirm=false 是 preview(零寫入、零網路)。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| confirm | No | ||
| podcast_id | No | ||
| episode_ref | No | ||
| api_cost_ack | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose that the tool has side effects and that confirm=false provides a safe preview, which is useful. However, it doesn't describe what side effects occur when confirm=true (what writes, what network calls), the impact on data, or any other behavioral traits like idempotency or error cases. The disclosure is partial and leaves critical unknown behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the 'side-effect tool' warning and the preview condition. There is no wasted wording, but it is under-specified for a tool with 5 parameters and many siblings. The conciseness is appropriate in length but not in content, so it earns a middle score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 5 parameters, no annotations, an output schema (unseen), and 25 siblings, this description is drastically incomplete. It doesn't explain the tool's core function, differentiate it from similar workflow tools, define parameters (except confirm), or discuss return values or failure modes. An agent would not be able to call it correctly or decide when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for the confirm parameter (confirm=false = preview), but ignores force, api_cost_ack, podcast_id, and episode_ref entirely. Even for confirm, it doesn't explain what confirm=true does beyond being not-preview. Other parameters remain unexplained, leaving agents to guess their purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description labels the tool as a 'side-effect tool' but never states what 'derive_workflow_bundle' actually does. It doesn't specify a clear verb+resource or explain what a workflow bundle is or how deriving it differs from running workflows (siblings like run_research_workflow). The purpose remains vague and relies on the tool name for meaning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only mentions that confirm=false is a preview mode with zero writes/network, which is a condition for using the tool, not guidance on when to use this tool versus alternatives. No context is given for selecting this over the many run_* or query_* siblings, nor any prerequisites for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_audioC
Side-effect tool:需要 confirm=true 才會下載 podcast audio。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| confirm | No | ||
| podcast_id | No | gooaye | |
| episode_ref | No | latest |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does clearly disclose that this is a side-effect operation and that confirm=true is required, which is valuable guardrail context. However, it omits other behavioral details such as what happens when confirm is false, what side effects occur (e.g., file writes, network fetches), or any irreversibility/permission considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loads the most important warning ('Side-effect tool'). Every word earns its place; there is no filler. However, the extreme brevity borders on under-specification, which prevents a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting download tool with four undocumented parameters and no annotations, the description is not complete. The output schema helps with return values, but the agent still lacks enough context about force, episode selection semantics, defaults, and the practical consequences of invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all four parameters. It only explains confirm (must be true to download) and leaves force, podcast_id, and episode_ref semantically unexplained, despite their non-obvious defaults like 'gooaye' and 'latest'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('download podcast audio') and the gating condition (confirm=true), making the core purpose clear. It does not explicitly name or differentiate from sibling read-only or workflow tools, but the side-effect framing helps separate it from the many analytical siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use cases by labeling the tool a side-effect tool and requiring confirmation, but it gives no explicit guidance on when to use this tool versus transcribe_episode, list_episodes, or the workflow tools. There is no 'when-not-to-use' or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_mentionsC
Side-effect tool:需要 confirm=true 才會寫入 deterministic mention artifacts。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| confirm | No | ||
| podcast_id | No | gooaye | |
| episode_ref | No | latest | |
| allow_partial | No | ||
| max_evidence_per_mention | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly declares the tool is a 'Side-effect tool' and clarifies that writes happen only when confirm=true. With no annotations present, this is valuable behavioral disclosure beyond the tool name. It does not detail overwrite behavior or artifact location, but the key side-effect warning and confirmation requirement are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the critical 'Side-effect tool' warning is front-loaded. It loses one point because it is so minimal that it sacrifices useful explanatory content, but structurally and stylistically it is very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no annotations and no schema descriptions, the description is far too incomplete. It does not explain the extraction workflow, how episodes are selected, what force or allow_partial control, or what the output artifacts represent. The output schema may cover return values, but the description still leaves major operational questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0% and the description provides no explanation of any parameter. Confirm, force, allow_partial, max_evidence_per_mention, podcast_id, and episode_ref are all left undocumented in prose. Even though some parameter names are self-explanatory, the description itself adds no semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool writes 'deterministic mention artifacts' and that it has side effects, coupling with the name 'extract_mentions.' However, it never explicitly says the tool extracts mentions from episodes, and 'deterministic mention artifacts' is vague jargon. It also does not differentiate itself from sibling tools like search_mentions or validate_transcript.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool instead of alternatives. The only usage-related information is 'needs confirm=true to write', which is a safety gate rather than a selection criterion. There is no mention of prerequisites, pipeline ordering, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_stock_lens_reportC
Side-effect tool:需要 confirm=true 才會寫入 deterministic stock lens report。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| confirm | No | ||
| podcast_id | No | gooaye | |
| stock_query | No | ||
| allow_partial | No | ||
| max_evidence_items | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does disclose the two most critical behavioral traits: the tool has side effects (it writes state) and it will not write unless confirm=true, which is genuinely valuable guardrail information. But it omits what happens when confirm=false, whether the write overwrites or destoys an existing report, and how force or allow_partial modify execution. Partial disclosure for a mutation tool that needed complete disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is one sentence with the critical side-effect warning front-loaded and zero filler, which is structurally efficient. But the brevity crosses into under-specification for a tool with six parameters, no annotations, and 25 siblings; it is short because it says too little, not because everything needed has been said.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema covers return values, but everything else an agent needs before safely invoking a guarded mutation is missing: the outcome of a non-confirmed call, the destructiveness of the write, the semantics of force and allow_partial, and how a stock lens report relates to the verified-research-report family. For a side-effect tool at 0% schema coverage with no annotations, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, yet it assigns meaning to only one of six parameters: confirm=true gates the write. The remaining parameters — force, podcast_id, stock_query, allow_partial, max_evidence_items — receive no semantic explanation beyond their names, and the interaction between force and confirm (does force bypass the gate?) is left entirely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — '寫入 deterministic stock lens report' (write a deterministic stock lens report) — and flags the tool as side-effecting, so an agent knows it persists state. However, it never explains what a stock lens report actually is or how it relates to the podcast domain, and the distinction from sibling workflow generators like run_latest_episode_verified_research_report_workflow or run_corpus_latest_episode_deterministic_workflow is left implicit. The description reads more like a safety banner than a purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative routing guidance is present. Among 25 siblings that include several workflow runners and report generators, nothing helps an agent decide between this tool and run_corpus_latest_episode_deterministic_workflow or run_latest_episode_verified_research_report_workflow. The confirm=true note is invocation syntax, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_episodeA
查詢單一 podcast episode metadata;支援 latest 與大小寫不敏感 EP ref。
| Name | Required | Description | Default |
|---|---|---|---|
| podcast_id | No | gooaye | |
| episode_ref | No | latest |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It usefully reveals two non-obvious behaviors: the 'latest' keyword and case-insensitive episode references. However, it does not mention failure behavior, data freshness, source details, or any side effects, though the read-only 'metadata' framing lessens the risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the core purpose and then packs the two most important behavioral details into a short clause. Every phrase adds value and there is no repetition of schema information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read-only getter with an output schema and defaults for both parameters, and the description covers the main calling conventions: single episode, latest support, and case-insensitive refs. It slightly under-specifies the exact episode ref format and error behavior, but an agent has enough to make a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for episode_ref by documenting 'latest' and case-insensitive matching, but it leaves podcast_id's meaning implicit beyond its name and default value, and it does not specify the expected format of a non-latest episode ref.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb '查詢' (query) plus a specific resource '單一 podcast episode metadata', clearly identifying this as a single-episode metadata lookup. This differentiates it from siblings like list_episodes, which handle collections of episodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: the description says 'single' episode and mentions the supported 'latest' and case-insensitive episode refs, so an agent can infer this tool is for one specific episode. However, it never explicitly names list_episodes as the alternative when multiple episodes are needed, and it gives no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_x_videoC
Side-effect tool:confirm=false 是 preview(零寫入,會讀公開 metadata)。
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| force | No | ||
| title | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose the most safety-critical trait: confirm=false is a zero-write preview mode that reads public metadata, while the tool itself is a side-effect operation. However, it stays silent on what confirm=true actually writes, what force does, and whether ingestion is idempotent or rate-limited — notable omissions for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single sentence that front-loads the risk class ('Side-effect tool') before the preview semantics, with zero wasted words. Each phrase earns its place, though the extreme brevity means there is minimal content to structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A side-effect tool with 4 parameters, no annotations, and 0% schema coverage needs substantially more than one sentence. The existence of an output schema reduces the need to explain return values, but the undocumented url/force/title semantics and the absence of any differentiation from ingest_youtube_video leave the definition materially incomplete for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's silence, but it only explains one of four parameters: confirm. The url, force, and title parameters receive no semantic explanation at all, leaving an agent to guess at URL format requirements and the meaning of force and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description labels the tool 'Side-effect tool' and explains the confirm flag's preview behavior, but never states what it actually does — ingesting an X/Twitter video — or what the ingestion accomplishes. The core purpose is only recoverable from the tool name, not from the description itself, which makes this closer to a tautology than a real purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the closely related sibling ingest_youtube_video or any of the other ingestion/search tools. The only conditional hint, that confirm=false corresponds to preview, is a safety instruction about a flag rather than a when-to-use selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_youtube_videoC
Side-effect tool:confirm=false 是 preview(零寫入,會讀公開 metadata)。
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| force | No | ||
| title | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and only discloses that confirm=false is a zero-write preview that reads public metadata. It does not disclose the real side effects of confirm=true, such as what gets written, downloaded, or persisted, nor any auth, idempotency, or rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded with the most important safety distinction, but it is under-specified rather than efficiently complete. It earns its place yet leaves critical content missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effect tool with no annotations, no schema descriptions, four parameters, and an output schema, the description is far from complete. It omits the core ingest behavior, side effects, parameter meanings, and sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all four parameters, but it only touches confirm. url, force, and title remain completely unexplained, and confirm=true's meaning is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as a side-effect tool and explains the preview mode, but it never explicitly states that the tool ingests a YouTube video; that action is only implied by the tool name. It distinguishes confirm=false behavior but does not differentiate the tool from siblings like ingest_x_video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a usage pattern: use confirm=false to preview with zero writes. However, it does not say when to use this tool instead of alternatives, nor what confirm=true actually triggers, leaving the when-to-use guidance incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_episodesB
列出指定 podcast 最近集數;不回傳完整 audio_url。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| podcast_id | No | gooaye |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It discloses one important behavior — it does not return the full audio_url — which is genuinely useful. However, it does not mention other behavioral traits such as sorting, pagination, read-only status, or what happens when the podcast has no episodes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. It front-loads the core purpose and then adds the key exclusion, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return-value documentation is covered. However, the description is minimal: it does not define 'recent', mention that both parameters are optional, or provide guidance for choosing among the many sibling tools. It is usable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only implicitly maps '指定 podcast' to podcast_id. It does not explain the limit parameter, its meaning, or the defaults. The schema's default values for limit and podcast_id are the only guidance for those parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: list recent episodes for a specified podcast. It also adds a distinguishing boundary ('不回傳完整 audio_url'), which helps separate it from download_audio. However, it does not explicitly name sibling alternatives like get_episode, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need recent episodes of a podcast and do not need full audio URLs. It does not explicitly state when to prefer get_episode, download_audio, or search_transcripts, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_verified_report_gap_backlogB
List inventory episodes missing a verified research report bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| podcast_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly indicates a read-only listing operation and the selection criterion, which is useful. However, it does not disclose pagination behavior, ordering, what happens when no gaps exist, or how 'verified research report bundle' is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. The core action and target resource are front-loaded, making it easy to scan and quickly understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and reduces the need to explain return shapes, the overall context is incomplete: parameter semantics are absent, no alternative routing is provided, and the description alone is too minimal to fully support correct tool selection and invocation among many related sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate, but it provides no parameter-level guidance. It never mentions that the list is scoped by podcast_id or that limit controls the number of results, leaving both parameters essentially undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'List', and a specific resource, 'inventory episodes missing a verified research report bundle.' This makes the tool's focus immediately distinct from siblings like list_episodes or query_verified_research_report_coverage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to identify gaps in verified research report coverage, but it does not explicitly state when to prefer this tool over siblings such as list_episodes or query_verified_research_report_coverage, nor does it mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_verified_research_report_catalogC
List, search, or inspect read-only verified research report bundles.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| action | No | list | |
| podcast_id | No | ||
| episode_ref | No | ||
| source_digest | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does state 'read-only,' which is a meaningful safety signal for an agent. However, it does not describe how action values behave, what query matching is used, whether pagination or limits apply, or what an 'inspect' operation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with verbs and resource, with no filler. It is efficient, but the verb 'inspect' is vaguely defined and the sentence sacrifices necessary parameter/action detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six optional parameters, zero parameter descriptions, no enums, and no annotation coverage, the description is too thin. Although an output schema exists and return values may be defined there, the absence of action semantics and filter meanings leaves an agent unable to reliably choose or correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention any of the six parameters: action, query, limit, podcast_id, episode_ref, or source_digest. An agent has no guidance on how to populate these fields or what the allowed action values are, especially since action has no enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies specific actions (list, search, inspect) and a specific resource (read-only verified research report bundles). It clearly conveys this is a query-oriented catalog tool and the read-only qualifier helps separate it from generation/revalidation siblings, though it does not name sibling tools explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, and no exclusions or conditions are stated. Sibling tools like query_verified_research_report_coverage and list_verified_report_gap_backlog are similar in spirit, but the description does not differentiate them or explain what problem this tool uniquely solves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_verified_research_report_coverageC
List episode-centric coverage of local verified research report bundles.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| has_bundle | No | ||
| podcast_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It only says 'List', which implies a read-only operation, but it does not explain what 'coverage' means, whether results are filtered by has_bundle, how limiting works, or any other behavioral nuance. The description adds little beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, which is structurally economical. However, it is under-specified: the brevity comes at the cost of clarity about what the tool actually does. It is concise but not optimally informative for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and return values need not be described, the description still fails to explain the core concept of 'coverage', the role of the required podcast_id, or the meaning of has_bundle. With three parameters and no annotations, this is insufficient context for an agent to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It does not mention podcast_id, limit, or has_bundle at all. The schema property names and types provide some self-evident meaning, but the description itself adds no parameter-level guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and names a distinct resource ('episode-centric coverage of local verified research report bundles'), which clearly distinguishes it from the catalog-style sibling query_verified_research_report_catalog. However, the term 'coverage' is somewhat vague and the meaning of 'local verified research report bundles' is not fully unpacked, so it is not perfectly clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives. It does not mention filters, prerequisites, or related tools like query_verified_research_report_catalog or list_episodes. The usage context is only implied by the name and input schema, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rebuild_cacheA
Maintenance tool:重建 SQLite cache;只索引既有 artifacts,不下載、不轉錄、不摘要。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| podcast_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It clearly states the maintenance nature and the non-destructive boundaries (no download/transcribe/summarize). However, it does not disclose whether 'rebuild' deletes or overwrites the existing cache, or mention any side effects, permissions, or rate considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with the most important context ('Maintenance tool'). Every clause adds value: target resource, scope, and explicit exclusions. There is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the tool is simple and has an output schema, the description omits any guidance on parameter semantics and when to trigger a rebuild. Given the absence of annotations and 0% schema coverage, this leaves important invocation details unresolved for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation for the two parameters 'force' and 'podcast_id'. An agent is left to infer their meaning purely from names and defaults, which is insufficient for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: rebuilding the SQLite cache. It further distinguishes itself by explicitly listing what it does not do ('不下载、不转录、不摘要'), which differentiates it from sibling tools like download_audio, transcribe_episode, and summarize_episode_extractive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description labels this as a 'Maintenance tool' and clarifies it only indexes existing artifacts, giving clear context for when to use it. The explicit exclusions ('不下载、不轉錄、不摘要') help an agent avoid selecting it for content-fetching or processing tasks, though it does not name alternative tools or describe conditions like 'use when cache is stale'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revalidate_verified_research_report_sourcesC
Revalidate one exact verified-report bundle's local source metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| podcast_id | Yes | ||
| episode_ref | Yes | ||
| source_digest | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it does not explain what 'revalidate' actually does, whether it mutates local metadata, what side effects occur, or what happens if validation fails. The word 'local' adds some scope, but the behavioral implications remain unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler words. It front-loads the verb and resource, and every word contributes to the core meaning. It is appropriately concise, though it sacrifices useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three required parameters, no annotations, and a non-obvious operation like 'revalidate', this description is incomplete. It does not explain prerequisites, expected behavior, failure semantics, or how the parameters relate. The presence of an output schema reduces the need to describe return values, but the core invocation context is still missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not define podcast_id, episode_ref, or source_digest. The phrase 'one exact verified-report bundle' implies these parameters together identify a specific bundle, but no format, constraints, or relationships are explained. The parameter names are somewhat self-explanatory but not sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Revalidate') and a specific resource ('one exact verified-report bundle's local source metadata'), which is reasonably clear. It does not explicitly name or contrast sibling tools, but the scope of 'one exact bundle' partially differentiates it from the broader workflow and catalog tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as query_verified_research_report_catalog or the verified report workflow tools. The phrase 'one exact' hints at targeting a single bundle, but there is no explicit when-to-use or when-not-to-use instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_corpus_episode_completion_workflowC
Preview or advance one episode by one explicitly confirmed action.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | next | |
| confirm | No | ||
| podcast_id | Yes | ||
| episode_ref | No | latest | |
| api_cost_ack | No | ||
| semantic_model | No | ||
| semantic_base_url | No | ||
| semantic_provider | No | openai-compatible | |
| transcription_model | No | ||
| semantic_api_key_env | No | OPENAI_API_KEY | |
| transcription_device | No | cpu | |
| semantic_chunk_seconds | No | ||
| transcription_vad_filter | No | ||
| transcription_compute_type | No | int8 | |
| semantic_max_segments_per_chunk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It implies both a read-like mode ('preview') and a mutating mode ('advance') but never explains side effects, what state changes occur, cost implications (despite the api_cost_ack parameter), or how confirmation gates execution. The confirmation mechanic is hinted at but never disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but this is under-specification rather than conciseness. The awkward phrase 'by one explicitly confirmed action' obscures rather than clarifies, and the single sentence does not earn its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a workflow tool with 15 parameters, zero schema descriptions, no annotations, and numerous workflow siblings, a single opaque sentence is wholly inadequate. Even with an output schema present, the agent cannot determine what the workflow does, what parameters mean, or what side effects to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it adds nothing about the 15 parameters. Only the word 'confirmed' loosely maps to the confirm parameter; semantic_model, transcription_*, api_cost_ack, episode_ref, and semantic_chunk_seconds are all left completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names verbs ('preview', 'advance') and a resource ('one episode'), so it avoids pure tautology. However, 'by one explicitly confirmed action' is vague, and nothing distinguishes this from the many workflow siblings (run_research_workflow, run_episode_verified_research_report_workflow, etc.). What 'completion' means and what advancing entails remain unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the sibling workflow tools, nor when to choose 'preview' over 'advance'. The phrase 'explicitly confirmed action' hints that confirmation is required, but the description never states the condition or workflow position for using this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_corpus_latest_episode_deterministic_workflowC
Preview or process one current latest episode through local deterministic stages.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| podcast_id | Yes | ||
| transcription_model | No | ||
| transcription_device | No | cpu | |
| transcription_vad_filter | No | ||
| transcription_compute_type | No | int8 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. 'Preview or process' implies two modes and 'local deterministic stages' hints at reproducibility, but it does not say what the stages are, whether processing writes data, whether preview has side effects, or what confirm controls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and readable, with no wasted words. However, it is under-specified to the point that phrases like 'local deterministic stages' and 'Preview or process' carry jargon and ambiguity rather than concrete operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a workflow tool with six parameters, no annotations, and a large set of sibling workflow tools, this one-line description is far from complete. It does not explain the confirm flag, the transcription settings, the workflow outcome, side effects, or how this tool relates to the other run_*_workflow siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for documenting six parameters. It does not clarify that podcast_id identifies the corpus, that confirm switches between preview and full processing, or what the transcription_model/device/vad/compute_type options do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Preview or process') on a specific resource ('one current latest episode') and mentions a method ('local deterministic stages'). However, it does not differentiate this workflow from sibling workflow tools like run_corpus_episode_completion_workflow or run_latest_episode_erified_research_reort_workflow, so it falls short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over its many sibling workflow tools. The description does not explain when preview mode is appropriate versus full processing, nor does it mention any prerequisites or conditions that should trigger this workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_episode_verified_research_report_workflowC
Preview or publish one explicit-episode verified research report (assemble only).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| podcast_id | Yes | ||
| episode_ref | Yes | ||
| stock_query | No | ||
| include_fixture_verification | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and only reveals that the tool has two modes (preview/publish) and is limited to assembly. It does not disclose the side effects of publishing, whether confirmation gates the action, auth requirements, or what 'assemble only' actually does or leaves undone. This is potentially a mutating workflow, so the gap is significant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with no filler; every phrase carries information (modes, episode scoping, artifact type, assembly constraint). It is efficiently structured and front-loaded, though slightly under-sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, so that is not the issue, but the tool is a complex 5-parameter workflow with publish side effects, zero annotation coverage, and many close siblings. A single sentence cannot convey sibling routing, parameter meaning, or publish behavior, leaving the definition materially incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only indirectly hints at two parameters: 'explicit-episode' maps to episode_ref, and 'Preview or publish' maps to the confirm flag. stock_query and include_fixture_verification are left completely unexplained, and podcast_id semantics are assumed rather than stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names specific actions ('Preview or publish'), a specific resource ('one explicit-episode verified research report'), and a scope constraint ('assemble only'). The 'explicit-episode' phrasing differentiates it from the sibling run_latest_episode_verified_research_report_workflow, so an agent can discriminate at a glance. Minor deduction because 'assemble only' is cryptic and the artifact type 'verified research report' is never defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied by the phrase 'explicit-episode', which weakly contrasts with the latest-episode sibling, and by 'assemble only', which hints this is a partial workflow. There is no explicit statement of when to choose this over run_research_workflow or the corpus/latest-episode variants, and no guidance on when to preview versus publish.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_latest_episode_verified_research_report_workflowC
Preview or complete one approved latest verified research report workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| podcast_id | Yes | ||
| stock_query | No | ||
| api_cost_ack | No | ||
| semantic_model | No | ||
| semantic_provider | No | openai-compatible | |
| transcription_model | No | ||
| expected_episode_ref | No | ||
| transcription_device | No | cpu | |
| semantic_chunk_seconds | No | ||
| transcription_vad_filter | No | ||
| transcription_compute_type | No | int8 | |
| include_fixture_verification | No | ||
| semantic_max_segments_per_chunk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but 'Preview or complete' only hints at a two-phase execution model. It does not disclose side effects, whether confirm=true triggers an expensive or write-heavy run, or whether records are written to the verified report catalog.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is compact with no filler, earning efficiency credit. But it is more of a label than an informative definition; 'approved latest' is awkward and consumes words without adding precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter workflow with no annotations, this definition is severely under-specified. The agent cannot know when confirmation is required, what the cost-acknowledgment parameter means, or how model/device parameters should be set; the output schema covers return shape, not operational prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 14 parameters and the description adds no parameter information. The 'preview or complete' wording loosely maps to the confirm boolean, but parameters like api_cost_ack and include_fixture_verification are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States two concrete actions ('Preview or complete') and names the resource type ('approved latest verified research report workflow'), which separates it from the sibling run_episode_verified_research_report_workflow by focusing on the latest episode. However, 'approved latest' is slightly ambiguous about whether the episode or the workflow is approved, and what qualifies as 'latest.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose this tool over closely related siblings such as run_episode_verified_research_report_workflow or the corpus latest-episode workflow. The phrase 'latest' implies a use case but does not state selection conditions or mention the confirm-based preview/execute flow as a usage decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_research_workflowC
Side-effect workflow tool:dry-run first,confirmed LLM steps require exact ack。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| confirm | No | ||
| podcast_id | No | gooaye | |
| episode_ref | No | latest | |
| stock_query | No | ||
| api_cost_ack | No | ||
| allow_partial | No | ||
| semantic_model | No | ||
| synthesis_model | No | ||
| semantic_base_url | No | ||
| semantic_provider | No | openai-compatible | |
| synthesis_base_url | No | ||
| synthesis_provider | No | openai-compatible | |
| semantic_api_key_env | No | OPENAI_API_KEY | |
| report_window_seconds | No | ||
| synthesis_api_key_env | No | OPENAI_API_KEY | |
| semantic_chunk_seconds | No | ||
| max_candidates_per_node | No | ||
| include_semantic_summary | No | ||
| max_evidence_per_mention | No | ||
| max_evidence_per_section | No | ||
| max_stock_evidence_items | No | ||
| max_evidence_per_candidate | No | ||
| synthesis_max_prompt_chars | No | ||
| include_stock_lens_synthesis | No | ||
| semantic_max_segments_per_chunk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It does disclose that the tool has side effects and that a dry-run-then-confirm protocol is required, which is valuable. However, it does not describe what side effects occur, what an 'exact ack' means in concrete terms, whether costs are incurred, or what state gets changed, leaving significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but that brevity is not appropriate for a complex 26-parameter tool with a workflow, confirmation protocol, and many model/provider options. While the sentence contains useful safety information, it lacks any structural organization and is under-specified rather than economically concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity, zero schema description coverage, no annotations, and a large sibling set, this description is far from complete. It provides almost no information about what the workflow does, what its key parameters control, what side effects to expect, or how it differs from similar workflow tools. An agent cannot reliably select or invoke this tool based on this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 26 parameters, and the description adds essentially no meaning to the parameters. Terms like 'dry-run' and 'ack' vaguely relate to confirm and api_cost_ack, but no parameter is explained, mapped, or contextualized. The description fails to compensate for the complete absence of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description only labels the tool as a 'Side-effect workflow tool' and mentions a dry-run/confirmation procedure; it never states what the research workflow actually does, what inputs it consumes, or what output it produces. It is essentially a generic category label, restating the name without distinguishing it from the many run_* workflow siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does provide some procedural guidance: run a dry-run first, and confirmed LLM steps require an exact ack. This implicitly tells an agent how to approach invocation safely, but it does not say when to choose this tool over alternatives like run_latest_episode_verified_research_report_workflow or run_corpus_episode_completion_workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_mentionsC
搜尋 SQLite cache 中的 deterministic mentions 與 timestamp evidence。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| podcast_id | No | gooaye | |
| mention_type | No | ||
| case_sensitive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds some value by stating the data source (SQLite cache) and result focus (deterministic mentions and timestamp evidence). However, it does not explicitly state read-only behavior, cache staleness, or any operational side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core behavior. Every word contributes to identifying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter search tool with zero parameter documentation and no annotations, this terse description is insufficient. The agent is left guessing about parameter formats, defaults, and filter behavior. The presence of an output schema mitigates return-shape concerns but not the missing operational and parameter guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description names no parameters. It does not explain what query syntax is expected, how mention_type should be expressed, what podcast_id default 'gooaye' means, or how limit and case_sensitive affect results. The description fails to compensate for the schema's lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (搜尋/search) and names a concrete resource: 'SQLite cache 中的 deterministic mentions 與 timestamp evidence'. This makes the tool's object and scope reasonably clear. It does not explicitly differentiate from sibling search_transcripts, but the mention-vs-transcript distinction is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like search_transcripts, extract_mentions, or rebuild_cache. No exclusions or conditions are provided, so an agent cannot easily decide whether this is the right search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transcriptsA
搜尋 SQLite cache 中的 transcript segments;不會自動 rebuild cache。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| podcast_id | No | gooaye | |
| search_mode | No | auto | |
| case_sensitive | No | ||
| context_segments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses one genuinely useful behavioral trait beyond the name: the tool reads from the SQLite cache and will not rebuild it, implying results may be stale or empty on a cache miss. However, with no annotations provided, the description carries the full burden and does not state read-only guarantees, cache-miss behavior, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A two-clause description with the primary action front-loaded and zero filler. The behavioral warning about not rebuilding the cache is appended efficiently in the second clause; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no annotations, and 0% description coverage, this is too thin. While an output schema covers return values, the interplay of search_mode, case_sensitive, context_segments, and podcast_id is unexplained, leaving an agent guessing at valid invocations. The core purpose is clear, but the surrounding context a caller needs is largely absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description contributes no parameter-level meaning. Ambiguous values such as search_mode='auto' and context_segments are left undefined, and with no enum constraints in the schema the agent has no way to know valid modes or semantics. The description must compensate for the low coverage but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — searching transcript segments within the SQLite cache — and adds the explicit caveat that it will not rebuild the cache, which differentiates it from the rebuild_cache sibling. An agent understands exactly what object this operates on and can distinguish it from related search tools like search_mentions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'won't auto-rebuild cache' clause implies a usage context (use this when searching existing cached data, not when fresh data is needed), but no alternative tools are named directly and no explicit when-to-use/when-not-to-use guidance is given. Routing to rebuild_cache or search_mentions is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_summarize_episodeC
API-cost side-effect tool:需要 confirm=true 與 exact api_cost_ack 才會呼叫外部 LLM。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| model | No | ||
| confirm | No | ||
| base_url | No | ||
| provider | No | openai-compatible | |
| podcast_id | No | gooaye | |
| api_key_env | No | OPENAI_API_KEY | |
| episode_ref | No | latest | |
| api_cost_ack | No | ||
| allow_partial | No | ||
| chunk_seconds | No | ||
| max_segments_per_chunk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It clearly reveals that this tool has side effects (API cost, external LLM call) and sets an explicit precondition (confirm=true and exact api_cost_ack) before the external call occurs. This is useful transparency, though it does not cover all behavioral consequences such as caching, write effects, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and it highlights the most critical operational caveat (cost and confirm/ack gating) early. It is appropriately concise, though slightly cryptic due to mixed-language jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 12-parameter tool with no annotations and only an output schema, the description is too thin to be complete. It explains the cost gate but does not clarify what input the tool expects beyond the ack, how to choose episode_ref, what configuration parameters like model/base_url/api_key_env do, or what the semantic summary result looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for confirm and api_cost_ack by identifying them as required gates for the external LLM call, but the other 10 parameters (force, model, base_url, podcast_id, api_key_env, episode_ref, allow_partial, chunk_seconds, max_segments_per_chunk) receive no semantic explanation beyond their raw schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as an 'API-cost side-effect tool' that calls an external LLM when confirm=true and api_cost_ack match, but it never explicitly states that the tool summarizes an episode. The intended action is mostly inferable from the tool name and sibling context, making the purpose vague rather than fully specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like summarize_episode_extractive or other workflow tools. It only implies caution due to cost, but does not state conditions for selection, exclusions, or recommended alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_historical_verified_report_next_stepC
Suggest one next human-gated step for a named historical episode.
| Name | Required | Description | Default |
|---|---|---|---|
| podcast_id | Yes | ||
| episode_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The phrase 'human-gated' and the verb 'suggest' imply the tool proposes an action rather than executing it, which is useful behavioral context in the absence of annotations. However, it does not disclose side effects, prerequisites, or how the suggestion is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Slightly more detail would be appropriate given the lack of annotations, but the structure itself is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no annotations, minimal parameter documentation, and many related workflow siblings. The description leaves the agent without enough context to know when to invoke this tool or how it differs from nearby tools, despite the output schema covering return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only hints at 'episode_ref' via 'named historical episode'. It does not clarify the role or expected format of podcast_id or episode_ref beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Suggest one next human-gated step') and a clear target ('a named historical episode'). It is clear about what the tool does, though it does not explicitly differentiate it from related workflow and backlog sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as list_verified_report_gap_backlog or run_episode_verified_research_report_workflow. The description implies use for historical episodes but does not explain the intended context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_episode_extractiveA
Side-effect tool:需要 confirm=true 才會寫入 deterministic extractive summary。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| confirm | No | ||
| max_quotes | No | ||
| podcast_id | No | gooaye | |
| episode_ref | No | latest | |
| allow_partial | No | ||
| window_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It clearly warns that this is a side-effect tool and that writes only occur with confirm=true, which is essential transparency. Still, it does not mention consequences of force, allow_partial, or default behavior around latest episode references, leaving gaps for a mutation-capable tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the most important behavioral warning ('Side-effect tool') front-loaded. There is no filler or redundant restatement of the tool name, and every word adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too thin for a seven-parameter side-effect tool with no annotations and no schema descriptions. It omits what the other parameters do, when the tool should be run, and how it relates to semantic_summarize_episode, so an agent would still need substantial inference to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the seven undocumented parameters. It explains only confirm=true's gating role, while force, max_quotes, podcast_id, episode_ref, allow_partial, and window_seconds receive no semantic explanation in either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that this tool writes a deterministic extractive summary when confirm=true, giving a clear verb ('write'), resource ('summary'), and side-effect condition. The word 'extractive' and 'deterministic' also differentiate it from the sibling semantic_summarize_episode, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent that confirm=true is required before any write happens, which is useful operational guidance for a side-effect tool. However, it does not state when to choose this tool over semantic_summarize_episode or other summarization/workflow siblings, so the usage context is only partially conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_episodeA
Long-running side-effect tool:需要 confirm=true 才會下載/取得音檔並轉錄。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| model | No | tiny | |
| device | No | cpu | |
| confirm | No | ||
| podcast_id | No | gooaye | |
| vad_filter | No | ||
| episode_ref | No | latest | |
| compute_type | No | int8 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden and does well by flagging long-running execution, side effects, and the confirm=true gate before any work happens. It could add more detail about what the side effects affect, but the core safety-relevant behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with the most important facts—long-running, side-effect, and the confirmation requirement—placed right at the start. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, side-effectful, long-running tool with no annotations, this description is too thin. It explains the confirmation gate and the core operation but omits guidance on the many optional parameters and does not clarify what makes this transcribe tool distinct from nearby sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but only confirm is explained. Parameters like force, vad_filter, model, device, compute_type, and episode_ref have defaults but no intended meaning or interaction, leaving an agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('transcribe') and resource ('episode'), and adds that it downloads/obtains audio before transcribing. It does not explicitly contrast itself with sibling tools like download_audio or the summarization tools, so it misses the top score for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: the tool is long-running and side-effectful, and must be invoked with confirm=true. However, it does not state when not to use it or name an alternative, so it stops short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_transcriptC
檢查既有 transcript artifacts 是否完整、有效或疑似 partial。
| Name | Required | Description | Default |
|---|---|---|---|
| podcast_id | No | gooaye | |
| episode_ref | No | latest |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states what is checked and does not disclose whether the tool is read-only, whether it has side effects, permissions, or rate limits. '檢查' weakly implies non-destructive behavior, but this is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded, efficient sentence with no filler. It is concise, though slightly under-specified, so it earns a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no parameter explanations, and no usage guidance, the description is insufficient for an agent to safely pick this tool among many related siblings. The presence of an output schema covers return values, but not selection, parameter, or behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining podcast_id and episode_ref, but it does not mention either parameter. The only clues come from the schema's self-describing names and defaults (gooaye, latest), not from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('檢查'/'check') and resource ('既有 transcript artifacts') and states the three evaluation outcomes: complete, valid, or suspected partial. This distinguishes it from transcription/search siblings, though it does not name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives such as transcribe_episode, search_transcripts, or get_episode. The word '既有' (existing) implies a precondition that artifacts already exist, but no when-to-use or when-not-to-use context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
v0.2.0- First observed
derive_workflow_bundle - First observed
download_audio - First observed
extract_mentions - First observed
generate_stock_lens_report - First observed
get_episode - First observed
ingest_x_video - First observed
ingest_youtube_video - First observed
list_episodes - First observed
list_verified_report_gap_backlog - First observed
query_verified_research_report_catalog - First observed
query_verified_research_report_coverage - First observed
rebuild_cache - First observed
revalidate_verified_research_report_sources - First observed
run_corpus_episode_completion_workflow - First observed
run_corpus_latest_episode_deterministic_workflow - First observed
run_episode_verified_research_report_workflow - First observed
run_latest_episode_verified_research_report_workflow - First observed
run_research_workflow - First observed
search_mentions - First observed
search_transcripts - First observed
semantic_summarize_episode - First observed
suggest_historical_verified_report_next_step - First observed
summarize_episode_extractive - First observed
transcribe_episode - First observed
validate_transcript
TDQS
Scored across 25 tools
The base episode/transcript/search tools are distinct, but the workflow surface is crowded: run_research_workflow and the four run_*_workflow variants, plus two query_verified_research_report_* tools, have highly similar names and only subtle distinctions. An agent would likely struggle to select the correct workflow tool without very careful reading.
Tool names overwhelmingly follow a snake_case verb_noun pattern and form a recognizable family. Minor inconsistencies like summarize_episode_extractive vs semantic_summarize_episode, and some very long workflow names with awkward modifier placement, keep it from being perfectly consistent.
25 tools sits at the high end of the heavy-but-acceptable range. The core ingestion operations are well represented, but the many workflow/report variants make the count feel bloated for a server named 'Podcast Ingestion Core'.
The tool set covers the core ingestion lifecycle well: list/get, download, transcribe, summarize, extract mentions, search, validate, cache rebuild, and extended X/YouTube ingestion and report workflows. Notable minor gaps are the lack of a direct transcript retrieval tool and no delete/update artifact operations, but agents can work around these.
Maintenance
Related MCP Connectors
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
Podcast Index MCP — wraps the Podcast Index API (podcastindex.org)
MCP server for structured access to Lenny Rachitsky podcast transcripts. For content creators.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that integrates with the Podhome API to manage multiple podcast shows. It enables users to create and schedule episodes, generate clips, and manage webhooks through natural language commands.10MIT
- AlicenseAqualityAmaintenanceMCP server for the Podcast Index API — search podcasts, track appearances, monitor trending shows, check feed health1836 npm1MIT
- AlicenseAqualityFmaintenanceMCP server for the Transistor.fm API: manage podcast episodes, analytics, transcripts, and webhooks from your AI agent.2336 npm1MIT
- AlicenseNot gradedqualityBmaintenanceExposes SmartCLI's built-in agent tools (file operations, code search, shell commands, web search, memory, and snapshots) as MCP endpoints, allowing external clients to leverage them over stdio or HTTP.1MIT