Agent skill

Phd Application Planner

by SihengTao in SihengTao/phd-application-planner

Research and compare PhD or doctoral programs and fitting advisors, then build an evidence-aware marimo dashboard and optional Excel workbook.

MITAuto-check passedDocuments & Office

Install Phd Application Planner

skills CLI
$ npx skills add SihengTao/phd-application-planner --skill phd-application-planner -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install SihengTao/phd-application-planner phd-application-planner --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
phd-application-planner
GitHub stars
119
Token cost
~3.5k tokens
SKILL.md length
1,178 words
Files
23 (incl. assets)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Research and compare PhD or doctoral programs and fitting advisors, then build an evidence-aware marimo dashboard and optional Excel workbook.

  • Works in 7 steps: Select or resume a run directory → Complete progressive intake (required… → Research into _wf_result.json → …
  • Program shortlists
  • SKILL.md covers Runtime paths, Step 0 — Select or resume a…, Step 1 — Complete progressive… and Step 2 — Research into…, plus 6 more sections
  • Runs Python and JavaScript scripts from its folder; calls python3

What it does

Phd Application Planner is an agent skill from SihengTao/phd-application-planner. Research and compare PhD or doctoral programs and fitting advisors, then build an evidence-aware marimo dashboard and optional Excel workbook. Use for program shortlists, advisor or committee fit, funding and application rules, humanities/social-science or lab-based doctoral planning, international-student and placement questions, campus-anchored Chinese restaurant research, claim-level source checking, and application ranking. Triggers include "find PhD programs", "grad school shortlist", "PhD advisor finder"…

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 25 other files, including assets (for example `README.md`, `agents/openai.yaml` and `assets/build_data.py`).

It sits in Documents & Office, covering Jupyter notebooks and Excel spreadsheets. It works with Microsoft Excel and marimo. The repository describes itself as: Interactively find PhD programs & fitting advisors, research them in parallel, and build an interactive marimo decision dashboard. The licence is MIT.

When your agent uses it

  • Program shortlists
  • Funding and application rules
  • Humanities/social-science
  • Lab-based doctoral planning

Example prompts

  • “find PhD programs”
  • “grad school shortlist”
  • “PhD advisor finder”
  • “/phd-application-planner”

Requirements

  • Python 3
  • Node.js

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Select or resume a run directory
  2. Complete progressive intake (required gate)
  3. Research into _wf_result.json
  4. Run the local data checker
  5. Build dashboard data
  6. Launch marimo
  7. Excel export

What it can do on your machine

Read from SKILL.md and the folder at commit 981c52f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships script files (Python and JavaScript, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Phd Application Planner loads about 3.5k tokens when it runs. Until then it costs about 178 tokens; SKILL.md has 1,178 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~178
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

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.

Safety

Auto-check passed

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from SihengTao/phd-application-planner at commit 981c52f, republished under its MIT licence (© SihengTao). 1,178 words, ~3,507 tokens.

Download SKILL.mdSave it as .claude/skills/phd-application-planner/SKILL.md (or your agent's skills folder). This skill also uses 22 other files; get the full folder from GitHub.
name
phd-application-planner
description
Research and compare PhD or doctoral programs and fitting advisors, then build an evidence-aware marimo dashboard and optional Excel workbook. Use for program shortlists, advisor or committee fit, funding and application rules, humanities/social-science or lab-based doctoral planning, international-student and placement questions, campus-anchored Chinese restaurant research, claim-level source checking, and application ranking. Triggers include "find PhD programs", "grad school shortlist", "PhD advisor finder", "compare stipends", "writing sample or language requirements", "nearby Chinese food", and "PhD application dashboard". Always completes progressive intake before research.

PhD Application Planner

Turn a confirmed user intake into a researched, source-traceable PhD application dataset, interactive marimo dashboard, and optional Excel export. This skill is one executable specification for both Claude Code and Codex. It hard-codes no applicant identity.

Pipeline:

intake gate → config → parallel research → independent check → build → launch → optional Excel export

Read these references before executing:

  • reference/intake.md: first-time and returning-user intake;
  • reference/schema.md: canonical v2 data contract;
  • reference/source_policy.md: source precedence, claims, conflicts, food evidence, and privacy;
  • reference/honesty.md: non-fabrication and verification rules.

Resolve the installed skill directory first. Commands below use <skill> for that directory and <out> for the run directory; do not assume the caller's current directory is the skill root.

Runtime paths

  • Claude Code: use structured questions and the bundled Workflow tool when available.
  • Codex: use its input tool when available, otherwise ask concise plain-language questions. If Workflow is unavailable, use web research plus independent subagents/parallel calls and write the same v2 JSON.

The research contract and quality gate are identical in both runtimes.

Step 0 — Select or resume a run directory

Create or select <out>. Generated research files live there:

_config.json, _wf_result.json, _quality_report.json, _research_data.json, _rows.json, phd_explorer.py

The dashboard may also create private runtime state:

_pi_notes.json, _pi_hidden.json

Never overwrite note/hidden-state files during a refresh. If _config.json already exists, this is a returning-user run.

Step 1 — Complete progressive intake (required gate)

Follow reference/intake.md.

  • First-time user: conduct 5–8 adaptive rounds. Cover field, discipline_mode, geography, funding/application constraints, advisor fit, discipline-specific requirements/outcomes, campus food, and ranking/export preferences.
  • Returning user: show the prior summary and ask only what changed. Ask follow-ups only for changed, missing, inconsistent, or new-cycle values.
  • Confirm the final summary with the user.

Set intake_complete: false while collecting or changing answers. Do not discover programs, launch research, call the Workflow, or reuse old results as current until the user confirms and <out>/_config.json exists with intake_complete: true.

Required config core:

json
{
  "schema_version": "2.0",
  "intake_version": 2,
  "intake_complete": true,
  "field": "History",
  "subfields": ["modern East Asia"],
  "discipline_mode": "faculty_based",
  "advisor_label": "faculty/advisor",
  "application_cycle": "2027 admission",
  "stipend_floor": 35000,
  "currency": "USD",
  "regions": [
    {
      "key": "US",
      "label": "United States",
      "short": "US",
      "color": "#0F4D92",
      "order": 0
    }
  ],
  "region_order": {"US": 0},
  "interest_areas": {"Archives": ["archive", "manuscript"]},
  "food_preferences": {
    "enabled": true,
    "priority_cuisines": ["Sichuan", "Cantonese", "Hunan"],
    "max_distance": "30 minutes",
    "travel_modes": ["walk", "transit"],
    "budget": "any",
    "spice": "very spicy",
    "dietary_needs": []
  },
  "export": {"excel": true, "include_private_notes": false}
}

discipline_mode is lab_based, faculty_based, or hybrid. Generate interest buckets and ranking dimensions for the chosen discipline; do not apply biomedical labels or h-index/lab-size priors to humanities and social sciences.

Step 2 — Research into _wf_result.json

Claude Code Workflow path

Run <skill>/assets/research_workflow.js using the Workflow tool. Pass the confirmed config values, including the discipline mode and food preferences:

text
Workflow({
  scriptPath: "<skill>/assets/research_workflow.js",
  args: {
    field, subfields, discipline_mode, regions, stipend_floor, currency,
    n_programs, n_pis_per_program, pi_preferences, rising_star_bias,
    application_constraints, outcome_preferences, food_preferences,
    notes, seed_programs
  }
})

Save the result object to <out>/_wf_result.json.

Codex or no-Workflow path

Fan out independent tasks when available:

  1. program discovery by region, retaining discovery failures;
  2. per-program facts/admissions/funding;
  3. eligible advisors and fit evidence;
  4. outcomes, placement, and international-student evidence;
  5. campus anchor and nearby food, when enabled;
  6. a checker that retrieves evidence independently before reading/comparing first-pass values.

Deduplicate by normalized institutional identity and assign stable IDs. Do not use array order, program title alone, or faculty name alone as an identity key.

Write the canonical structure from reference/schema.md:

json
{
  "schema_version": "2.0",
  "field": "<field>",
  "discipline_mode": "faculty_based",
  "regions": [{"key": "US", "label": "United States"}],
  "floor": 35000,
  "currency": "USD",
  "programs": [
    {
      "program_id": "program_<stable-id>",
      "region": "US",
      "school": "...",
      "program": "...",
      "city": "...",
      "researchStatus": "partial",
      "facts": {"sources": [], "evidenceChecks": [], "errors": []},
      "pis": {
        "pis": [],
        "sources": [],
        "evidenceChecks": [],
        "errors": []
      },
      "out": {"sources": [], "evidenceChecks": [], "errors": []},
      "nearbyFood": {
        "enabled": false,
        "researchStatus": "not_requested",
        "campusAnchor": {
          "name": "...",
          "address": "...",
          "sourceUrl": "https://..."
        },
        "restaurants": [],
        "sources": [],
        "evidenceChecks": [],
        "errors": []
      },
      "verification": {
        "status": "unresolved",
        "checkedAt": "2026-07-27T18:45:00-04:00",
        "initial": {},
        "independent": {},
        "final": {},
        "conflict": false,
        "resolution": "...",
        "sources": [],
        "evidenceChecks": [],
        "claimChecks": [],
        "errors": []
      },
      "provenance": {
        "applicationCycle": "2027 admission",
        "sources": [],
        "evidenceChecks": [],
        "checks": [],
        "conflicts": [],
        "errors": [],
        "researchStatus": "partial"
      }
    }
  ],
  "workflowStatus": "partial",
  "errors": []
}

The Workflow also emits schemaVersion and disciplineMode compatibility aliases and the program-level faculty, outcomes, and restaurants display aliases. Preserve them if present. For collection output, facts, pis, out, and nearbyFood use evidenceChecks with supported | unresolved | conflict and one observed value. Only final independent reconciliation uses verification.claimChecks and provenance.checks, with confirmed | corrected | conflict | unresolved plus initialValue, independentValue, and finalValue.

Required research behavior
  • Use current, applicable official sources for funding, deadlines, application rules, program requirements, advisor eligibility, and placement when available.
  • Map each important source to exact claimPaths; a loose URL list is insufficient.
  • Record application policy only as multiple_allowed | single_only | unknown | conflict.
  • Preserve source retrievalStatus as retrieved | partial | blocked | not_found | stale | error. Record finer causes such as timeout or parse_error in errors[].code; do not silently drop a program because one subtask failed.
  • First-pass section collection records go in evidenceChecks and use supported, unresolved, or conflict; they do not imply independent verification.
  • The independent checker records final reconciliation in verification.claimChecks and provenance.checks as confirmed, corrected, conflict, or unresolved. Corrections retain the first-pass value and new evidence; conflicts retain both claims.
  • Never label a claim or program verified merely because a source exists or a checker ran.

For faculty_based or hybrid work, research advising eligibility, committee structure, writing sample, language/field requirements, methods training, teaching load, time to degree, and placement. Advisor fit should include intellectual/method/language/archive coverage and selected work as relevant. Lab metrics remain optional and must not become silent ranking defaults.

Food research is opt-in. If food_preferences is missing, treat it as disabled and emit nearbyFood.enabled: false plus researchStatus: "not_requested". When enabled, anchor to the relevant campus/department address and prioritize Sichuan, Cantonese, and Hunan restaurants. Set nearbyFood.researchStatus to complete, partial, or failed according to the actual search outcome. Keep official location/menu evidence separate from subjective review summaries and volatile opening, price, spice, and route claims. Follow reference/source_policy.md.

Show full SKILL.md (420 more words)Show less

Step 3 — Run the local data checker

The independent evidence pass is part of Step 2. Now run the local structural/provenance checker before building:

bash
python3 "<skill>/assets/check_data.py" "<out>/_wf_result.json" \
  --output "<out>/_quality_report.json"

Optional modes:

bash
python3 "<skill>/assets/check_data.py" "<out>/_wf_result.json" \
  --output "<out>/_quality_report.json" --online

python3 "<skill>/assets/check_data.py" "<out>/_wf_result.json" \
  --output "<out>/_quality_report.json" --online --strict

Default checking validates structure, IDs, enums, types, claim/source links, critical-claim coverage, and conflicts. --online additionally probes source reachability. --strict makes warnings fail the gate.

Fix data errors and rerun the checker. Unresolved evidence may remain explicitly unresolved, but it must not be presented as verified. Preserve _quality_report.json beside the dashboard so the user can inspect errors, warnings, sources, and verification status.

Step 4 — Build dashboard data

bash
python3 "<skill>/assets/build_data.py" "<out>/_wf_result.json" "<out>"

This writes <out>/_research_data.json and <out>/_rows.json, preserving stable program/advisor IDs, v2 provenance, nearby-food records, and unknown/conflict states. The builder always reruns the shared quality gate and rewrites <out>/_quality_report.json; errors block the build. Add --strict to block on warnings too and --online to include URL reachability checks:

bash
python3 "<skill>/assets/build_data.py" "<out>/_wf_result.json" "<out>" \
  --strict --online

Step 5 — Launch marimo

Copy the dashboard next to its data and launch it:

bash
cp "<skill>/assets/dashboard_template.py" "<out>/phd_explorer.py"
python3 "<skill>/assets/launch.py" "<out>/phd_explorer.py"

Use the same Python environment that has the runtime dependencies. The launcher copies required export helpers when present, waits for marimo readiness, and reports startup errors from <out>/_marimo_run.log.

The dashboard loads data from its own directory, displays claim sources and checker issues, adapts terminology/fields to the discipline mode, shows campus-anchored Chinese-food candidates, uses stable IDs for notes/hiding, and offers Excel export.

Step 6 — Excel export

The dashboard export panel can export all programs or the current filtered view. Private advisor notes are excluded by default; include them only after the user explicitly opts in and acknowledges that the workbook contains private content.

The command-line exporter exports the complete built dataset:

bash
python3 "<skill>/assets/excel_export.py" "<out>" \
  "<out>/phd_application_plan.xlsx"

Include private notes only after explicit user opt-in:

bash
python3 "<skill>/assets/excel_export.py" "<out>" \
  "<out>/phd_application_plan_with_notes.xlsx" --include-notes

Every workbook must:

  • include Metadata, Programs, Advisors, Restaurants, Sources, Quality, and Priority sheets when data exists, with requirements/outcomes retained as explicit columns;
  • retain stable IDs so records can be joined safely;
  • include provenance/verification status without turning unresolved into verified;
  • escape cells beginning with =, +, -, or @ to prevent formula injection;
  • exclude _pi_notes.json unless notes were explicitly requested.

Delivery checklist

Before claiming completion:

  1. intake was confirmed and _config.json.intake_complete is true;
  2. _wf_result.json follows the v2 schema and preserves failures/conflicts;
  3. checker ran and _quality_report.json is present;
  4. no unconditional "verified" statement appears in the dashboard or handoff;
  5. build completed and stable IDs survived into derived data;
  6. dashboard reached a ready URL;
  7. Excel behavior and note privacy were explained if export was requested;
  8. generated research/config/export files contain no applicant identity unless the user explicitly provided and requested that content.

Dependencies

Install the libraries needed by the dashboard and Excel export:

bash
python3 -m pip install -r "<skill>/requirements.txt"

© SihengTao, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 22 other files (assets) in the repository root of SihengTao/phd-application-planner.

  • SKILL.md
  • .gitignore
  • LICENSE
  • README.md
  • agents/openai.yaml
  • assets/build_data.py
  • assets/check_data.py
  • assets/dashboard_template.py
  • assets/data_quality.py
  • assets/excel_export.py
  • assets/launch.py
  • assets/research_workflow.js
  • reference/honesty.md
  • reference/intake.md
  • reference/schema.md
  • reference/source_policy.md
  • requirements.txt
  • tests
  • … and 5 more

Open the folder on GitHubat commit 981c52f

Compare with similar skills

Phd Application Planner 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.

Phd Application Planner compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Phd Application Planner this skillSihengTao/phd-application-planner119—~3.5kAutomated safety check: PassMIT
Markdown Exporterbowenliang123/markdown-exporter2721 repos~5.3kAutomated safety check: PassApache-2.0
Excel Spreadsheet Creation and Editinganthropics/skills180k4 repos~2.1kAutomated safety check: PassProprietary
XLSX Spreadsheet ToolkitXiaomiMiMo/MiMo-Code14k—~2.9kAutomated safety check: PassApache-2.0
Submit Mentors To CommunityJunieXD/AutoEmailSender150—~471Automated safety check: PassGPL-3.0
Crawl Mentors To XLSXJunieXD/AutoEmailSender150—~429Automated safety check: PassGPL-3.0

Similar skills

  • Markdown Exporter

    bowenliang123/markdown-exporter

    Convert Markdown text to DOCX, PPTX, XLSX, PDF, PNG, SVG, HTML, IPYNB, MD, CSV, JSON, JSONL, XML files, and extract code blocks in Markdown to Python, Bash,JS and etc files.

    272 GitHub starsUsed in 1 repo~5.3k tokens
    Documents & OfficeAuto-check passed
  • Official

    Creates, edits and analyzes spreadsheets (.xlsx, .xlsm, .csv, .tsv) with openpyxl and pandas, writing live formulas and recalculating to confirm zero formula errors.

    180k GitHub starsUsed in 4 repos~2.1k tokens
    Documents & OfficeAuto-check passed
  • XLSX Spreadsheet Toolkit

    XiaomiMiMo/MiMo-Code

    Builds, edits, cleans, recalculates and reads Excel workbooks and CSV files with openpyxl and pandas, plus LibreOffice for recalculation and PDF export.

    14k GitHub stars~2.9k tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Submit Mentors To Community

    JunieXD/AutoEmailSender

    校验、准备并通过外部 Git/gh 创建社区导师投稿 draft PR,支持查重与恢复。Use when a maintainer asks to submit, contribute, or batch-submit verified mentor/professor XLSX data to the community mentor library.

    150 GitHub stars~471 tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Crawl Mentors To XLSX

    JunieXD/AutoEmailSender

    从学校、学院、系所或实验室官网抓取公开导师/教师信息,核对个人主页与证据来源,并生成经过自动校验、可直接导入 Auto Email Sender 的 XLSX。Use when a user provides faculty, professor, mentor, supervisor, university, department, or lab directory URLs and…

    150 GitHub stars~429 tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Paginated Report

    data-goblin/power-bi-agentic-development

    Author, validate, publish, and test Power BI paginated reports in the RDL format.

    1k GitHub stars~3.5k tokensUpdated 3 days ago
    Documents & OfficeAuto-check passed

Questions about Phd Application Planner

What does Phd Application Planner do?

Research and compare PhD or doctoral programs and fitting advisors, then build an evidence-aware marimo dashboard and optional Excel workbook. Phd Application Planner is an agent skill from SihengTao/phd-application-planner. Research and compare PhD or doctoral programs and fitting advisors, then build an evidence-aware marimo dashboard and optional Excel workbook.

When should I use Phd Application Planner?

Phd Application Planner fits situations like: program shortlists; funding and application rules; humanities/social-science; lab-based doctoral planning.

How do I install Phd Application Planner in Claude Code?

Run `npx skills add SihengTao/phd-application-planner --skill phd-application-planner -a claude-code`. Or copy the skill folder (the SihengTao/phd-application-planner repository) into .claude/skills/phd-application-planner in your project. Claude Code loads it when a task matches its description.

How do I install Phd Application Planner in Codex?

Run `npx skills add SihengTao/phd-application-planner --skill phd-application-planner -a codex`. Or copy the skill folder (the SihengTao/phd-application-planner repository) into .agents/skills/phd-application-planner in your project. Codex loads it when a task matches its description.

Can I use Phd Application Planner in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SihengTao/phd-application-planner --skill phd-application-planner -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/phd-application-planner, .gemini/skills/phd-application-planner, .github/skills/phd-application-planner and .opencode/skills/phd-application-planner in your project.

What does Phd Application Planner need to run?

Going by SKILL.md and its folder, Phd Application Planner needs Python and JavaScript for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3; Node.js.

Does Phd Application Planner access the network?

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.

Is Phd Application Planner safe to install?

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. Review the folder before installing.

What licence does Phd Application Planner use?

Phd Application Planner is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Phd Application Planner use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Phd Application Planner?

Skills that share tags, products or a category with Phd Application Planner: Markdown Exporter (bowenliang123/markdown-exporter, 272 stars), Excel Spreadsheet Creation and Editing (anthropics/skills, 180k stars), XLSX Spreadsheet Toolkit (XiaomiMiMo/MiMo-Code, 14k stars) and Submit Mentors To Community (JunieXD/AutoEmailSender, 150 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Phd Application Planner?

SihengTao (a GitHub user) maintains it in SihengTao/phd-application-planner, which has 119 GitHub stars. The repository was last updated on July 28, 2026.

Source: SihengTao/phd-application-planner on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.