Create Twitter content from analyst research PDFs, validated against KSVC holdings.
CODEBLOCK0
Never skip steps 4a-4d. Use 1a for multi-PDF screening, 1b for deep extraction, 1c for cross-doc synthesis, 4a for verification, 4a.5 for web cross-validation, 4b for final holdings check, 4c for character voice, 4d for AI pattern removal.
⚠️ CRITICAL: Step 1b extracts data. Step 1c synthesizes across docs. Step 4a VERIFIES the written content. Step 4a.5 CROSS-VALIDATES inferences.
Subagents CANNOT Read files outside the project directory. PDFs in /Users/Shared/ksvc/pdfs/ are blocked. The fix: symlink PDFs into the project directory before spawning subagents.
The main agent MUST create a symlink before Step 1a:
CODEBLOCK1
Then subagents Read from .claude/pdfs-scan/filename.pdf — this works because the path resolves inside the project.
| Access Method | INLINECODE2 path | Symlinked project path |
|---|---|---|
| Subagent Read tool (PDF) | ❌ Auto-denied | ✅ Works |
| Subagent Read tool (images) |
Discovered 2026-02-07: Subagents fail with "Permission to use Read has been auto-denied (prompts unavailable)" on /Users/Shared/ paths. Symlink into project dir = full Read access. Tested: 19 PDFs, medium thoroughness, 125k tokens, zero errors.
Full guide: references/kirk-voice.md — Read this for templates and examples.
Kirk voice = Serenity's data + Citrini7's wit + Jukan's skepticism + Zephyr's energy.
| Type | When | Blend | Key Element |
|---|---|---|---|
| Long Thread | Deep dive, multi-source | Serenity + Jukan | TLDR + skepticism |
| Quick Take |
Long Thread: Hook → TLDR → Numbers → Skepticism → Position
Quick Take: Headline number → Context → "If you're looking now..."
Breaking News: "Huge." / "Well well well..." → Key number → Source
Victory Lap: "$TICKER up X% since KSVC added it" → Entry/Now → Thesis validated
Use Explore agents for broad screening when you have many PDFs to review. This is faster than RLM for initial discovery.
⚠️ Before scanning any PDFs, check what Kirk has already posted.
CODEBLOCK2
For each published thread, note:
Then when selecting a topic after scanning, REJECT any topic that:
Acceptable overlap:
Why this exists (Case Study — ABF Substrate, 2026-02-07):
Kirk published a 10-tweet thread on Feb 5 covering Goldman's ABF shortage report (10%→21%→42%, Kinsus/NYPCB/Unimicron). On Feb 7, the pipeline picked the same Goldman report and produced a 3-tweet quick take with the same numbers, same companies, same angle. We didn't check published threads first, so we wasted a pipeline run on duplicate content when 10 other fresh topic angles were available.
| PDFs | Agents | PDFs/Agent | Expected Time |
|---|---|---|---|
| ≤5 | 1 | all | ~25s |
| 6-10 |
Why ~5 PDFs per agent? Sweet spot for speed. Each PDF takes ~4-8s to Read + summarize. 5 PDFs ≈ 25s per agent. Adding more PDFs per agent saves nothing (same total tokens) but makes wall-clock time worse.
Cost: Haiku is cheap. 4 agents × 5 PDFs × ~4k tokens = ~80k input tokens total — same as 1 agent doing all 20. Parallelism is free.
Cross-doc synthesis trade-off: Each agent only sees its batch, so cross-batch themes are the main agent's job. This is fine — the main agent merges all results anyway.
Step 1: Main agent creates symlink and lists PDFs:
CODEBLOCK4
Step 2: Split filenames into groups and spawn agents in parallel (single message, multiple Task calls):
CODEBLOCK5
Step 3: Main agent synthesizes results from all agents:
After all agents return, the main agent:
⚠️ WARNING: Explore agents can hallucinate specific numbers. Treat all numbers from Explore summaries as "unverified claims" until RLM grep confirms them. Component counts, percentages, and market sizing are especially prone to errors.
Capacity (tested 2026-02-07): Single Explore agent (haiku) handled 19 PDFs at medium thoroughness in 83 seconds, using 125k tokens (~4k tokens/PDF for pages 1-5). 3 agents in parallel = ~30-40s for the same batch.
Use RLM for deep extraction from specific PDFs you've identified in Step 1a.
MANDATORY for any number you'll publish. Explore agents summarize; RLM verifies.
Charts often contain key data (P/B trends, margin history, capacity timelines) that text extraction misses.
⚠️ After EVERY rlm_repl.py init, validate the extraction actually worked.
RLM reports chars_extracted after init. A multi-page analyst report should yield thousands of chars. If you get suspiciously few, the PDF is likely image-based and RLM only extracted metadata/headers.
Validation rule:
| Chars Extracted | Expected Report Type | Action |
|---|---|---|
| > 5,000 | Multi-page report | ✅ Proceed with grep |
| 1,000 - 5,000 |
list_images() — if many images, trigger fallback |The threshold is context-dependent. A 20-page Goldman Sachs report yielding 666 chars is obviously broken. A 1-page pricing table yielding 800 chars might be fine. Use judgment, but when in doubt, fallback.
Mandatory Fallback when RLM extraction is low:
CODEBLOCK9
⚠️ Path rule: Subagents must Read PDFs via the symlinked project path (.claude/pdfs-scan/), NOT from /Users/Shared/. See "Subagent Permissions" section above.
Why this exists (Case Study — ABF Substrate Shortage, 2026-02-07):
Goldman Sachs published two reports: a main ABF upcycle report (71K chars, extracted fine) and a Kinsus upgrade report (15 pages, but only 666 chars extracted). We skipped the Kinsus PDF because "the main report had everything we needed." It didn't. The Kinsus report had unique data (company-specific capacity plans, margin guidance, order book details) that would have strengthened the thread. Skipping it was lazy — the Read tool fallback takes 30 seconds and would have recovered the data.
Rules:
--extract-images often saves chart/table images even when text extraction fails. View them with Read tool."extraction_method": "read_fallback" so audit knows the data source.When extracting, capture all data types for potential chart generation later:
| Source Type | What to Extract | Cache Format |
|---|---|---|
| Text numbers | Exact quotes with page refs | INLINECODE13 |
| Tables |
{"columns": [...], "rows": [...], "source": "p.20"} |{"data": {...}, "source_image": "pdf-3-1.png", "page": 3} |
Why cache visual data? Step 6 (chart generation) needs this. If you only cache text, you'll lose table structures and chart data points that make great visualizations.
Use cross-doc to verify:
⚠️ Why this step exists: RLM creates state.pkl during extraction, but the writing phase (Step 3) doesn't access it. Without a persistent cache, writers rely on memory, leading to errors like wrong product types, missing time periods, or source attribution mistakes.
What this does: Extracts from state.pkl (RLM's internal format) into structured JSON with context labels that the writing phase can reference.
After Step 1b (RLM extraction) and before Step 3 (writing).
| Workflow | When to Cache |
|---|---|
| Single PDF (rlm-repl) | After rlm_repl.py init completes |
| Multiple PDFs (rlm-repl-multi) |
init commands complete |
New in v2: Auto-generates source tags and attribution map from PDF filenames!
Single PDF (rlm-repl):
CODEBLOCK11
Multiple PDFs (rlm-repl-multi):
CODEBLOCK12
With Cross-Doc Synthesis (Optional):
CODEBLOCK13
Synthesis format (optional, for complex multi-source threads):
CODEBLOCK14
What auto-generates:
The cache includes context labels and attribution map to prevent common errors:
CODEBLOCK15
Key fields that prevent errors:
product_type: Prevents "GB300 rack" when source says "HGX B300 server"Attribution map benefits:
topics: Topic-level mapping showing which source is primary authorityMANDATORY: Reference the cache when writing.
Step 3a: Load cache and attribution map:
CODEBLOCK16
Step 3b: Write using cache labels and attribution:
CODEBLOCK17
Source: rlm-extraction-cache.json, entry mem_001, mem_002, INLINECODE33
Context labels from cache:
Attribution map usage:
topics["Memory Pricing"]["tag"] → "GFHK"key_metrics listdual_squeeze_thesis for memory + ABF connectionBefore saving draft (Step 5), verify:
source_id and attribution map INLINECODE38cross_doc_synthesis if applicableRed flags - stop if you notice:
product_type field)If automatic extraction fails, manually create cache entries:
CODEBLOCK18
See: ~/.claude/skills/kirk-content-pipeline/scripts/README-extraction-cache.md for full documentation.
Why this step exists: Steps 1a and 1b produce per-document facts. Without explicit synthesis, the pipeline gravitates toward single-source claims ("KHGEARS P/E is 20x") rather than cross-doc insights ("Taiwan brokers are more bullish than Western analysts on humanoid robotics").
| Scenario | Use 1c? |
|---|---|
| Multiple PDFs on same topic | Yes |
| Comparing broker views |
| Output Type | Example | Audit Requirement |
|---|---|---|
| Consensus claim | "3 of 4 brokers see DRAM ASP rising in 2H26" | Cross-doc (rlm-multi) |
| Comparative insight |
CODEBLOCK19
| Category | Questions |
|---|---|
| Consensus | Do sources agree on [market size / timeline / key risk]? |
| Comparison |
After running 1c, document synthesized insights for Step 3 (writing):
CODEBLOCK20
⚠️ CRITICAL: Synthesized claims from Step 1c MUST be flagged for cross-doc audit in Step 4a.
In the audit manifest, mark these claims with cross-doc: true:
CODEBLOCK21
Cross-doc claims use rlm-repl-multi for verification, not parallel single-doc agents.
| Question | Extract |
|---|---|
| What | One-sentence summary |
| Why |
⚠️ CRITICAL: This is a preliminary check. You MUST run Step 4c (Final Holdings Verification) after writing content to catch any tickers discovered during extraction.
Before querying the API, identify ALL possible identifiers for the company:
CODEBLOCK22
Rules:
NEVER assume a stock isn't held without checking ALL 7 models.
RECOMMENDED: Use tradebook for accurate entry prices and current status
CODEBLOCK23
⚠️ CRITICAL: API's todayPrice and profitPercent can be STALE (hours or days old). Always verify current price with Yahoo Finance API (Step 2d).
FALLBACK: Check equitySeries (slower, less data)
CODEBLOCK24
Why still use equitySeries?
.data[] array)Example: Finding entry date from equitySeries
CODEBLOCK25
Use all three data sources for robustness:
| Data Source | When to Use | What It Shows | Limitation |
|---|---|---|---|
| tradebook | Primary | Entry date, entry price, exit status | INLINECODE49 may be stale |
| equitySeries |
Recommended workflow:
CODEBLOCK26
Cross-verification example:
CODEBLOCK27
Fallback: Check filledOrders (if tradebook empty)
If equitySeries is empty OR tradebook is empty (rare, but possible after model reset):
CODEBLOCK28
When data sources disagree:
| Scenario | Action |
|---|---|
| tradebook shows position, equitySeries doesn't | Trust tradebook (equitySeries may lag) |
| equitySeries shows position, tradebook doesn't |
CRITICAL: Always calculate actual returns using:
todayPrice)Output format (with accurate data):
CODEBLOCK29
If NOT held in any model:
CODEBLOCK30
| Situation | Approach | Example |
|---|---|---|
| Held (US) | Call out position | "KSVC Model1 holds $MU at $412 entry" |
| Held (TW) |
⚠️ CRITICAL: ALWAYS use Yahoo Finance for current prices. KSVC API's todayPrice can be stale.
US stocks:
CODEBLOCK31
Taiwan stocks (use .TW or .TWO suffix):
CODEBLOCK32
Taiwan ticker suffixes:
.TW - Listed on Taiwan Stock Exchange (TWSE)Calculate actual gain (not API's stale profit%):
CODEBLOCK33
Complete workflow (tradebook + Yahoo Finance):
# 1. Get entry price from tradebook
ENTRY=$(curl -s "https://kicksvc.online/api/twse-model2" | jq '.tradebook[] | select(.ticker == 6285) | .enterPrice')
# 2. Get current price from Yahoo Finance
CURRENT=$(curl -s -A "Mozilla/5.0" "https://query1.finance.yahoo.com/v8/finance/chart/6285.TW?interval=1d&range=1d" | jq '.chart.result[0].meta.regularMarketPrice')
# 3. Calculate actual gain
echo "Entry: NT\$$ENTRY | Current: NT\$$CURRENT | Gain: $(awk "BEGIN {printf \"%.1f\", ($CURRENT - $ENTRY) / $ENTRY * 100}")%"
See references/kirk-voice.md for full templates and examples.
| Format | When to Use |
|---|---|
| No number on Tweet 1 | Recommended - cleaner hook, stands alone if quoted/shared |
INLINECODE56 , 3/, etc. |
1/ on first tweet | Optional - explicit "thread incoming" signal |
Why skip number on first tweet:
Format preference: Use / not ) - it's the established Twitter thread convention.
CODEBLOCK35
❌ Vague: "NAND supply is tight"
✅ Specific: "YMTC adding 135k WPM at Wuhan Fab 3. Still won't close the gap - Samsung X2 conversion delayed to Q2."
❌ Vague: "HBM margins are good"
✅ Specific: "SK Hynix HBM yields at 80-90%. Samsung stuck at 60% on 1c DRAM."
Always include: specific numbers, time frames, fab names, comparisons.
Never use vague pronouns or shorthand when the referent hasn't been introduced.
In thread format, each tweet may be read semi-independently. If earlier tweets discuss a concept as a category (e.g., "ASIC revenue"), don't suddenly refer to it as "the project" in a later tweet — the reader has no antecedent for "the project."
❌ Vague: "MS thinks the project is the 3nm Google TPU"
(What project? The thread never introduced "a project.")
✅ Clear: "MS thinks the main client/program is the 3nm Google TPU"
(Names what MS is identifying — who's buying and what they're building.)
Rule: When a shorthand ("the project", "this deal", "the play") saves words but costs clarity, it's not saving anything. Name the thing directly. A few extra words that prevent the reader from pausing to re-read are always worth it.
When shifting from category to specific: If the thread discusses an abstract category (ASIC revenue, memory supply) and then pivots to a specific entity (Google TPU, Samsung fab), bridge the transition. Don't assume the reader already knows which specific thing drives the category.
⚠️ WHY THIS STEP EXISTS: We learned that RLM extraction (Step 1b) is not the same as verification. Explore agents hallucinate numbers. Writers make inferences. This step catches errors BEFORE publishing.
⚠️ STRUCTURAL GATE: You (the main agent) are the WRITER. You cannot also be the AUDITOR. You MUST delegate audit to fresh-context subagents. See the "WARM STATE TRAP" section in the audit-content skill for why.
Action 1: Generate audit manifest
CODEBLOCK36
Action 2: Spawn Explore agents (MANDATORY — do NOT skip this)
CODEBLOCK37
⚠️ WARM STATE TRAP: If RLM is already loaded from Step 1b, you WILL be tempted to "just grep it yourself." DO NOT. The audit-content skill explains why: you wrote the draft, so you already "know" the answers. Self-auditing is confirmation bias, not verification.
Self-check: If you are about to type rlm_repl.py exec during Step 4a, STOP. You are skipping the gate.
Action 3: Collect results and write audit report
CODEBLOCK38
| Claim Type | Example | How to Verify |
|---|---|---|
| Company names | "KHGEARS" | RLM grep + TWSE API |
| Ticker formats |
Do NOT save draft with FAIL status. UNSOURCED claims need explicit decision.
⚠️ WHY THIS STEP EXISTS: RLM audit (Step 4a) is source-locked — it only checks claims against the cited PDF. This over-flags reasonable inferences that go beyond one report but are well-documented publicly. Step 4a.5 gives flagged claims a second chance via web-grounded search.
Case Study (Old Memory Squeeze, 2026-02-07):
Same thread: "Samsung, Kioxia, Micron all reducing MLC NAND" — MS only confirmed Samsung, said Kioxia/Micron "could" reduce. Gemini confirmed all three are actively reducing per TrendForce (41.7% YoY MLC NAND capacity decrease).
| RLM Audit Result | Use Gemini? | Why |
|---|---|---|
| FAIL — wrong number | No | Number errors need source correction, not web search |
| FAIL — inference beyond source |
CODEBLOCK40
Key: Ask Gemini to search the web explicitly. Without "search the web", Gemini may read local files instead.
| Gemini Result | Action |
|---|---|
| Confirmed with public sources | Restore claim, add dual attribution (source + Gemini web) |
| Partially confirmed |
Update claims restored via Gemini:
CODEBLOCK41
Include Gemini's sources in the audit resolution log:
CODEBLOCK42
⚠️ CRITICAL: This is the FINAL holdings check. You MUST run this after writing content because:
Problem: You might learn the correct ticker late in the pipeline.
Example - GUC Case:
1. Extract ALL tickers/identifiers from the draft:
CODEBLOCK43
2. For EACH ticker, check ALL 7 models:
CODEBLOCK44
3. Compare Step 2 vs Step 4c results:
CODEBLOCK45
4. If holdings status changed, update draft:
CODEBLOCK46
| Step 2 | Step 4c | Action |
|---|---|---|
| Not held | Not held | ✅ No change needed |
| Not held |
CODEBLOCK47
Why this step exists: The data backbone (Step 3) is Serenity-heavy - precise, comprehensive, verified facts. Step 4c transforms it into Kirk's authentic voice with emotional range and character.
Invoke the kirk-mode skill:
CODEBLOCK48
Transforms verified data into Kirk's voice by:
| Situation | Kirk Mode | Example |
|---|---|---|
| Deep fundamental dive | Analytical | "ok so", "Wait though", data-heavy with reactions |
| Market absurdity |
Most natural: Mix modes in single post (Analytical + Sarcastic + maybe GIF)
Output: Transformed content with Kirk's character voice - ready for humanizer pass.
See kirk-mode skill for:
Note: Humanizer runs AFTER stylize to remove any AI patterns that slipped through during transformation.
Invoke the humanizer skill:
CODEBLOCK49
| Pattern | Fix |
|---|---|
| "Full stop." | "Simple as." or just delete |
| Em-dashes (—) |
CRITICAL: Use assets folder structure for all drafts.
CODEBLOCK50
Example: INLINECODE63
Save main content as: INLINECODE64
CODEBLOCK51
Create README.md in the assets folder to document the work:
CODEBLOCK52
[Claim]: [Value]
### [Claim Category 2]
\
---
## Audit Reports
| File | Purpose |
|------|---------|
| YYYY-MM-DD-topic-audit-manifest.md | Claims to verify |
| YYYY-MM-DD-topic-audit-report.md | Initial audit results |
| YYYY-MM-DD-topic-audit-final.md | Final audit with corrections |
**Audit result:** X/Y claims verified
---
## KSVC Holdings
\bashResult: [Holdings status]
\
---
## Source Documents
| Source | Path | Used For |
|--------|------|----------|
| [Report name] | /Users/Shared/ksvc/pdfs/YYYYMMDD/file.pdf | [What data] |
---
## Corrections Made
1. [Correction 1]
2. [Correction 2]
---
## Lessons Learned
1. [Lesson 1]
2. [Lesson 2]
Timing: After draft is complete. The draft crystallizes the thesis - then you see which claims benefit from visualization.
| Content Type | Chart Likely? | Why |
|---|---|---|
| Long Thread | Yes | Multiple data points, trends |
| Quick Take |
Principle: Put the most eye-catching visual early (Tweet 1-3) to hook engagement.
| Chart Type | Best Tweet Position | Why |
|---|---|---|
| Market size / growth bar | Tweet 2 (TLDR) | Pairs with market numbers, shows scale |
| Component breakdown pie |
Pairing logic:
Example pairing (humanoid robotics thread):
CODEBLOCK56
CODEBLOCK59
⚠️ Why this exists: We once created a "component count" chart but saved a "cost %" source image. The metrics didn't match, making the source invalid for verification.
Before generating ANY chart, you MUST:
| Step | Action | Example |
|---|---|---|
| 1. State | "I am charting [METRIC] from [SOURCE]" | "I am charting hardware cost % from 永豐 p.20" |
| 2. Show |
source_hardware_cost_p20.png |Red flags - STOP if you notice:
⚠️ LEARNED FROM MISTAKE: We fabricated "Chuing" for 祺驊 (4571). Official name is "KHGEARS".
CODEBLOCK60
CODEBLOCK61
After generating, spawn Explore agent with thoroughness: quick for focused verification:
CODEBLOCK62
Verification checks data → chart integrity. Source accuracy is RLM's responsibility (Step 4a).
Thoroughness = quick: Single-pass verification, focused on specific data points. Fast visual-to-data check.
Save to: INLINECODE67
Include:
After approval, publish clean version to /Users/Shared/ksvc/threads/.
CRITICAL: Flat folder structure, one folder per post.
CODEBLOCK63
Rules:
YYYY-MM-DD-topic/ at root level (not nested in 2026-02/)charts/ subfolder)thread.md = clean content only (no metadata header)_metadata.md = internal reference (sources, audit, not for posting)Clean version with just the tweets - no metadata header:
CODEBLOCK64
Internal reference file (prefixed with _ to indicate not for posting):
CODEBLOCK65
Example: See INLINECODE75
CODEBLOCK66
Result:
CODEBLOCK67
| Status | Action |
|---|---|
| Draft approved | Publish to /Users/Shared/ksvc/threads/ |
| Needs revision |
Extraction (Step 1a/1b):
/Users/Shared/ksvc/threads/) before topic selection--extract-images)chars_extracted checked against expected sizeCross-Doc Synthesis (Step 1c):
Content:
从分析师研究PDF中创建Twitter内容,并针对KSVC持仓进行验证。
1a. 扫描PDF(使用Explore代理进行广泛筛选)
1b. 提取洞察(使用RLM进行深度提取——文本、表格和图表)
1c. 跨文档综合(使用rlm-multi进行跨来源洞察整合)
切勿跳过步骤4a-4d。使用1a进行多PDF筛选,1b进行深度提取,1c进行跨文档综合,4a进行验证,4a.5进行网络交叉验证,4b进行最终持仓检查,4c进行角色语气塑造,4d进行AI模式去除。
⚠️ 关键:步骤1b提取数据。步骤1c跨文档综合。步骤4a验证已撰写的内容。步骤4a.5交叉验证推论。
子代理无法读取项目目录之外的文件。 /Users/Shared/ksvc/pdfs/ 中的PDF被阻止。解决方法:在生成子代理之前,将PDF符号链接到项目目录中。
主代理必须在步骤1a之前创建符号链接:
bash
ln -sf /Users/Shared/ksvc/pdfs/YYYYMMDD .claude/pdfs-scan
然后子代理从 .claude/pdfs-scan/filename.pdf 读取——这可行,因为路径在项目内解析。
| 访问方式 | /Users/Shared/ 路径 | 符号链接后的项目路径 |
|---|---|---|
| 子代理读取工具(PDF) | ❌ 自动拒绝 | ✅ 可行 |
| 子代理读取工具(图片) |
发现于2026-02-07: 子代理在 /Users/Shared/ 路径上会失败,提示读取权限已被自动拒绝(提示不可用)。符号链接到项目目录 = 完全读取权限。已测试:19个PDF,中等详尽度,125k tokens,零错误。
完整指南: references/kirk-voice.md —— 阅读以获取模板和示例。
Kirk语气 = Serenity的数据 + Citrini7的机智 + Jukan的怀疑 + Zephyr的能量。
| 类型 | 时机 | 混合 | 关键元素 |
|---|---|---|---|
| 长推文串 | 深度挖掘,多来源 | Serenity + Jukan | TLDR + 怀疑 |
| 快速点评 |
长推文串: 钩子 → TLDR → 数字 → 怀疑 → 立场
快速点评: 标题数字 → 背景 → 如果你现在在看...
突发新闻: 重磅。 / 好好好... → 关键数字 → 来源
胜利巡礼: $TICKER自KSVC加入以来上涨X% → 入场价/现价 → 论点得到验证
当你有许多PDF需要审阅时,使用Explore代理进行广泛筛选。这比RLM用于初步发现更快。
⚠️ 在扫描任何PDF之前,检查Kirk已经发布了什么。
bash
对于每个已发布的推文串,注意:
然后在扫描后选择主题时,拒绝任何:
可接受的重叠:
为什么存在这个规则(案例研究——ABF基板,2026-02-07):
Kirk在2月5日发布了一个10条推文的推文串,涵盖高盛的ABF短缺报告(10%→21%→42%,Kinsus/NYPCB/Unimicron)。在2月7日,管线选择了同一份高盛报告,并生成了一个3条推文的快速点评,包含相同的数字、相同的公司、相同的角度。我们没有先检查已发布的推文串,所以当有10个其他新鲜主题角度可用时,我们在重复内容上浪费了一次管线运行。
| PDF数量 | 代理数量 | PDF/代理 | 预期时间 |
|---|---|---|---|
| ≤5 | 1 | 全部 | ~25秒 |
| 6-10 |
为什么每个代理约5个PDF? 速度的最佳点。每个PDF需要约4-8秒来读取+总结。5个PDF ≈ 每个代理25秒。每个代理增加更多PDF不会节省任何东西(相同的总tokens),但会使实际时间更差。
成本: Haiku很便宜。4个代理 × 5个PDF × 约4k tokens = 总共约80k输入tokens——与1个代理做全部20个相同。并行是免费的。
跨文档综合权衡: 每个代理只看到其批次,所以跨批次主题是主代理的工作。这没问题——主代理无论如何都会合并所有结果。
步骤1:主代理创建符号链接并列出PDF:
bash
ln -sf /Users/Shared/
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 kirk-content-pipeline-1776420062 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 kirk-content-pipeline-1776420062 技能
skillhub install kirk-content-pipeline-1776420062
文件大小: 43.88 KB | 发布时间: 2026-4-17 18:49
