Przejdź do treści
Biblioteka skilli
Nauka i badania · Pisanie

proposal

/proposal

Generuje propozycję badawczą na podanie o doktorat lub magisterium na podstawie ogłoszenia, CV i oświadczenia, badając profesora i laboratorium oraz wskazując luki.

Repozytorium
vitruvius ↗
Licencja
MIT
Ostatnia zmiana repozytorium
17.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
12
Skrypty
11
Komentarze HTML
1
Adresy URL w SKILL.md
2
Przestarzałość

Brak sygnałów. Repozytorium zmienione 17.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 11 skryptów w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.
  • SKILL.md zawiera komentarze HTML (1). Nie widać ich w podglądzie Markdown, a model je czyta.

Skrypty: scripts/assemble-binder.mjs, scripts/document-extractor.mjs, scripts/extract-document.mjs, scripts/find-voice-sample.mjs, scripts/init-project.mjs, scripts/parse-cv.mjs, scripts/parse-posting.mjs, scripts/project-utils.mjs

Co robi i kiedy

Generuje propozycję badawczą na podanie o doktorat lub magisterium na podstawie ogłoszenia, CV i oświadczenia, badając profesora i laboratorium oraz wskazując luki.

Argumenty

/proposal [--posting <path>] [--cv <path>] [--statement <path>] [--sample <path>]
Oryginalny opis (EN)

Research Proposal Generator — an intended pipeline from position posting + CV + Personal Statement to a humanized research proposal for Ph.D./Masters applications. Local text/Markdown/JSON intake is executable; PDF extraction uses optional tooling and URL/image inputs require an explicitly recorded fetch or transcription before intake. The workflow researches professor/lab, identifies lab-specific gaps, and generates a targeted proposal with deep fit analysis. Use when the user wants a targeted proposal from a posting, CV, or statement. Wraps /gap-analysis, /evidence-ranking, and /verifier as

Jak działa

  1. Invocation
  2. Workflow (Execute in Order)
  3. Output Artifacts
  4. Non-Negotiable Boundaries (All Subagents)
  5. Scope and Boundaries
  6. What to Steal from Reference Systems
Sekcje z nagłówków SKILL.md, w oryginale · 326 linii, 2 111 słów
Podgląd SKILL.md
---
name: proposal
description: >
  Research Proposal Generator — an intended pipeline from position posting + CV
  + Personal Statement to a humanized research proposal for Ph.D./Masters
  applications. Local text/Markdown/JSON intake is executable; PDF extraction
  uses optional tooling and URL/image inputs require an explicitly recorded
  fetch or transcription before intake. The workflow researches professor/lab, identifies
  lab-specific gaps, and generates a targeted proposal with deep fit analysis.
  Use when the user wants a targeted proposal from a posting, CV, or statement.
  Wraps /gap-analysis, /evidence-ranking, and /verifier as isolated subagents.
argument-hint: "[--posting <path>] [--cv <path>] [--statement <path>] [--sample <path>]"
allowed-tools: Write Edit Bash Read
license: MIT
metadata:
  version: "0.1.12"

---
<!-- VITRUVIUS-COMPILED-SKILL:BEGIN v1 sha256=41af538c8fa01bd51c09ca41daafc4d56a1c41335d3df2313b555fb20d083ad5 -->

# Research Proposal Generator

The intended workflow generates a research proposal package for Ph.D./Masters applications. Local text/Markdown/JSON intake is executable; PDF extraction uses the optional `pdf-parse` dependency, while URL/image inputs require an explicitly recorded fetch or transcription before intake. The parser commands record raw intake and provenance; an isolated research step must verify and structure profile/posting fields before downstream work. The workflow orchestrates isolated subagents, verifies outputs, produces a humanized final proposal with an audit trail, and targets the specific lab/professor from the posting. Stop with a blocker when an execution check fails.

## Invocation

### CLI

```
/proposal --posting <path> --cv <path> [--statement <path>] [--sample <path>]
```

- **`--posting`**: Local text/Markdown/JSON or text-layer PDF path. Fetch URLs and transcribe images explicitly before intake; they are not deterministic parser inputs.
- **`--cv`**: Local text/Markdown/JSON or text-layer PDF path
- **`--statement`**: Path to personal statement (optional, used for voice matching)
- **`--sample`**: Path to separate writing sample (optional, used for voice matching)

