{"id":50983513,"url":"https://github.com/bguthrie/prospero","last_synced_at":"2026-06-19T16:35:10.169Z","repository":{"id":354750312,"uuid":"1224639911","full_name":"bguthrie/prospero","owner":"bguthrie","description":"A dialectical pipeline for blog-post writing: interrogate, critique, author, revise.","archived":false,"fork":false,"pushed_at":"2026-04-29T21:16:06.000Z","size":46,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-29T23:23:54.557Z","etag":null,"topics":["claude-code","skill"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bguthrie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-29T13:32:40.000Z","updated_at":"2026-04-29T22:24:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bguthrie/prospero","commit_stats":null,"previous_names":["bguthrie/prospero"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bguthrie/prospero","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bguthrie%2Fprospero","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bguthrie%2Fprospero/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bguthrie%2Fprospero/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bguthrie%2Fprospero/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bguthrie","download_url":"https://codeload.github.com/bguthrie/prospero/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bguthrie%2Fprospero/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34539888,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","skill"],"created_at":"2026-06-19T16:35:09.661Z","updated_at":"2026-06-19T16:35:10.161Z","avatar_url":"https://github.com/bguthrie.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Prospero\n\nA dialectical pipeline for blog-post writing: interrogate, critique, author, revise.\n\n## What is Prospero?\n\nProspero is a Claude Code plugin that turns a rough topic into a published blog post through four explicit phases. Each phase has one job, produces one artifact, and hands off. The point is to externalize the parts of writing a blog post that are boring to do in your head: naming the counterargument, checking prior art, calibrating voice, and critiquing your own draft.\n\nProspero is deliberately agnostic about where your blog lives. Voice, audience, and project layout are project-local files you own. A small preset system handles the layout differences between Hugo, Jekyll, Ghost, and plain markdown. Nothing Prospero knows about your writing is hardcoded into the plugin.\n\n## Pipeline overview\n\n1. **Interrogate** — Socratic questioning extracts the argumentative spine of the post: thesis, antithesis, synthesis, entry point, section-level claims and objections. Produces `drafts/\u003cslug\u003e/outline.md` and initializes `drafts/\u003cslug\u003e/research.md` with sources the questioning turned up.\n2. **Critique** — An independent oppositional reader challenges the outline. Reads the existing `research.md` first and only runs new web searches for gaps it identifies; flags weak evidence and missing counterarguments. Can also run on a draft. Appends its findings to `research.md`.\n3. **Author** — The primary research phase. Reads the outline, existing research, voice guide, audience, and sample posts; grounds the draft's claims against what is already on file and fills specific gaps. Writes the post at the resolved path (e.g. `content/post/\u003cslug\u003e/index.md`).\n4. **Revise** — Collaborative line-level and structural feedback on a draft you have already edited. Can re-invoke the critic in draft mode; running `/critique` on the same draft multiple times across revise rounds is the expected path, not an exception.\n\nEach phase is its own slash command; a router skill (`prospero`) picks the right phase when you describe intent without naming one.\n\n## Installation\n\nInstall as a Claude Code plugin from the marketplace:\n\n```\n/plugin marketplace add bguthrie/prospero\n/plugin install prospero@prospero\n```\n\nOr install from this repository directly if you are developing against it.\n\n## Quickstart\n\n1. Install the plugin (above).\n2. In your blog's project directory, start a post:\n   ```\n   /interrogate \"why slugs beat dates for blog URLs\"\n   ```\n3. On first run in an unconfigured project, Prospero will invoke `/init` to scaffold `.prospero/config.toml`, `.prospero/voice.md`, and `.prospero/audience.md`. Fill in the voice and audience files with your own rules and reader description, then answer the interrogator's Socratic questions.\n\nThe outline lands at `drafts/\u003cslug\u003e/outline.md`, alongside a `research.md` that the pipeline accumulates across phases. From there: `/critique` the outline, `/author` the draft, then iterate with `/critique` (in draft mode) and `/revise` — typically several passes before publishing, not a single linear step.\n\nA worked example lives at [`examples/sample-post/`](examples/sample-post/). It shows the artifacts a single post produces at each stage. A bare Hugo project before and after running `/init` is at [`tests/fixtures/hugo/`](tests/fixtures/hugo/).\n\n## Configuration\n\nProspero reads three project-local files from `.prospero/`:\n\n- **`config.toml`** — names the active preset and any explicit key overrides.\n- **`voice.md`** — your voice guide. Read verbatim by `/author` and `/revise`. You fill this in; Prospero never rewrites it.\n- **`audience.md`** — reader description plus a Research Sources catalog. Read by `/interrogate`, `/critique`, and `/author` to calibrate framing and ground research.\n\nPresets live in the plugin at `presets/\u003cname\u003e.toml`. They define `posts_dir`, `post_path_pattern`, `drafts_dir`, `sample_posts_dir`, and `frontmatter_template`:\n\n- **`hugo`** — reference implementation; actively maintained.\n- **`plain`** — default for non-CMS projects. Plain markdown with minimal frontmatter.\n- **`jekyll`** — skeleton; needs refinement from a Jekyll user.\n- **`ghost`** — skeleton; needs refinement from a Ghost user.\n\nTo override a single preset value, set it directly in `.prospero/config.toml`:\n\n```toml\npreset = \"hugo\"\ndrafts_dir = \"_drafts\"\n```\n\n## Piece types\n\nProspero ships three piece-type rubrics in `templates/types/`:\n\n- **`argued-essay`** — a thesis that must survive challenge. The critic runs the full rubric.\n- **`opinion-polemic`** — the value is in saying it well. Critic review is lighter, focused on \"is this interesting?\"\n- **`explainer`** — teaching something. Critic focuses on clarity, accuracy, and whether the reader actually learns what was promised.\n\nThe interrogator asks which type you are writing as its first question; the choice propagates through the pipeline. New piece types are a good contribution target — they are small, local, and composable.\n\n## Status\n\nv0.2, extracted from the tooling behind [brianguthrie.com](https://brianguthrie.com). The Hugo preset is what the author uses and is the best-tested path. The `plain` preset is adequate for most non-CMS projects. The `jekyll` and `ghost` presets are scaffolds that need someone who uses those platforms to shake them out.\n\nStill on the roadmap: refinement of the Jekyll and Ghost presets, additional piece types, and better handling of multi-post series.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\n## Contributing\n\nPull requests welcome, particularly for:\n\n- Refining the Jekyll and Ghost presets against real projects.\n- New piece-type rubrics under `templates/types/`.\n- Fixes and clarifications to the skill prompts.\n\nThe core phase skills are the primary thing Prospero owns; changes there need a clear rationale tied to an actual workflow problem. Preset and piece-type contributions are lower-risk and can move faster.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbguthrie%2Fprospero","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbguthrie%2Fprospero","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbguthrie%2Fprospero/lists"}