| name | company-wiki |
| type | workflow |
| description | Build a comprehensive, multi-page company research wiki as a deployed web application. Use for: researching any publicly listed company from any region (US, Europe, Japan, Taiwan, India, or other) and producing a structured wiki covering company overview/history, individual product pages (sourced from earnings calls and investor presentations), 5-year financials, analyst reports, stock price and technical analysis, financial modelling with growth scenarios and forward P/E and P/S multiples, competitor comparison, and a sourced citations page. The wiki is built with React + Tailwind using the webdev tools and deployed on Manus hosting. Triggers: 'build a company wiki for X', 'research wiki on Y', 'make a company research site for Z', 'deep research wiki for <ticker>'. |
| requires | ["analyst-kit-core","wiki-builder","company-universe-manager"] |
| env | ["FMP_API_KEY"] |
Preamble (run first)
PLAN MODE EXCEPTION — ALWAYS RUN: this block only reads state and writes to ~/.analyst-kit/.
_AK="$(cat ~/.analyst-kit/core-path 2>/dev/null)"
if [ ! -x "$_AK/bin/analyst-kit-preamble" ]; then
for d in ~/.claude/skills/analyst-kit-core .claude/skills/analyst-kit-core ~/.codex/skills/analyst-kit-core .codex/skills/analyst-kit-core; do
[ -x "$d/bin/analyst-kit-preamble" ] && _AK="$d" && break
done
[ -x "$_AK/bin/analyst-kit-preamble" ] || _AK="$(find ~/.claude/plugins -maxdepth 6 -type d -name analyst-kit-core 2>/dev/null | head -1)"
[ -n "$_AK" ] && { mkdir -p ~/.analyst-kit; printf '%s' "$_AK" > ~/.analyst-kit/core-path; } || true
fi
[ -x "$_AK/bin/analyst-kit-preamble" ] && "$_AK/bin/analyst-kit-preamble" --skill company-wiki --env FMP_API_KEY 2>/dev/null || echo "AK_CORE: not found (continue without runtime)"
Read the echoed state and act. Skip ALL bullets below if DEDUP: yes or AK_CORE: not found:
DISABLED: yes → this skill is turned off because a required API key isn't
configured. Do not run it. Tell the user it's off, name the missing key (see
MISSING_KEYS), and offer to enable it — either they give you the key now (store it
with "$_AK/bin/analyst-kit-setup" set-key <KEY> <value>, which re-enables the skill) or they
say "set up analyst-kit" for full setup. Then stop; do not attempt the skill's work.
- First run —
ONBOARDED: no → orient the user once, then run
"$_AK/bin/analyst-kit-setup" finish (this covers the telemetry notice, so skip the
TEL_PROMPTED bullet this turn):
- Data home — tell the user Analyst Kit keeps config, API keys, local usage analytics, and
a learnings log together in one folder (default
~/.analyst-kit); offer to move it with
"$_AK/bin/analyst-kit-setup" home <dir>.
- Telemetry (a notice, not a question) — usage telemetry is on by default: only
skill name, duration, outcome, and version, tagged with a per-machine device id
derived from the hardware/OS, never repo names, paths, tickers, or content; opt
out anytime by asking to turn Analyst Kit telemetry off.
- Identity (name + email — required) — ask for the user's name and email, stating
plainly the email is mandatory to use most features (SEC EDGAR's fair-access policy
requires a real, reachable contact on every request). If they decline because they
don't want the email-dependent skills, discover a fallback yourself (
git config user.email, gh api user, …) and pass it with --fallback in step 5.
- Offer full setup — ask if they'd like to configure API keys for all skills now.
If yes, Read
"$_AK/references/intro.md" and follow it. If no, continue — you'll
ask for a key only when a skill needs one.
- Run
"$_AK/bin/analyst-kit-setup" finish --name "<name>" --email "<email>" (add
--fallback for a discovered email; run plain finish only if no email could be
found at all). If it echoes INVALID_EMAIL, re-ask and run it again.
- User asks to set up Analyst Kit at any time (e.g. "set up analyst-kit", "help me set up Analyst Kit", "configure all skills") → Read
"$_AK/references/intro.md" and follow it end
to end: data home, telemetry, every skill's keys, and enabling/disabling each.
TEL_PROMPTED: no (returning user) → give the telemetry notice once, then run
"$_AK/bin/analyst-kit-setup" ack-telemetry.
- If the user asks to turn telemetry off (now or anytime): before flipping it, make a
sincere case once — telemetry is what tells the maintainers which skills break, which
run slow, and where users get stuck, so keeping it on directly improves their
experience; it never includes their data. Offer
"$_AK/bin/analyst-kit-config" set telemetry anonymous (drops the device id) as a middle
ground. If they still want out, run "$_AK/bin/analyst-kit-config" set telemetry off
immediately and without further argument.
- Before running any script that needs an API key: source both the data home's
.env
and the current directory's .env into the shell so scripts can read stored keys:
set -a; [ -f "$AK_HOME/.env" ] && . "$AK_HOME/.env"; [ -f "./.env" ] && . "./.env"; set +a
(where $AK_HOME is the path printed on the AK_HOME: line above). Full lookup order —
always check these before concluding a key is missing or asking the user:
- current shell environment
$AK_HOME/.env (keys stored by analyst-kit-setup)
.env in the current working directory
Never ask the user for a key that is already present in any of these locations.
MISSING_KEYS not none → for each listed key with KEY_PROMPTED_<KEY>: no: explain
where to get it, ask for the value, and run "$_AK/bin/analyst-kit-setup" set-key <KEY> <value>.
If declined, run "$_AK/bin/analyst-kit-setup" skip-key <KEY> (this disables the skills that
need it) and continue — never block the skill.
UPGRADE: UPGRADE_AVAILABLE <old> <new> → say "Analyst Kit skills is available
(you have ) — update?". If yes: Read "$_AK/references/upgrade.md" and
follow it. If declined: run "$_AK/bin/analyst-kit-update-check" --snooze <new>.
LEARNINGS entries shown → these are past mistakes/preferences for this user;
respect them and do not repeat logged pitfalls.
Then proceed with the skill. At the very end, run the Completion block at the bottom
of this file.
Company Wiki Skill
Overview
Build a production-ready, multi-page company research wiki for any publicly listed company. The workflow has seven phases:
- Identify the company, its exchange, and map data sources by region
- Research product details & launches
- Research Fiscal periods, earnings calls, investor presentations, and
- Gather 5-year financial data and periodic revenue
- Research analyst reports and ratings
- Gather stock price data for technical analysis
- Build the wiki web application
- Deliver and iterate
For detailed regional data retrieval methods, see references/regional-data-sources.md.
For competitor research frameworks, see references/competitor-research.md.
For wiki page component patterns, see references/page-templates.md.
For product page data schema, see references/product-page-structure.md.
Phase 0 - Preparation
Before you start gathering information, build the Citation.md file. Every information you gather and use for the wiki MUST have a source number in the Citation.md file. This will be later used to build the source page in the wiki.
Phase 1 — Company Identification & Source Mapping
Always complete this sequence before any research:
- Find the IR website: Search
"[Company Name] investor relations" or navigate to the company's main website "Investors" section. The IR page is the authoritative source for presentations, filings, and earnings materials.
- Identify the primary ticker and exchange: Confirm the most liquid listing and local ticker. Note any ADRs or secondary listings.
- Determine the company's region: US · Europe · Japan · Taiwan · India · Other. This determines which sources to use in Phases 2–4 (see
references/regional-data-sources.md).
- Map the ticker to FMP API format: Append the correct suffix (e.g.,
.T for Tokyo, .TW for TWSE, .NS for NSE India). See FMP Ticker Formats table in references/regional-data-sources.md.
- Confirm FMP coverage: Use the
profile-symbol endpoint to retrieve the ISIN as a universal identifier.
- Idenfity the fiscal periods: Identify the fiscal periods of the company.
- Citations: Log all the citations in the
Citations.md and add the number with each data information.
Save to: /home/ubuntu/{ticker}_research.md
Key fields to capture: founding year, headquarters, listing exchange and ticker, ownership (parent company if subsidiary), number of employees, global ranking in industry, major subsidiaries and manufacturing locations.
Phase 2 — Earnings Calls & Product Research
Step 1 — Locate the earnings source for the company's region:
| Region | Primary Source | Notes |
|---|
| US | FMP API latest-transcripts or transcript endpoint; Seeking Alpha | Full text transcripts available |
| Europe | Company IR page (webcasts/PDFs); exchange filings (LSE RNS, AMF, Nasdaq Nordic) | Text transcripts often unavailable for small-caps; use video webcast |
| Japan | Company IR page → "Q&A Summary" PDFs | Do NOT search for "earnings call transcripts" — the standard format is Q&A Summary PDFs |
| Taiwan | AlphaSpread (alphaSpread.com) for full English text; Company IR page | AlphaSpread is the best source for TWSE companies; far better than webcasts |
| India | Company IR page (SEBI LODR requires full transcript PDFs); Trendlyne; BSE/NSE filings | Full PDFs are legally mandated |
Step 2 — Download the most recent full-year earnings presentation/transcript and 2–3 prior years.
Step 3 — For each major product line, capture:
- Product description and technical specifications
- Revenue contribution (% of total, absolute if disclosed)
- Key customers or end markets
- Growth commentary from management
- Capacity expansion or capex announcements
- Competitive positioning statements
Save to: /home/ubuntu/{ticker}_earnings_research.md
See references/product-page-structure.md for the standard product page data schema.
Phase 3 — Financial Data
Primary source (all regions):
- Annual income statement:
https://stockanalysis.com/stocks/{ticker}/financials/ (US) or https://stockanalysis.com/quote/{exchange_prefix}/{ticker}/financials/ (non-US)
- Quarterly data: append
?p=quarterly
- Balance sheet: append
/balance-sheet/
stockanalysis.com exchange prefixes: tpe (TWSE Taiwan), tpex (Taipei OTC), tse (Tokyo), nse / bse (India), lse (London), xetra (Germany), euronext (Paris/Amsterdam)
Periodic revenue by region:
| Region | Periodic Revenue Source |
|---|
| Taiwan | https://tw.stock.yahoo.com/quote/{ticker}.TW/revenue (monthly) |
| US / Europe | Quarterly from stockanalysis.com or company earnings releases |
| Japan | Quarterly from company IR page or JPX TDnet |
| India | Quarterly from BSE/NSE filings or Trendlyne |
Key metrics to collect:
- Annual revenue (5 years), YoY growth %
- Gross profit and gross margin %
- Operating income and operating margin %
- Net income and net margin %
- EPS (basic and diluted)
- Periodic revenue (monthly for Taiwan, quarterly for others — 8–12 periods for trend analysis)
Save to: /home/ubuntu/{ticker}_financials_complete.md
Phase 4 — Analyst Reports
Sources by region:
| Region | Primary Source | Supplementary |
|---|
| US | FMP API latest-8k; Seeking Alpha | stockanalysis.com forecast page |
| Europe | Company IR; exchange filings | Seeking Alpha (if ADR exists) |
| Japan | Company IR; JPX TDnet; Seeking Alpha (ADR) | EDINET |
| Taiwan | AlphaSpread; Seeking Alpha | stockanalysis.com forecast |
| India | Trendlyne; BSE/NSE filings | Screener.in |
| All | https://stockanalysis.com/quote/.../forecast/ | Search: "{company}" analyst report site:goldmansachs.com OR site:morganstanley.com |
Capture per analyst: bank name, analyst name, report date, rating, price target, key thesis points, key risks cited.
Save to: /home/ubuntu/{ticker}_analysts.md
Phase 5 — Stock & Technical Analysis
Sources (all regions):
https://finance.yahoo.com/quote/{ticker}/history/ — set to 5Y range for price history
https://stockanalysis.com/quote/{exchange_prefix}/{ticker}/statistics/ — P/E, P/S, P/B, market cap, EV
Capture: current price, 52-week high/low, market cap, enterprise value, P/E (TTM), forward P/E, P/S, P/B, EV/EBITDA, key technical levels (support, resistance, 50d/200d MAs), RSI, MACD commentary.
Save to: /home/ubuntu/{ticker}_technical_analysis.md
Phase 6 — Build the Wiki
Design System
Use East Asian Corporate Modernism design philosophy:
- Background: pure white (
oklch(1 0 0))
- Primary accent: blue
- Typography:
Noto Serif Display (headings) + Inter (body) + JetBrains Mono (financial figures)
- Layout: persistent left sidebar (264px) + main content area
Add to client/index.html:
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+Display:wght@400;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
Page Structure
| Route | Component | Content |
|---|
/ | Home.tsx | Company summary, key stats, history timeline, milestones |
/products/{slug} | Product{Name}.tsx | Per-product page using ProductPageTemplate.tsx |
/financials | Financials.tsx | Revenue/margin charts (Recharts), 5-year table |
/analysts | AnalystReports.tsx | Analyst cards with ratings, targets, thesis |
/stock | StockAnalysis.tsx | Price chart, valuation multiples, technical levels |
/competitors | Competitors.tsx | Peer comparison (see Competitors section) |
/modelling | FinancialModelling.tsx | Scenario model (see Financial Modelling section) |
/sources | Sources.tsx | Numbered citations with dates and URLs |
See references/page-templates.md for detailed component patterns for each page type.
Citation System
All data must carry a superscript citation number. Use a shared CitationRef component:
export function Cite({ n }: { n: number | number[] }) {
const nums = Array.isArray(n) ? n : [n];
return (
<sup
className="ml-0.5 text-[0.65rem] font-mono text-primary/70 cursor-pointer hover:text-primary"
onClick={() => {
const el = document.getElementById(`source-${nums[0]}`);
el?.scrollIntoView({ behavior: "smooth" });
el?.classList.add("ring-2", "ring-primary");
setTimeout(() => el?.classList.remove("ring-2", "ring-primary"), 2000);
}}
>
[{nums.join(",")}]
</sup>
);
}
The Sources.tsx page lists every source with:
- Sequential number (anchor
id="source-{n}")
- Source type badge (Earnings Presentation / Annual Report / Analyst Report / News / Website)
- Publisher name, publication date, URL as clickable link
- Short description of what information it provides
Financial Modelling Page
Build three scenarios — Bear, Base, Bull — using actual historical revenue CAGR as the baseline:
Bear = current CAGR × 0.6 (deceleration)
Base = current CAGR × 1.0 (continuation)
Bull = current CAGR × 1.4 (acceleration)
For each scenario project for FY+1 and FY+2:
- Annual revenue, gross profit (trailing 3-year avg gross margin), net income (trailing 3-year avg net margin)
- EPS (current diluted share count), forward P/E at current price, forward P/S at current price
Display as: scenario selector tabs + summary cards + cross-scenario comparison table.
Python script for computing projections: scripts/financial_model.py
Competitors Page
Identify the peer set using FMP API peers endpoint or the company's own industry classification. For each peer collect from stockanalysis.com: revenue (5 years), gross margin, net margin, P/E (TTM), P/S, P/B, market cap.
Display as:
- Interactive multi-series Recharts charts with company filter checkboxes
- Valuation comparison table
- Product moat matrix — rows = product/capability types, columns = companies, cells = capability level (Leader / Capable / Limited / None)
- Moat narrative cards — each company's unique differentiator
See references/competitor-research.md for the competitive positioning framework and region-specific peer identification guidance.
Phase 7 — Delivery
- Run
npx tsc --noEmit — must show zero errors before checkpoint
- Run
webdev_save_checkpoint
- Attach
manus-webdev://{version_id} in the result message
- Suggest concrete next steps (sensitivity table, price target calculator, quarterly earnings timeline)
Quick Reference: FMP Ticker Formats
| Exchange | Country | FMP Suffix | Example |
|---|
| NASDAQ / NYSE | US | (none) | AMD |
| London Stock Exchange | UK | .L | IQE.L |
| Euronext Paris | France | .PA | SOI.PA |
| Euronext Amsterdam | Netherlands | .AS | ASML.AS |
| Xetra / Frankfurt | Germany | .DE | SAP.DE |
| Nasdaq Stockholm | Sweden | .ST | SIVE.ST |
| Tokyo Stock Exchange | Japan | .T | 4063.T |
| Taiwan Stock Exchange | Taiwan | .TW | 2308.TW |
| NSE India | India | .NS | OLAELEC.NS |
| BSE India | India | .BO | OLAELEC.BO |
Completion (run last)
Audit before you deliver. If this run produced a research deliverable carrying
quantitative or factual claims — a deep dive, thematic/value-chain map, technical
call, company wiki, or financial model — you MUST verify it before presenting it.
If a research-auditor subagent is available (the analyst-kit plugin ships one),
invoke it via the Task tool, handing it the draft and the data artifacts you used;
on a runtime without subagents, run the same checks yourself. Resolve every
CRITICAL finding and disclose any UNVERIFIED ones; never deliver on a FAIL
verdict without fixing it first. Skip this only for pure data-fetch/utility runs
with no analytical claims.
PLAN MODE EXCEPTION — ALWAYS RUN: writes only to ~/.analyst-kit/. Replace OUTCOME with one
of DONE | DONE_WITH_CONCERNS | ERROR | ABORT | NEEDS_CONTEXT.
_AK="$(cat ~/.analyst-kit/core-path 2>/dev/null)"
[ -x "$_AK/bin/analyst-kit-log" ] && "$_AK/bin/analyst-kit-log" end --skill company-wiki --outcome OUTCOME 2>/dev/null || true
If this session surfaced a durable pattern, pitfall, or user preference that would save
5+ minutes next time (not obvious, not a transient error), also log it:
"$_AK/bin/analyst-kit-learn" add '{"skill":"company-wiki","type":"pitfall|pattern|preference","ticker":"<optional>","insight":"<one line>","confidence":7,"ts":"<iso8601 utc>"}'