The parser scripts write `projects/<slug>/` beneath the active working directory. Set `VITRUVIUS_PROJECT_ROOT` when the active project workspace is elsewhere. When a host copies only this skill, run the scripts from the copied skill directory or adapt the displayed checkout paths; the proposal runtime is self-contained.

### Desktop Apps (Claude Desktop, Cursor, Windsurf, etc.)

Attach files through the harness UI (drag-and-drop, file picker, or @file reference). The harness makes attached files available as paths. Then invoke:

```
/proposal --posting <attached-path> --cv <attached-path> [--statement <attached-path>]
```

The skill receives file paths in both cases — it does not matter whether the files came from CLI arguments or desktop attachments. The harness is responsible for making attached files accessible at readable paths.

**Examples:**
- **CLI**: `/proposal --posting ./posting.pdf --cv ./cv.pdf --statement ./statement.pdf`
- **Claude Desktop**: Attach `posting.pdf`, `cv.pdf`, `statement.pdf` → `/proposal --posting /tmp/claude-xyz/posting.pdf --cv /tmp/claude-xyz/cv.pdf`
- **Cursor**: `@posting.pdf @cv.pdf` → skill receives resolved paths

## Workflow (Execute in Order)

### Phase 0 — Intake & Context Engineering

**0a. Create Project Folder**
```bash
node skills/proposal/scripts/init-project.mjs <student-slug>
```

**0b. Parse Documents (STRICT Isolation via Artifact-Reading Subagent)**

> **Execution gate:** local text/Markdown/JSON paths are supported. PDF extraction uses optional `pdf-parse`; scanned/unsupported/image/URL inputs are blocked until explicitly transcribed/read. `parse-posting.mjs` and `parse-cv.mjs` intentionally produce raw intake (`structured: false`) and an append-only phase-0 provenance ledger. Stop and report `BLOCKED` until an isolated step verifies and writes the structured fields (`structured: true`); never treat raw intake as a complete profile or posting.

Dispatch `/skill:artifact-reading` as isolated subagent — **fresh context, receives ONLY:**
- Path to position posting (if `--posting` provided)
- Path to CV (if `--cv` provided)
- Path to personal statement (if `--statement` provided)
- Path to writing sample (if `--sample` provided)

**Does NOT receive:** any prior reasoning, target context, or other project files.

Artifact-reading subagent:
1. For each file, run `node <proposal-skill-root>/scripts/extract-document.mjs <path>` after the execution gate passes. In a repository checkout, the equivalent compatibility command is `node scripts/extract-document.mjs <path>`; the local wrapper is self-contained.
2. Extracts structured content (markdown, pages, method used)
3. If method is `vision`, deterministic proposal intake stops; a separate, explicit LLM read may transcribe the document, but that transcription must be saved as a new text artifact and provenance entry before re-running intake
4. Returns structured content with sections and provenance

All downstream phase artifacts (gap dossier/provenance, evidence table, verifier verdict, proposal draft, and proposal final) must include the current `RUN_INPUT_SHA256: <lineage_id>` from `run-manifest.json`; the binder rejects mixed-generation artifacts.

The deterministic parser commands are an intake boundary, not a field extractor:
- `node skills/proposal/scripts/parse-posting.mjs <slug> <local-path>`
- `node skills/proposal/scripts/parse-cv.mjs <slug> <local-path>`
They fail closed for empty, URL, image, or unsupported extraction paths, preserve blocked attempts, and never invent identity fields. Each raw artifact carries source/raw byte counts and SHA-256 digests plus an `unverified` marker. The isolated artifact-reading step must verify the digests against `phase-0-provenance.md`, enrich the fields, set `verification.status: verified`, then run `node skills/proposal/scripts/register-structured.mjs <slug>` before Phase 1. Registration records structured digests and a new lineage; changing intake archives downstream artifacts.

