From analyst-kit
Structures financial analysis plans before data collection: defines deliverables, aligns fiscal calendars, normalizes units, routes data series to appropriate skills, and applies sector-specific conventions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/analyst-kit:analyst-playbookThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- analyst-kit:preamble:start — generated by scripts/sync-preamble.js; edit the template in skills/analyst-kit-core/templates/, never this block -->
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 analyst-playbook 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.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):
~/.analyst-kit); offer to move it with
"$_AK/bin/analyst-kit-setup" home <dir>."$_AK/references/intro.md" and follow it. If no, continue — you'll
ask for a key only when a skill needs one."$_AK/bin/analyst-kit-setup" finish."$_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."$_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..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:
$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.
Work through the four steps below in order, before fetching any data. Each one prevents a class of silently-wrong analysis: wrong deliverable, misaligned periods, apples-to-oranges units, or sector conventions ignored.
Every engagement resolves to one of two deliverables. Decide which — it changes what you collect and how you normalize:
If the user didn't say which, a comparison/question is a report; "update", "refresh", or "push the new quarter" language is a model update.
python3 -m pipeline.cli yoy … --lag 4 quarterly,
--lag 12 monthly) — never computed in your head.| Series | Skill |
|---|---|
| US/global GAAP fundamentals, prices, transcripts, fiscal periods | financialmodellingprep |
| Taiwan-listed anything; monthly revenue | finmind |
| Segment revenue, MD&A, risk factors, anything inside a filing | sec-filings |
| Non-GAAP KPIs (bookings, DAU, ARR, comps) — never in fundamentals APIs | sec-filings (8-K earnings exhibits, EX-99.x) |
| Institutional holdings | 13f-analysis |
| Growth math + chart contracts | charting (Polars pipeline + render) |
| Final document | reporting |
Sector conventions decide what "correct" means (a retailer compared on calendar
quarters is simply wrong). List this skill's references/ directory and read the
playbook matching each entity's sector — for cross-sector comparisons read each one.
If no playbook matches, open references/_template.md and use its section headings
as your checklist for that sector.
Playbooks are deliberately not enumerated here: new sector files drop into
references/ without changing this document.
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 analyst-playbook --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":"analyst-playbook","type":"pitfall|pattern|preference","ticker":"<optional>","insight":"<one line>","confidence":7,"ts":"<iso8601 utc>"}'
npx claudepluginhub mohitjandwani/analyst-kit --plugin analyst-kitGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.