Markdown Article Formatter
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
Reconstruct a company's compensation distribution, high-compensation population, promotion/hiring paths, and role-specific pay bands from public filings and other public data, and deliver a typeset…
$ npx skills add kelvinfkr/company_skill --skill company-talent-economics -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kelvinfkr/company_skill company-talent-economics --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kelvinfkr/company_skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/company-talent-economics .claude/skills/company-talent-economics && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "company-talent-economics" agent skill from https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economics into .claude/skills/company-talent-economics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-talent-economics", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economicsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kelvinfkr/company_skill --skill company-talent-economics -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kelvinfkr/company_skill company-talent-economics --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kelvinfkr/company_skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/company-talent-economics .agents/skills/company-talent-economics && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "company-talent-economics" agent skill from https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economics into .agents/skills/company-talent-economics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-talent-economics", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kelvinfkr/company_skill --skill company-talent-economics -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kelvinfkr/company_skill company-talent-economics --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kelvinfkr/company_skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/company-talent-economics .cursor/skills/company-talent-economics && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "company-talent-economics" agent skill from https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economics into .cursor/skills/company-talent-economics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-talent-economics", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kelvinfkr/company_skill.git --path skills/company-talent-economics--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kelvinfkr/company_skill --skill company-talent-economics -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kelvinfkr/company_skill company-talent-economics --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kelvinfkr/company_skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/company-talent-economics .gemini/skills/company-talent-economics && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "company-talent-economics" agent skill from https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economics into .gemini/skills/company-talent-economics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-talent-economics", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kelvinfkr/company_skill company-talent-economicsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kelvinfkr/company_skill --skill company-talent-economics -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kelvinfkr/company_skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/company-talent-economics .github/skills/company-talent-economics && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "company-talent-economics" agent skill from https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economics into .github/skills/company-talent-economics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-talent-economics", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kelvinfkr/company_skill --skill company-talent-economics -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kelvinfkr/company_skill company-talent-economics --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kelvinfkr/company_skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/company-talent-economics .opencode/skills/company-talent-economics && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "company-talent-economics" agent skill from https://github.com/kelvinfkr/company_skill/tree/main/skills/company-talent-economics into .opencode/skills/company-talent-economics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-talent-economics", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
company-talent-economicsReconstruct a company's compensation distribution, high-compensation population, promotion/hiring paths, and role-specific pay bands from public filings and other public data, and deliver a typeset…
Company Talent Economics is an agent skill from kelvinfkr/company_skill. Reconstruct a company's compensation distribution, high-compensation population, promotion/hiring paths, and role-specific pay bands from public filings and other public data, and deliver a typeset PDF report. Works for companies in any country and writes the report in the language of the company name the user typed (Chinese, Japanese, Korean, German, Spanish, Arabic and more). Use when asked how much people at a company earn, how many employees exceed a total-compensation threshold, which roles are economically…
Its SKILL.md is about 8.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 75 other files, including scripts, reference files and assets (for example `README.md`, `agents/openai.yaml` and `assets/CHECKLIST.md`).
It sits in Documents & Office. The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c99f8b2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
pythonbashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Company Talent Economics loads about 8.4k tokens when it runs, and up to ~19k if it reads all its reference files. Until then it costs about 201 tokens; SKILL.md has 3,954 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from kelvinfkr/company_skill at commit c99f8b2, republished under its MIT licence (© kelvinfkr). 3,954 words, ~8,372 tokens.
.claude/skills/company-talent-economics/SKILL.md (or your agent's skills folder). This skill also uses 71 other files; get the full folder from GitHub.Every run is a directory with a fixed set of files and ten numbered phase gates. Do not skip gates, do not write report.json by hand before Phase 8, and do not present anything before Phase 10 passes. $SKILL below means the folder containing this file.
python $SKILL/scripts/init_run.py "<company>" --out ./talent-economics/<slug> --year <FY> \
[--jurisdiction <code>] [--language <tag>] [--threshold N --currency ISO]
python $SKILL/scripts/check_phase.py ./talent-economics/<slug> --next # prints the exact steps for the next phase
# ... do the steps ...
python $SKILL/scripts/check_phase.py ./talent-economics/<slug> # verifies the gate; on pass prints the next phaseRepeat check_phase.py until PHASE 10 GATE PASSED. If a gate fails, fix only what it lists, then rerun. The gate output is the authoritative to-do list; the rest of this file explains why.
--jurisdiction and --language are inferred from the company name when omitted, and both are recorded in run.json. Confirm them at Phase 0 — changing either later means recompiling and re-rendering.
Files the harness creates and what you must do with each:
| File | Created by | Your job |
|---|---|---|
run.json | init_run | check language / jurisdiction / currency / threshold; fill entity, facts (millions), facts_count, segments, each with an evidence_id |
analysis_notes.md | init_run | replace every checkbox line with numbers + evidence ids (Chains 1-9) |
source_manifest.csv | init_run | one row per document per pass; status used / calibration only / searched, not found |
evidence.jsonl | init_run (empty) | one JSON line per number used; claim_type + source_tier mandatory |
levels.json | init_run | headcount triangle per function, band shares, TC triangle per band |
model.json, population.json | build_model, estimate_population | never edit by hand |
pay_bands.json, career_transitions.csv | init_run | fill in Phases 6-7 |
report.json | compile_report | fill only the TODO prose fields after Phase 8 |
report.pdf | render_report | inspect visually, then deliver |
Rules that the scripts cannot check for you:
calibration only.null and write NOT AVAILABLE: <fact_key> - <what you searched> in the notes. For an unlisted entity that passes the Phase 1 gate and marks the whole run provisional; the report then says so on its cover and no figure in it may be presented as measured.assets/defaults.json or assets/jurisdictions.json and say so in the notes.references/glossary.md, in the language you are writing in. A company has articles/charter, never a "constitution". TC is pre-tax and includes annualised vested equity.Write the report in the language of the company name the user typed. ソニーグループ gets a Japanese report; Siemens AG gets a German one; 小米集团 gets a Chinese one. If the user wrote their request in a different language from the company name, the user's language wins — they are the reader. Speak to the user in that language too, not only in the PDF.
init_run.py resolves this and records it in run.json -> language; every later script reads it from there. Explicit --language beats $CTE_LANG, which beats detection from the name.
Read references/localization.md before Phase 0. The two things it settles:
python $SKILL/scripts/i18n.py detect "<name>" reports high / medium / low / ambiguous. On low or ambiguous — plain Latin names, or a legal form like S.A. that four languages share — do not silently default to English. Use the language the user wrote in; if that is also unclear, ask once, in one line.en zh-CN zh-TW ja ko es fr de pt it ru ar). Any other language still gets a full report in that language, with the structural labels falling back to English and a note printed. Adding a pack is one JSON file: python $SKILL/scripts/check_locales.py --new <tag>.Search in two languages, always: filings are indexed under their local names, cross-border coverage under English ones. search_plan.py does this automatically.
Do not translate the company's own words. Native titles, level names, segment names and charter terms stay in the original language with a translation in parentheses on first use.
assets/jurisdictions.json holds 49 jurisdictions with filing venues, local document names, registries, currency, a default high-pay threshold and an employer social-contribution rate.
python $SKILL/scripts/i18n.py jurisdictions # list every code
python $SKILL/scripts/i18n.py jurisdictions japan # one entry in full; aliases resolveTwo of those fields are priors, not facts, and every override belongs in analysis_notes.md:
threshold_default is the round local number that reads as "high earner" in that market (CNY 1,000,000, JPY 20,000,000, USD 250,000, INR 10,000,000). It is not a statistical cut-off and is not comparable across countries at market FX. A user-supplied threshold always wins.employer_social_rate ranges from roughly 1% (Denmark, funded through income tax) to roughly 32% (Spain). Applying the wrong one silently breaks the payroll envelope. Use the disclosed number whenever the filing gives one.An unmapped country routes to other: find the national registry and securities regulator first, then run the generic six-pass plan. Read references/jurisdiction_playbooks.md for what each regime is unusually good at and where it misleads.
Analyze talent as part of the company's economic system, not as a generic salary benchmark.
The central causal chain is:
business model -> profit pools -> critical processes -> critical roles -> org/level structure -> market replacement cost -> compensation distribution -> promotion/hiring paths
A title is not a salary. Two people at the same nominal level may rationally receive very different compensation if they control different profit pools, customer relationships, technical bottlenecks, or scarce capabilities.
If the user gives only a company name:
assets/jurisdictions.json for that jurisdiction (a round local-currency number that reads as "high earner" there), state it explicitly on the cover, and let any user-supplied threshold override it; in a high-inflation economy state the FX date or quote in USD;observed_fact, derived_metric, assumption, inference or reconstruction. Write those same English keys into report.json; render_report.py prints the label for the report's language (披露 / Disclosed / Offengelegt / 開示 ...). validate_bundle.py accepts either form in report.json and only the canonical key in evidence.jsonl.references/glossary.md, in the language you are writing in: use that language's accounting and corporate-law term, never its colloquial one. A company has articles/charter (章程 / Satzung / statuts / 定款 / 정관 / устав), never a "constitution"; employee benefit expense is not take-home pay; a grant is not a vest; observed transition shares are not promotion probabilities.The default user-facing artifact is report.pdf, not raw Markdown.
Always build the analysis in an auditable structured form, then typeset it:
analysis_notes.md - the written-out reasoning chains (see references/reasoning_chains.md) with intermediate numbers; produced before report.json;report.json - structured report model used by the renderer;evidence.jsonl - claim-level evidence ledger;source_manifest.csv - every source searched/used, with date and source type;model.json - headcount/TC assumptions used by estimators;career_transitions.csv - observed public-profile transitions when used;report.pdf - final polished deliverable.The final PDF must not be generated by directly converting Markdown. Populate report.json using assets/report_spec.json (including meta.language), run scripts/validate_bundle.py <dir>, then run scripts/render_report.py report.json -o report.pdf. The renderer builds a typeset DOCX internally and converts that document to PDF, choosing section titles, table headers, number formatting, fonts and text direction from meta.language. Keep the DOCX only when explicitly requested with --keep-docx.
Before delivery, visually inspect the rendered PDF: clipped tables, tofu boxes where the script's font is missing, orphaned headings, pagination. For Arabic and Hebrew, confirm the mirrored layout actually rendered. render_report.py warns on stderr when no installed font covers the report's script — install the font rather than shipping boxes.
Before searching compensation data, read references/company_type_router.md and classify the entity. The source plan must change by company type. Charter and control-structure sources are a separate workstream (Pass 1), not an optional appendix.
For historical charters, use one of three statuses:
original - actual charter/articles/amendment obtained;official_summary - official filing describes the terms but original document is not attached;reconstructed - terms inferred from later prospectus/legal opinion/registry history.Never present reconstructed wording as original charter text.
Produce these sections unless the user requests a narrower analysis:
First confirm the three fields init_run.py inferred, because everything downstream depends on them:
run.json -> language — the language you will write in. Inferred from the company name; if the user wrote to you in another language, theirs wins. Fix it now, not at Phase 10.run.json -> jurisdiction — decides which filing venues Phase 1 searches. python $SKILL/scripts/i18n.py jurisdictions <code> shows what that maps to.run.json -> currency and threshold — priors from the registry. State the threshold on the cover; a user-supplied one always wins.Then identify:
Do not mix parent-company and subsidiary headcounts or compensation without labeling them.
Classify the company using references/company_type_router.md before launching the search plan. Record the legal form, listing venue, issuer domicile, operating entity, share classes, and whether historical charter documents are expected to be publicly available.
Read references/source_playbook.md, references/jurisdiction_playbooks.md, and references/company_type_router.md.
Use whatever web tools the host agent exposes (Claude Code: WebSearch / WebFetch; Codex: built-in web search) to run a structured search, not a single query. Fetch primary filings in full rather than relying on search snippets. Run six separate search passes with the stop rules in references/source_playbook.md: (1) identity & charter, (2) business economics, (3) workforce & payroll, (4) compensation & equity awards, (5) organisation & critical roles, (6) career transitions. scripts/search_plan.py <company> --jurisdiction <code> --year <FY> prints the query ladder: venue-scoped site: queries built from that jurisdiction's filing venues and local document names, plus six passes of queries in the run's language and in English. Search both sides — filings are indexed under their local names, cross-border analyst coverage under English ones. For each pass, search → identify the primary document → fetch it in full → extract numbers with unit, period and page. Search across:
Create evidence.jsonl matching schemas/evidence.schema.json and a source_manifest.csv. The manifest must record sources that were searched but unavailable when that absence matters (for example, an early private-company charter).
When a required figure genuinely is not public — normal for unlisted entities, where gross profit and the payroll line are often never filed — leave it null and write in analysis_notes.md:
NOT AVAILABLE: <fact_key> - <the venues and queries you actually searched>Use the run.json key as <fact_key> (revenue, gross_profit, employee_benefit_expense, headcount). For an unlisted entity the Phase 1 gate then passes and marks the run provisional: compile_report.py forces the report's confidence to the locale's provisional wording and prints a cover note naming what was missing. You still need revenue or headcount — without either there is no scale anchor, and no company-wide distribution may be produced at all. This is a label for honest uncertainty, never a licence to invent the missing number.
Continue searching until each critical output has at least one strong source and major estimates have a cross-check, or until no additional public source is likely to materially reduce uncertainty.
Read references/company_economics.md and write Chains 1 and 4 of references/reasoning_chains.md into analysis_notes.md. The payroll envelope (employee benefit expense − SBC − employer social contributions) is a hard ceiling every later bucket model must respect.
Collect and derive:
Build a profit_pool table. Do not assume revenue equals value creation; use gross profit / contribution / operating profit when available.
Read references/org_dependency_model.md.
Build role states using two layers:
Company-native layer
Latent comparable layer
For each major profit pool, trace:
profit pool -> critical process -> critical role -> likely org node
Score role dependency qualitatively (low, medium, high, extreme) with evidence. Never turn weak evidence into a fake precise score.
Read references/compensation_model.md.
For each function x native level x geography bucket, collect:
Normalize to annual pre-tax TC. Keep components separate:
cash_base, cash_bonus, commission, equity_annualized, other.
Prefer a distribution or range over a single average. When enough evidence exists, report p25/p50/p75/p90; otherwise report a low/central/high band.
Write Chains 2 and 3 (workforce decomposition, level-to-TC calibration) in analysis_notes.md first. Create buckets that jointly cover the workforce. At minimum segment by function and native level band; add geography or business unit when material. Anchor the pyramid with the equity-recipient count and grant cadence when disclosed.
Populate a JSON input using schemas/company_model.schema.json and run:
python scripts/estimate_population.py company_model.json --samples 50000
The estimator accepts either a direct p_exceed interval or a triangular tc distribution per bucket.
Report:
Read references/role_pay_bands.md.
For each critical role, construct three distinct bands:
Do not mechanically average them.
Use scripts/pay_band_diagnostic.py for a transparent intersection/gap calculation when useful.
Read references/career_graph.md.
From public professional histories, official promotion announcements, executive biographies, job postings, and recruiting materials, create transitions between normalized role states.
Classify each transition:
internal_promotion;internal_lateral;external_entry;manager_switch;exit.Record months in prior state when observable and evidence quality. Aggregate with:
python scripts/career_graph.py transitions.csv
Report observed path shares and median tenure only when sample size is adequate. Unless the true denominator is known, call them observed public-profile transition shares, not company-wide promotion probabilities.
Read references/governance_equity.md.
For public companies and late-stage private companies, collect:
Use equity grants as a strong signal of whom the company itself regards as strategically important, but distinguish accounting expense, grant-date fair value, and realized/mark-to-market employee value.
Run at least these identities and record each result in analysis_notes.md:
payroll envelope: headcount-weighted modelled TC ≈ (benefit expense − SBC)/(1 + employer social rate) + SBC, within ±10% (validate_bundle.py checks this). Use the disclosed employer social rate when the filing gives one — the registry prior ranges from ~1% (Denmark) to ~32% (Spain), and the wrong one silently breaks this identity;
when the envelope is not checkable (no disclosed benefit expense — normal for unlisted entities): build_model.py falls back to modelled TC total ÷ revenue and records it in run.json -> checks. That ratio is a plausibility bound, not an identity: above revenue it is impossible, above ~60% it is implausible for most sectors and needs a written justification in Chain 9. If neither payroll nor revenue exists, say plainly in the report that no affordability check was possible;
equity-recipient anchor: modelled population at/above the first equity-eligible level ≈ disclosed number of award holders;
grant cadence: annual person-grants disclosed vs modelled eligible population;
implied payroll from modeled compensation vs disclosed employee cash/benefit expense;
modeled high-earner count vs executive/equity-incentive recipient counts;
implied seniority mix vs public job/profile mix;
compensation ceiling vs gross profit and operating-profit economics;
promotion graph vs current hiring strategy (internal build vs external buy).
If the model implies an impossible payroll or seniority structure, revise the assumptions.
Populate report.json using assets/report_spec.json and schemas/report.schema.json (top-level key charter, not constitution; meta.language set), run python scripts/validate_bundle.py <dir>, then run:
python scripts/render_report.py report.json -o report.pdf
The renderer uses a structured JSON -> DOCX -> PDF pipeline and takes every structural label, number format, font and text direction from meta.language. Markdown must not be used as the final layout source. The PDF is the default artifact delivered to the user; report.json and the evidence bundle are retained for auditability.
Every key number must be tagged as observed, derived, or inferred. Always include a short “what would change this estimate most?” section. Present the report to the user in the run's language — the PDF being localized is not enough if you then summarise it in English.
Read references/evidence_scoring.md.
Default hierarchy:
A numeric company-wide distribution is allowed only when the analysis has:
Otherwise output a provisional map and a targeted list of missing evidence.
This skill is host-agnostic. The same folder works in both:
| Claude Code | Codex | |
|---|---|---|
| Install path | ~/.claude/skills/company-talent-economics/ (global) or .claude/skills/ (project) | ~/.codex/skills/company-talent-economics/ |
| Invocation | auto-triggered from the description, or /company-talent-economics <company> | $company-talent-economics <company> or auto |
| Web access | WebSearch, WebFetch tools | built-in web search (enable in config) |
| Shell | Bash tool | sandboxed shell; request network/file-write approval when prompted |
Installation is covered in the repository README.md (English) and README.zh-CN.md (中文): a Claude Code
plugin marketplace entry, install.sh for symlink/copy installs into both hosts, and a zip bundle for the
claude.ai Skills uploader. bash install.sh --check verifies Python deps, LibreOffice and the fonts for the
scripts you actually need.
Script paths in this file are relative to the skill root; resolve them with the directory that contains
SKILL.md (e.g. $SKILL_DIR/scripts/render_report.py), never with the current working directory.
Write all working files (report.json, evidence.jsonl, report.pdf, ...) into a per-run output directory
in the user's workspace (e.g. ./talent-economics/<company>/), not into the skill folder.
If LibreOffice is unavailable, run render_report.py --docx-only and tell the user the DOCX needs external
PDF conversion; do not fall back to Markdown-to-PDF.
python $SKILL/scripts/selftest.py drives a synthetic run through all ten gates, exercises the unlisted
provisional path, and renders every locale. Run it after changing any script.
scripts/init_run.py — create a run directory with all templates; resolves language, jurisdiction, currency and threshold.scripts/check_phase.py — phase gates 0–10 with imperative next-step instructions; the harness spine.scripts/search_plan.py — six-pass query ladder, venue-scoped and bilingual, driven by the jurisdiction registry.scripts/build_model.py — levels.json → model.json, headcount and payroll-envelope checks with a TC/revenue fallback, epistemic p_exceed.scripts/estimate_population.py — Monte Carlo high-compensation population estimator.scripts/pay_band_diagnostic.py — market/economic/internal band overlap diagnostic.scripts/career_graph.py — aggregate observed career transitions.scripts/compile_report.py — fills all numeric sections of report.json in the run's language; leaves TODO for prose; enforces the provisional label.scripts/validate_bundle.py — bundle completeness, claim-type vocabulary, terminology and the affordability check, all locale-aware.scripts/render_report.py — structured JSON → DOCX → PDF renderer; localized chrome, per-script fonts, RTL.scripts/selftest.py — end-to-end test of all ten gates, the provisional path and every locale.scripts/i18n.py — language detection, locale packs, jurisdiction registry, locale-aware formatting. CLI: detect, locales, jurisdictions.scripts/check_locales.py — validate locale packs and the jurisdiction registry; --new <tag> scaffolds a pack.locales/*.json — 12 chrome locale packs (en zh-CN zh-TW ja ko es fr de pt it ru ar).assets/jurisdictions.json — 49 jurisdictions: filing venues, local document names, registries, currency, threshold prior, employer social rate, and what each regime gets right or wrong.assets/search_terms.json — search vocabulary per language for search_plan.py.references/localization.md — how language and country resolution works, and how to add either.references/glossary.md — exact terminology and definitions; mandatory.references/reasoning_chains.md — the nine written-out reasoning chains with a worked example; mandatory before report.json.references/company_type_router.md — route research by legal/listing type.references/source_playbook.md — structured search sequence and query recipes.references/jurisdiction_playbooks.md — what each disclosure regime is unusually good at, and where it misleads.references/company_economics.md — profit-pool and affordability reconstruction.references/org_dependency_model.md — organization and role-dependency model.references/compensation_model.md — TC normalization and distribution estimation.references/role_pay_bands.md — market/economic/internal pay-band logic.references/career_graph.md — promotion and hiring transition methodology.references/governance_equity.md — equity incentives, dilution, and talent ownership.references/evidence_scoring.md — source/evidence confidence rules.assets/defaults.json — priors (pyramid shares, vesting years, dependency factors, tolerances).assets/report_spec.json — structured report model template.assets/report_layout.md — PDF layout requirements for the renderer.assets/analysis_notes_template.md, assets/CHECKLIST.md — fill-in reasoning template and delivery checklist.schemas/report.schema.json — report JSON validation schema.schemas/company_model.schema.json — population-estimator input schema.schemas/evidence.schema.json — evidence-ledger schema.agents/openai.yaml — Codex UI metadata for the skill list and invocation chip.requirements.txt — Python dependency (python-docx); every other script is standard library only.examples/demo_report.json and examples/demo_report.pdf — fictional renderer smoke-test fixtures.examples/xiaomi/ — complete real-company worked example (Xiaomi FY2025): model.json, report.json, evidence ledger, manifest, transitions, rendered PDF. Use it as the reference for expected depth and file layout.examples/fictional_robotics_company.json, examples/fictional_pay_bands.json, examples/fictional_transitions.csv — runnable estimator examples.© kelvinfkr, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 71 other files (scripts, references, assets) in skills/company-talent-economics of kelvinfkr/company_skill.
Open the folder on GitHubat commit c99f8b2
Company Talent Economics next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Company Talent Economics this skillkelvinfkr/company_skill | 241 | — | ~8.4k | Automated safety check: Pass | MIT | |
| Markdown Article FormatterJimLiu/baoyu-skills | 27k | 6 repos | ~3.5k | Automated safety check: Pass | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Obsidian MarkdownAtmosphere/atmosphere | 3.8k | 20 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| DOCXrvdbreemen/OTGW-firmware | 207 | 33 repos | ~4.3k | Automated safety check: Pass | Proprietary | |
| Word Document Reader and WriterHKUDS/DeepTutor | 41k | — | ~2.5k | Automated safety check: Pass | Apache-2.0 |
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Atmosphere/atmosphere
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax.
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
HKUDS/DeepTutor
Reads, creates and edits Word .docx files with python-docx, and drops to raw OOXML for tracked changes, comments and byte-exact edits.
wasp-lang/wasp
Crosspost Wasp blog articles (MDX) to DEV.to and Medium. An agent skill from wasp-lang/wasp.
kelvinfkr/company_skill
Estimate an employee, intern, contractor, or role group's 3/6/12-month involuntary job-loss risk from public company evidence and an adaptive candidate interview.
Categories
Reconstruct a company's compensation distribution, high-compensation population, promotion/hiring paths, and role-specific pay bands from public filings and other public data, and deliver a typeset…. Company Talent Economics is an agent skill from kelvinfkr/company_skill. Reconstruct a company's compensation distribution, high-compensation population, promotion/hiring paths, and role-specific pay bands from public filings and other public data, and deliver a typeset PDF report.
Company Talent Economics fits situations like: asked how much people at a company earn; how many employees exceed a total-compensation threshold; which roles are economically critical; how promotion works.
Run `npx skills add kelvinfkr/company_skill --skill company-talent-economics -a claude-code`. Or copy the skill folder (skills/company-talent-economics in kelvinfkr/company_skill) into .claude/skills/company-talent-economics in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kelvinfkr/company_skill --skill company-talent-economics -a codex`. Or copy the skill folder (skills/company-talent-economics in kelvinfkr/company_skill) into .agents/skills/company-talent-economics in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kelvinfkr/company_skill --skill company-talent-economics -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/company-talent-economics, .gemini/skills/company-talent-economics, .github/skills/company-talent-economics and .opencode/skills/company-talent-economics in your project.
Going by SKILL.md and its folder, Company Talent Economics needs the command-line tools its instructions call (python and bash). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Company Talent Economics is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8.4k tokens (SKILL.md is roughly 33k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 10k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Company Talent Economics: Markdown Article Formatter (JimLiu/baoyu-skills, 27k stars), Markitdown (ImCa0/just-laws, 781 stars), Obsidian Markdown (Atmosphere/atmosphere, 3.8k stars) and DOCX (rvdbreemen/OTGW-firmware, 207 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kelvinfkr (a GitHub user) maintains it in kelvinfkr/company_skill, which has 241 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on August 25, 2026.
Source: kelvinfkr/company_skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.