**Output saved by subagent (after raw intake and verification):**
- `posting.json` — structured position posting data (the deterministic parser initially writes `structured: false`; the subagent must set verified fields and `structured: true`):
  ```json
  {
    "status": "parsed",
    "structured": true,
    "professor": { "name": "...", "title": "...", "email": "..." },
    "university": "Georgia Tech",
    "department": "School of Building Construction",
    "lab": { "name": "...", "url": "..." },
    "position": { "type": "PhD", "funding": "...", "start": "Spring 2027" },
    "research": { "areas": ["..."], "keywords": ["..."], "description": "..." },
    "requirements": { "required": ["..."], "preferred": ["..."] },
    "contact": { "email": "...", "url": "..." },
    "deadline": "...",
    "raw_text": "..."
  }
  ```
- `profile.json` — structured CV data (`status: parsed`, `structured: true`; raw intake is not sufficient)
- `voice-sample.txt` — writing sample for humanizer

**0c. Voice Sample**
- `--sample` > `--statement` > default neutral voice
- Save to `voice-sample.txt`

**0c. Research Professor/Lab (NEW)**
```bash
node skills/proposal/scripts/research-professor.mjs <slug>
```
- Generates search plan in `professor-search-plan.txt`
- LLM executes web searches:
  - "[professor] [university] lab research"
  - "[professor] recent papers 2024 2025 2026"
  - "[lab name] projects"
  - Fetches lab website if found
- LLM saves structured research to `professor-research.json`:
  ```json
  {
    "status": "parsed",
    "structured": true,
    "input_lineage": "<run-manifest.lineage_id>",
    "professor": { "name": "...", "title": "...", "profile_url": "..." },
    "lab": { "name": "...", "url": "...", "description": "...", "members": [...] },
    "recent_papers": [{ "title": "...", "year": 2024, "doi": "...", "key_contribution": "..." }],
    "research_focus": ["..."],
    "ongoing_projects": ["..."],
    "sources_consulted": ["..."],
    "search_plan_sha256": "<sha256 of professor-search-plan.txt>",
    "provenance": "phase-0-provenance.md",
    "verification": { "status": "verified", "provenance": "phase-0-provenance.md" }
  }
  ```

**0d. Provenance**
Log all inputs, extraction methods, statuses, hashes, and research queries to `phase-0-provenance.md`. The parser appends each attempt; never replace a prior source record.

### Phase 1 — Gap Analysis (STRICT Isolation, Enhanced)

**Before dispatching:** LLM reads `posting.json` and `professor-research.json` only when they are marked `structured: true` and supported by provenance. If they are raw or blocked, stop with `BLOCKED`. Extracts:
- Research areas and keywords from posting
- Professor's recent papers and research focus from professor-research
- Lab's ongoing projects and techniques

**Dispatch `/gap-analysis` as isolated subagent** — **fresh context, receives ONLY:**
- Research goal/topic (extracted from posting/professor research)
- Discipline (inferred or asked)
- `--deep` flag
- Text summary of lab research context (extracted from files, not file paths)

**Does NOT receive:** file paths, student CV, personal statement, or any prior reasoning.

**Gap analysis produces:**
- **General gaps**: Field-level research gaps (as before)
- **Lab-specific gaps**: Gaps aligned with the lab's ongoing work
  - Areas where lab has active projects but unresolved questions
  - Techniques the lab uses but hasn't applied to new problems
  - Adjacent areas the lab could expand into

Outputs saved to `projects/<student-slug>/gap-analysis/`:
- `<slug>.md` — gap dossier (general + lab-specific)
- `<slug>.provenance.md` — provenance sidecar

**Non-negotiable boundaries:**
- NEVER fabricate a DOI. Verify via https://doi.org/<doi> before writing.
- NEVER invent a statistic. Quote sources as-is.
- NEVER present inferred claims as validated. Mark `[inferred]`.
- NEVER fabricate lab details. If not found in research, mark "not found".

### Phase 2 — Evidence Ranking (STRICT Isolation)

**Dispatch `/evidence-ranking` — receives ONLY:**
- Path to gap dossier file
- Path to gap provenance file

Output: `evidence-ranking/<slug>.md`

### Phase 3 — Verification (STRICT Isolation)

