aperivue/manage-project
Research project management for medical manuscripts. Scaffold project structure, track writing progress across phases, maintain project memory files, generate submission checklists and backwards timelines. Commands: init, status, sync-memory, checklist, timeline.
npx skills add https://github.com/Aperivue/medsci-skills --skill manage-project
Scaffold new research projects, track manuscript writing progress, maintain lightweight project memory, generate pre-submission checklists, and create backwards submission timelines. Integrates with all other writing skills and the project-manager agent.
/manage-project init {name} --type {type} --journal {journal} [--ssot] [--zotero-collection NAME]Create a complete project scaffold for a new research paper.
Parameters:
{name} -- Project identifier (e.g., nnunet-skull-fracture, rfa-meta-analysis)--type -- Paper type: original | meta | case | animal | technical | ai_validation | letter--journal -- Target journal: RYAI | AJR | Radiology | European_Radiology | KJR | INSI | AJNR | generic--ssot -- Emit SSOT.yaml (schema v1) from templates/SSOT.yaml.template instead of legacy project.yaml. Required for Phase 1C auto-enforce (the PostToolUse verify-refs hook blocks instead of warns). New projects should pass --ssot; legacy in-flight projects stay on project.yaml until /manage-project migrate-ssot is run.--zotero-collection NAME -- Optional. Create a Zotero collection via pyzotero and populate library_id + collection_key in the contract. Requires ZOTERO_API_KEY + ZOTERO_LIBRARY_ID (optionally ZOTERO_LIBRARY_TYPE, default user). Graceful degrade: with pyzotero missing or credentials absent, the contract is scaffolded with library_id: null / collection_key: null and a WARN is printed.SSOT template substitutions: {{PROJECT_ID}} → {name}; {{PROJECT_TYPE}} → the SSOT
project_type enum mapped from --type (original → original_research, meta → meta_analysis,
case → case_report, ai_validation → ai_validation, else other). Without
--zotero-collection, library_id / collection_key stay null until the owner links an
existing collection.
Implementation: backed by scripts/init_project.py. Invoke it directly when running outside
the skill harness (from the medsci-skills repo root):
python3 scripts/init_project.py \
--name {name} --type {type} --journal {journal} [--ssot] \
--project-root {target_dir}
The helper writes the contract file (SSOT.yaml with --ssot, else legacy project.yaml), the
directory scaffold, the minimal stubs scripts/validate_project_contract.py requires
(manuscript/index.qmd, artifact_manifest.json, qc/status.json), the memory-file templates,
and project_state.json. qc/migration_complete is NOT written by init — that marker belongs
to the migrate pipeline.
Do not hand-build the scaffold. The script is the source of truth for the tree and for
project_state.json; a hand-built one drifts from what the contract validator expects.
Read on demand:
| File | Read it when | Cost if read blindly |
|---|---|---|
| references/init_scaffold.md | you need to know where a scaffolded file lands, or what a project_state.json field means | ~1,400 tokens describing output the script already produces for you |
/manage-project migrate-ssot [--no-mark-complete]Thin wrapper over scripts/migrate_project_to_ssot.py that converts a legacy project.yaml project into SSOT.yaml form and, by default, touches qc/migration_complete so Phase 1C auto mode switches from warn to enforce.
python3 scripts/migrate_project_to_ssot.py \
--project-root . --write --mark-complete
--write --mark-complete (enforce-ready).--no-mark-complete flag form: run with --write only. Use when the project still has open QC failures — enforcement is deferred until the migration is validated.qc/migration_complete unless the generated SSOT.yaml passes validate_project_contract.py AND contract_mode=ssot. Do not touch qc/migration_complete manually.Re-run after resolving failures; the script is idempotent.
/manage-project statusReport current progress. Reads project_state.json, scans existing files, and checks whether key project memory files are present and aligned.
Output format:
## Project Status: {name}
Journal: {journal} | Type: {type} | Created: {date}
Target submission: {date or "not set"}
### Phase Progress
[check] Phase 0: Project Init (complete)
[check] Phase 1: Outline (complete)
[check] Phase 2: Tables & Figures (complete)
[work] Phase 3: Methods (IN PROGRESS)
[wait] Phase 4: Results (pending)
[wait] Phase 5: Discussion (pending)
[wait] Phase 6: Introduction & Abstract (pending)
[wait] Phase 7: Polish (pending)
### Word Counts
Abstract: 0 / 250 words
Introduction: 0 / 600 words
Methods: 847 / 1000 words 85%
Results: 0 / 900 words
Discussion: 0 / 800 words
Total: 847 / 3500 words (journal limit)
### Quality Gates
Critic score (Methods): 87/100 PASS
Citations verified: 12/12
Reporting guideline: pending
### Project Memory
PROJECT.md: present
STATUS.md: stale (last updated 12 days ago)
CLAIMS.md: missing
DATA_DICTIONARY.md: present
ANALYSIS_PLAN.md: missing
REVIEW_LOG.md: n/a (not in revision)
### Next Steps
1. Complete Methods draft (150 words remaining)
2. Run /analyze-stats for Table 1 and diagnostic accuracy
3. Begin Results (Phase 4)
/manage-project sync-memoryAudit and refresh project memory files so other agents can work with less ambiguity.
What it does:
PROJECT.md, STATUS.md, CLAIMS.md, DATA_DICTIONARY.md, ANALYSIS_PLAN.md, REVIEW_LOG.mdproject_state.json with the current manuscript phaseSuggested use cases:
project-manager/manage-project checklistGenerate a pre-submission checklist covering all quality dimensions.
Output: submission/pre_submission_checklist.md
Read and output the pre-submission checklist from
${CLAUDE_SKILL_DIR}/references/pre_submission_checklist.md.
/manage-project timeline {submission_date}Generate a backwards timeline from submission date.
Example: /manage-project timeline 2026-05-01
Output:
## Backwards Timeline to Submission: 2026-05-01
Week -8 (2026-03-06): Phase 0-2 complete (scaffold, outline, tables)
Week -7 (2026-03-13): Methods draft -> critic pass
Week -6 (2026-03-20): Results draft -> critic pass + /analyze-stats complete
Week -5 (2026-03-27): Discussion draft -> critic pass
Week -4 (2026-04-03): Introduction + Abstract -> critic pass
Week -3 (2026-04-10): AI pattern removal + /check-reporting (reporting guideline)
Week -2 (2026-04-17): /self-review + co-author review
Week -1 (2026-04-24): Final revisions + figures at 300 DPI + /lit verification
SUBMISSION (2026-05-01): Upload to journal portal
Critical path: Statistics must be complete by Week -6.
Run /analyze-stats as soon as data is available.
# PROJECT
- Title:
- Type:
- Primary question:
- Target journal/venue:
- Lead folder:
- Collaborators:
- Last updated:
# STATUS
- Current stage:
- Current blocker:
- Next actions:
1.
2.
3.
- Last updated:
# CLAIMS
| Claim | Supporting result | Source table/figure | Citation status |
|------|-------------------|---------------------|-----------------|
| ... | ... | ... | ... |
# DATA DICTIONARY
| Variable | Definition | Timing | Notes |
|----------|------------|--------|------|
| ... | ... | ... | ... |
# ANALYSIS PLAN
- Primary endpoint:
- Secondary endpoints:
- Main comparator:
- Statistical methods:
- Validation strategy:
- Sensitivity analyses:
# REVIEW LOG
| Reviewer comment | Planned action | Status | Location updated |
|------------------|----------------|--------|------------------|
| ... | ... | ... | ... |
When called from /manage-project init, automatically:
write-paper/references/journal_profiles/{JOURNAL}.mdwrite-paper/references/paper_types/{TYPE}.mdcheck-reporting/references/checklists/After /manage-project checklist, recommend calling:
/self-review for manuscript quality gate/search-lit to verify all citations/write-paper Phase 7)Phase numbers:
Phase status values: pending | in_progress | complete | blocked
Take aperivue/manage-project from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.