**Dispatch `/verifier` — receives ONLY:**
- Research question (string)
- Path to evidence items file
- Path to claimed conclusion file

Output: `verifier/<slug>-verdict.md`

**If PARTIAL or BLOCKED:** Fix named issues, re-verify until PASS.

### Phase 4 — Proposal Writing (STRICT Isolation, Enhanced)

**File availability:**
- **Required:** `profile.json` (from CV), gap dossier, evidence table
- **Optional:** `posting.json` (from `--posting`), `professor-research.json` (from web research)

**Dispatch proposal writer — receives ONLY:**
- Path to student profile (profile.json) — REQUIRED
- Path to verified gap dossier — REQUIRED
- Path to evidence table — REQUIRED
- Path to posting.json (if exists) — OPTIONAL
- Path to professor-research.json (if exists) — OPTIONAL

**If optional files missing:** Proposal adapts — general field proposal without lab-specific fit section. Still functional, less targeted.

**Proposal structure (adapts to available files):**

```markdown
# Research Proposal: [Specific Topic]
**Target:** [Professor Name or "Engineering Research"], [University or "Target Institution"]
**Position:** [PhD/MS] starting [Date or "Fall 2027"]

## Motivation
[Field-level motivation, grounded in student's CV experience]

## Research Gaps
### General Gaps
[2-3 field-level gaps with citations]

### Lab-Specific Opportunities (IF posting.json + professor-research.json available)
[1-2 gaps aligned with professor's recent work, referencing specific papers]

## Proposed Research
[3-5 research questions mapping to gaps]

## Fit with [Professor]'s Lab (IF posting.json + professor-research.json available)
### Research Alignment
[How student's background connects to lab's trajectory]

### Specific Contributions
[Projects student could contribute to, based on lab's ongoing work]

### Skills Match
[How student's skills (from CV) match position requirements]

## References
[Key citations]
```

**If posting.json is missing:** skip "Lab-Specific Opportunities" and "Fit with Lab" sections, label the result as a field-level draft, and do not call it a complete proposal.

Save to `proposal-draft.md`

### Phase 5 — Humanization (STRICT Isolation)

**Dispatch a fresh isolated subagent (no skill exists for this — the lead
performs the rewrite itself only if subagent dispatch is unavailable) with a
plain-language tone pass prompt that receives ONLY:**
- Path to proposal draft
- Path to voice sample (if available)

**Scope:** Final proposal only. Leave gap analysis, evidence table, verifier as technical docs.

Save to `proposal-final.md`

### Phase 6 — Binder Assembly

Create layered binder with all appendices:

```
# Research Proposal: [Topic]
**Student:** [Name]
**Target:** [Professor], [University]
**Position:** [PhD/MS] starting [Date]

## Executive Summary
[Humanized proposal]

## Appendices
### Appendix A: Gap Analysis
### Appendix B: Evidence Ranking
### Appendix C: Verdict
### Appendix D: Researcher Profile
### Appendix E: Position Posting (posting.json)
### Appendix F: Professor Research (professor-research.json)
### Appendix G: Provenance
```

The `verification` object is a provenance assertion, not authentication; a host with stronger identity controls should bind it to the approver. Binder assembly is fail-closed: it requires non-empty phase artifacts, digest-bound structured profile/posting fields, a recorded phase-0 source ledger, an explicit voice sample or neutral baseline, the complete verifier output contract with exactly one `PASS` verdict, and no blocked retry sidecar. Intake or research changes archive downstream artifacts. Save to `binder.md` + `binder.provenance.md` only after all gates pass.

## Output Artifacts

```
projects/<student-slug>/
├── profile.json                    # Raw intake, then verified structured CV data
├── voice-sample.txt               # Writing sample (or explicit neutral baseline)
├── posting.json                   # Raw intake, then verified structured posting data
├── posting-raw.txt                # Raw text from posting
├── cv-raw.txt                     # Raw text from CV
├── phase-0-provenance.md          # Append-only intake/extraction ledger
├── run-manifest.json              # Current intake generation/lineage
├── *.blocked                      # Failed retry sidecars, when present
├── professor-research.json        # Professor/lab web research
├── professor-search-plan.txt      # Search queries used
├── gap-analysis/
│   ├── <slug>.md                  # Gap dossier (general + lab-specific)
│   └── <slug>.provenance.md       # Provenance sidecar
├── evidence-ranking/
│   └── <slug>.md                  # Scored evidence table
├── verifier/
│   └── <slug>-verdict.md          # Verifier verdict
├── proposal-draft.md              # Raw proposal (pre-humanization)
├── proposal-final.md              # Humanized proposal
├── binder.md                      # Layered binder (final output)
└── binder.provenance.md           # Full audit trail
```

## Non-Negotiable Boundaries (All Subagents)

1. **NEVER fabricate a DOI.** Verify via https://doi.org/<doi> before writing.
2. **NEVER invent a statistic.** Quote sources as-is.
3. **NEVER present inferred claims as validated.** Mark `[inferred]`.
4. **NEVER let the verifier see the author's reasoning.**
5. **NEVER skip the humanization step.**
6. **NEVER let subagents share verdict channels.**
7. **NEVER fabricate professor details.** If not found, mark "not found".
8. **NEVER claim to read unfetched papers.** Mark paywalled sources `blocked`.
9. **NEVER invent lab projects.** Only state what research found.
10. **ALWAYS distinguish** posting claims vs. web research findings.

## Scope and Boundaries

- This skill generates research proposals for academic applications.
- **research-only, not for final submission without student review.** The student MUST review, fact-check, and personalize the output before submission.
- The agent does not guarantee admission. When all required phases pass, it produces a structured, humanized proposal with provenance; the current parser/document path must be checked before treating the package as complete.
- Fail-closed: if any phase fails, stop and report the blocker.
- **Not for final engineering sign-off.** This is an academic application tool, not an engineering design tool.

## What to Steal from Reference Systems

| Pattern | Source | How /proposal Uses It |
|---------|--------|----------------------|
| Subagent isolation | src-03 | Each phase runs in fresh context, hands off via files |
| Non-negotiable boundaries | src-07 | Hard "NEVER" rules enforced at every phase |
| Voice matching | isolated tone-pass subagent | Matches student's own writing style |
| Receipts reconciliation | src-03 | Every search/query logged in provenance |
| Ledger-first audit | src-05 | binder.provenance.md records every action |
| Claim-vs-diff verification | src-03 | Verifier maps every claim to source line |
Pliki w paczce (12)
  • SKILL.md 17 KB
  • scripts/assemble-binder.mjs 19 KB
  • scripts/document-extractor.mjs 7 KB
  • scripts/extract-document.mjs 1 KB
  • scripts/find-voice-sample.mjs 3 KB
  • scripts/init-project.mjs 3 KB
  • scripts/parse-cv.mjs 2 KB
  • scripts/parse-posting.mjs 2 KB
  • scripts/project-utils.mjs 8 KB
  • scripts/register-structured.mjs 6 KB
  • scripts/research-professor.mjs 4 KB
  • scripts/verifier-parser.mjs 3 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · adeerkhan/vitruvius100MIT
octavehq/lfgtm100MIT
bienwithcode/sdlaic100MIT

Migawka bazy z 28.10.2026 · wersja paczki 50870343b004 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100research-proposal-generator
    Generuje projekt propozycji badawczej na podstawie literatury: hipotezę, weryfikację mechanizmu i budżet.
  • 90thesis-proposal
    Przygotowuje propozycję pracy magisterskiej na podstawie notatek i pytania badawczego, z problemem, luką, metodą, harmonogramem i ryzykami.
  • 100proposal-import
    Importuje istniejącą propozycję (zwykle PDF z Worda, LaTeX lub Overleaf) do standardowego formatu jednego pliku: wyciąga tekst i bibliografię, usuwa dane osobowe i oznacza braki.
  • 90Gap Analysis
    Wyszukuje luki badawcze w zbiorze prac i proponuje nowe kierunki, na podstawie analizy metod i ograniczeń.
  • 100proposal-write
    Pisze propozycję pracy dyplomowej od zera lub ją dopracowuje na podstawie wytycznych i literatury, np. przekształca punkty w prozę, wdraża uwagi z recenzji i przenosi otwarte zadania do pliku notatek.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.