{"_id":"@codename_inc/spectre","_rev":"11-5e6b571cf8990a7341422248da4cb208","name":"@codename_inc/spectre","dist-tags":{"latest":"5.3.3"},"versions":{"3.7.0":{"name":"@codename_inc/spectre","version":"3.7.0","_id":"@codename_inc/spectre@3.7.0","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"416bbcb90255730e8444ecd5afa3543744aef8b3","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-3.7.0.tgz","fileCount":64,"integrity":"sha512-78J3RFhhH4s/5iMMS3CoBsR2Zqhx4ZkE20slqHm2HOSKllZrAqVrX2wdhDYoX1y2K+nsJCz1dRoGEDsAvOj8wg==","signatures":[{"sig":"MEYCIQCuYhA6zAJalPqPxYjGxg0MF2ZyZQpACtxl2l6Xo0fi5QIhAOZCiP5/yRonU6CuHUnnR0aTLVhGEV/+lOJFXLcZ/Un8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448794},"type":"module","gitHead":"8e187b37d29266c497855cc70124373d19787429","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_3.7.0_1774934847026_0.417100571136938","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@codename_inc/spectre","version":"4.0.0","_id":"@codename_inc/spectre@4.0.0","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"56a86812d18a65dba6348690afb63842bd231ae0","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-4.0.0.tgz","fileCount":107,"integrity":"sha512-ceJBAJ91jEciSKmXzidtBGT0AbuiDak7eLxO3A+gupcD6HI8c33z4/nIXLCD6+xf/n6Vee6d4s3+YkYzFJMnqA==","signatures":[{"sig":"MEQCIH/nsxv14mERLRNxLPcbbN0WcZ6uCKQHDNAN8mlFKQlrAiATrpDgCT7X3iPsJXgZfp4CJWQ2thTDjF/8aHqBa7eFYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":750552},"type":"module","gitHead":"2b7861e0af26cef2132ac235af674d45a180e6e9","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_4.0.0_1778618789699_0.24081795030348685","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@codename_inc/spectre","version":"5.0.0","_id":"@codename_inc/spectre@5.0.0","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"a649564ea72f87fc02f7e1a38c5cfaae81b39604","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.0.0.tgz","fileCount":109,"integrity":"sha512-zhktCyxNJXfntmKLPdIfWqFhPcq6ZKFt/ACOEg5xliswGX7NfCOdgQzsye2ZplHhD1E10M67UmGWIrXMze+AJw==","signatures":[{"sig":"MEUCIG9azP52D8KBJjhphY6Lm2UlKyxQkyf3cUssXbQC0KOoAiEAlD21X4CedSvx8AhPrKr3kCcp5ySHcgGfJyiGDlueS8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":799819},"type":"module","gitHead":"d012e617cb341dbe719047ebe3bdb4cb4b018aef","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.0.0_1778800486575_0.28444913438773356","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@codename_inc/spectre","version":"5.1.0","_id":"@codename_inc/spectre@5.1.0","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"b62e047476f85be06ca5bb6f35b35210cb5807a0","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.1.0.tgz","fileCount":109,"integrity":"sha512-b+8yluVmBQYL4NjZzMYukekrwwBp8n/iUGa7IsTq/mx29SL3vyzulCgG7D08/Zo+/1JtvyZBtgAZb5TLSOt4QA==","signatures":[{"sig":"MEUCIFJ0a+lknUE/81As87E4yMAHJ8fBEzcBKEuNtB3T6Ee5AiEAs/lH68OzcHtLF57XQM545r4CwY3myMwl9ppS8GCf9XQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844152},"type":"module","gitHead":"455fe4fd334d89b758b021bbe0b4cd54e1d61fc2","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.1.0_1778801717355_0.03261320850456162","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"@codename_inc/spectre","version":"5.2.0","_id":"@codename_inc/spectre@5.2.0","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"b106ce1c1ebaa70ecc552a2a88c95eeebc2b4c2b","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.2.0.tgz","fileCount":109,"integrity":"sha512-wDeN243UAG/aeeRk6MXHNKi0fkBvwskrwCk+Sex8dtO4TCIMg7mpXSxbK0evN6bMcdovQ6FTRU2mBoGo2mpvHA==","signatures":[{"sig":"MEUCIFLThSmqq18rhvQpMuBmzFcgGDV7WWJLvsDzRCoeOBnvAiEA1iBQYcPPmtTDAv4HTcRqfmc5Atrnn+QlHmzImNHYQgg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852913},"type":"module","gitHead":"2eaac7fe76aacd44554b591eed48825fecdc77a6","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.2.0_1778865698402_0.7688299537989267","host":"s3://npm-registry-packages-npm-production"}},"5.2.1":{"name":"@codename_inc/spectre","version":"5.2.1","_id":"@codename_inc/spectre@5.2.1","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"7f98dfd7342d9765ba660036562710e6228e5ca5","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.2.1.tgz","fileCount":109,"integrity":"sha512-l3UlMnb6W877byY8X898hozBB6YkvjYOHmCSGtPCGBEIC6O0eJUQ/LNks1PhM1oK5PG8N8yBleewm7DahElKRg==","signatures":[{"sig":"MEUCIQDvCH208f4lfcGt6gyCSIjWN/dMZ53W/ka85dt3TLC3wgIgdIgGHOc5wmUwvOsyXXx8Qx5SGAgp1WW1czqtfCNXt+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":856004},"type":"module","gitHead":"5267c084cbcd6dcbba88519fe51c949d17f21772","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.2.1_1779401865673_0.8020300377766811","host":"s3://npm-registry-packages-npm-production"}},"5.2.2":{"name":"@codename_inc/spectre","version":"5.2.2","_id":"@codename_inc/spectre@5.2.2","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"59c650b5bc5859aaea93a29e8286b83c50e3f9c8","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.2.2.tgz","fileCount":109,"integrity":"sha512-HFn24LrdRj/CiwpY9mOCF4IM3XhEfFnvzwpZ98LBEcxkHcH962gC8TK5WBQfPGCDYhCjepygQ9eeTY2wDoavqA==","signatures":[{"sig":"MEYCIQD8L3PpXQ2UVJtB2MKygPV/ykCz6WWJLmHYI0XjSaWveAIhAOCFe3JZ7Pk86Mmilkr9hu17bP0vxKyWwqasYBkI70+c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":875954},"type":"module","gitHead":"99a8426d348431d2264c6e984be1468a1b761a34","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.2.2_1779645125275_0.001943148559261143","host":"s3://npm-registry-packages-npm-production"}},"5.3.0":{"name":"@codename_inc/spectre","version":"5.3.0","_id":"@codename_inc/spectre@5.3.0","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"4f3f85ba5574201e71982cae15cd4406a9de1c46","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.3.0.tgz","fileCount":109,"integrity":"sha512-Q733fYdyXAsQMKDF4oYupXc7RmTogCiO9p1sZcbWSeL+QqLu0UPL9Oz2dbKH/NMei5Bt48dFCQSGTM1hWfDFpQ==","signatures":[{"sig":"MEUCIEY8KaT4X5CghilyAYXLz6LHx+vsvXOV3cmkbcNL93DMAiEAkMrRKs/qnF+R34WArxKU5tpZgcqe9UmBb0QOCe+kygg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":881340},"type":"module","gitHead":"a85f61828ffc87e7cf1fa563e29d650cc578c385","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.3.0_1779646123189_0.6675186978464169","host":"s3://npm-registry-packages-npm-production"}},"5.3.1":{"name":"@codename_inc/spectre","version":"5.3.1","_id":"@codename_inc/spectre@5.3.1","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"138335ccadb63b0503bbd052b59c65741dedd23b","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.3.1.tgz","fileCount":109,"integrity":"sha512-lD9djTMG97/zferirGhapB5IbalRWzn/Gwrjmi2lZ1mSkxBfQEFvlbmhzC7BMzdAHpKq8/H0MUvdG3y3XjNxcQ==","signatures":[{"sig":"MEQCIGCLeWT/9Oa1n0bEcawAUPH7TquNHLayZTq7vrVCRBXvAiA5i0Tb8BfYAx7OIFnJHzJ8h9y63P8raOs04ZZTuuQboQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":881502},"type":"module","gitHead":"5e99dc2b0960fc7e4f1dcd6d0e9d6ae1319f265e","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.3.1_1779714583930_0.7246167962453021","host":"s3://npm-registry-packages-npm-production"}},"5.3.2":{"name":"@codename_inc/spectre","version":"5.3.2","_id":"@codename_inc/spectre@5.3.2","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"bin":{"spectre":"bin/spectre.js"},"dist":{"shasum":"66a61a45a988da428f6fc87db724a0a6dae5d384","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.3.2.tgz","fileCount":109,"integrity":"sha512-6eVZ+q728wFH4THJzcZS6jTKxj5NT93DpianJWWbEmD1foHpBzDblDDcYh5YneIz4CUNp1QhWUxX3xywMMbYFA==","signatures":[{"sig":"MEUCIQCnzaPbd3P+npTjAy+XNZ7d5lxb5yXX+P6Mke7RSfmWOgIgZmDhqAapVHZyYPOyXKI4mKGoVIbqgOK6Yk5TjOwA8Zw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":881784},"type":"module","gitHead":"b764f6b5272af9791fc42f16231766d2a6fe886c","scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js","sync-codex":"node scripts/sync-codex.cjs"},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"_npmVersion":"11.8.0","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectre_5.3.2_1779988918691_0.3479604339121689","host":"s3://npm-registry-packages-npm-production"}},"5.3.3":{"name":"@codename_inc/spectre","version":"5.3.3","type":"module","bin":{"spectre":"bin/spectre.js"},"scripts":{"test":"node --test src/**/*.test.js plugins/spectre/hooks/scripts/test_*.mjs scripts/test_sync-codex.cjs","sync-codex":"node scripts/sync-codex.cjs","tokens":"node scripts/count-tokens.js","release":"node scripts/release.js"},"dependencies":{"@anthropic-ai/tokenizer":"^0.0.4"},"gitHead":"b9b1e68fa89831923a446591920ed3dcc851339e","_id":"@codename_inc/spectre@5.3.3","description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-TgFuJfN8VvKoGez3cmTKjCZPYB3MEkMMiHcWDYoFIxbWNw16mBNjmQItjPh8gVhsCsoPHn1r/mvG0UhWawFupA==","shasum":"c54ded547136ae5bad67a2ce77ed9da443c4d090","tarball":"https://registry.npmjs.org/@codename_inc/spectre/-/spectre-5.3.3.tgz","fileCount":113,"unpackedSize":915055,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAupeMsir4YaWcWVW1Awpx1dn21HZmcEqGbOY+ElCkpJAiAiYNcnyPUAnwQNvhG6qmHOgRgqKw/gW0uCjmgvkuXQLg=="}]},"_npmUser":{"name":"joenandez","email":"joe@bycodename.com"},"directories":{},"maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spectre_5.3.3_1783963351585_0.6260904639285572"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-31T05:27:26.938Z","modified":"2026-07-13T17:22:31.951Z","3.7.0":"2026-03-31T05:27:27.162Z","4.0.0":"2026-05-12T20:46:29.884Z","5.0.0":"2026-05-14T23:14:46.816Z","5.1.0":"2026-05-14T23:35:17.573Z","5.2.0":"2026-05-15T17:21:38.603Z","5.2.1":"2026-05-21T22:17:45.857Z","5.2.2":"2026-05-24T17:52:05.448Z","5.3.0":"2026-05-24T18:08:43.387Z","5.3.1":"2026-05-25T13:09:44.076Z","5.3.2":"2026-05-28T17:21:58.833Z","5.3.3":"2026-07-13T17:22:31.811Z"},"description":"**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate","maintainers":[{"name":"joenandez","email":"joe@bycodename.com"}],"readme":"# SPECTRE: A Workflow for Product Builders\n\n**S**cope → **P**lan → **E**xecute → **C**lean → **T**est → **R**ebase → **E**valuate\n\nSPECTRE is a slash command based workflow for Claude Code designed to help you do ONE THING more, faster, and with higher quality.\n\n**🚀 Ship Product Features**\n\nSPECTRE's workflow covers the complete software development lifecycle - from scoping a feature, finalizing user flows, writing the technical design, generating tasks, executing the tasks, code review, validating the work, cleaning up and testing the work, and finally generating documentation as Skills your agent auto-loads when relevant.\n\nIt has been tested on brand new codebases and codebases with hundreds of thousands of lines of code. Its been tested building websites, react native apps, native desktop apps, and personal software.\n\n**SPECTRE helps you get higher quality and more consistent results from your coding agent, while they work autonomously for much longer, so 10-100x'ing your typical output feels *easy* and more importantly, *repeatable.***\n\n![SPECTRE hero](./assets/images/spectre-hero.png)\n\n## ⚡ Quick Start\n\n### Within Claude Code\n\n```bash\n# Add marketplace and install\n/plugin marketplace add Codename-Inc/spectre\n/plugin install spectre@codename\n```\n\nThen start building:\n\n```plaintext\n/spectre:scope\n```\n\nThat's it. You just start with 1 command to build features.\n\n### Within Codex\n\n```bash\nnpx @codename_inc/spectre install codex\n```\n\nWhen prompted, choose `project` to install into the current repo's `.codex`, or `user` to install into `~/.codex`.\n\nIf you choose `project`, run `codex` from that repo.\n\nIf you choose `user`, restart or open your normal Codex session.\n\nThen run a Spectre command such as:\n\n```plaintext\nscope\n```\n\nCurrent Codex behavior:\n\n- `user` scope installs Spectre workflow skills, runtime, agents, hooks, and shared skills under `~/.codex`\n- `project` scope installs the same Codex home structure inside `./.codex`\n- project installs create `.spectre/manifest.json` and project-local Codex config\n- session continuity uses Codex's official SessionStart hook for the visible status line and keeps the latest handoff in a managed `AGENTS.override.md` block\n- learned project skills still live under `.agents/skills/` and are synced into Codex config\n\nCapability matrix: [`docs/codex-capability-matrix.md`](./docs/codex-capability-matrix.md)\nSession continuity deep dive: [`docs/codex-sessionstart-memory.md`](./docs/codex-sessionstart-memory.md)\n\n![SPECTRE scope command](./assets/images/spectre-scope.png)\n\n## 🔁 How It Works\n\n- run one of the kickoff prompts in Claude Code - `/spectre:scope` is the main command for building new features, but also `/spectre:kickoff` for high ambiguity new features (includes web research), `/spectre:research` for codebase research \"how might we build …” style Qs, or `/spectre:ux` to define user flows, components, and layout for a new feature.\n\n- follow the prompts/instructions to create the related canonical document and Claude Code will suggest the next step in the SPECTRE workflow automatically (e.g., going from `scope` to `plan` to `tasks` and so on)\n\n- turn off auto-compact in Claude Code settings (`/config`) and run `/spectre:handoff` when the context window is getting full, then run `/clear` to start the next session. (`/spectre:forget` when you are switching gears)\n\n- SPECTRE saves canonical docs to a `docs/tasks/{topic}/specs` directory, and status updates from `/spectre:handoff` to `docs/tasks/{topic}/session_logs` directory. We recommend keeping this directory checked into git to be able to reference docs in the future.\n\n- thats it. scope features, plan features, build features, clean up/test features, document features, learn from features, repeat.\n\n## 🎯 Core SPECTRE Principles\n\n- Great Inputs → Great Outputs\n- Ambiguity is Death\n- One Workflow, Every Feature, Any Size, Any Codebase\n- Obvious &gt; Clever\n\n## 👻 SPECTRE Purpose\n\nAI coding is changing product development, but why is it that Claude Code can still go off the rails? Why is it that some developers claim AI has 100x'd their output, while others still complain about the quality of the code it generates?\n\nLet me introduce you to a very simple concept that you need to drill into your head. With coding agents:\n\n> ### **💀 AMBIGUITY IS DEATH.**\n\nWhen the scope, ux, and plan are ambiguous, you must rely on the LLM to fill in the blanks. And while sometimes you can get lucky - especially for smaller features - for any *real* technology or product work, ambiguity is how you end up with spaghetti code, conflicts, and AI slop.\n\nLLMs need specificity. And typically, providing the right level of specificity is a lot of work. Just think about the most detailed spec or technical design you’ve ever written. Takes days and sometimes weeks.\n\nBUT --- you can use LLMs to make it EASY to provide that specificity. And that is exactly what SPECTRE does.\n\n### ✅ Workflows = Easy Button\n\nPrompt based workflows that generate canonical docs that you and your Agents are aligned on are how you get the best, highest quality, and most consistent results from AI Coding Agents.\n\nThey provide the necessary context, detail, and structure for the agent to ask the right questions, investigate the right details, and generate the right requirements, plans, tasks, code, tests, and more.\n\nThe better your prompt based workflows, the lower the ambiguity, the more AI can take on, the longer AI can work autonomously, the more easily you can multi-task, and suddenly you are 100x'ing your output.\n\n## 📄 Canonical Docs\n\nAs a former PM I've lived the value of [Canonical Docs](https://naomi.com/canonical-everything-c85441a84e70) (shout out Naomi Gleit). The reasons they work for Humans are the same reasons they work with AI Agents (see 💀 Ambiguity is Death)\n\nIn SPECTRE, the **structured workflows** generate some combination of the following canonical docs stored in `docs/tasks/{topic/feature}/specs`\n\n- `scope.md` - what are we building and importantly what are we NOT building\n- `ux.md` - the core user flows and components/layouts/interactions\n- `plan.md` - high level technical design and phasing\n- `tasks.md `- specific parent & sub-tasks to execute\n- `code_review.md` - prioritized code review feedback\n- `gaps.md` - task list of gaps identified from validation\n- `.claude/skills/{feature_name}/skill.md` - a skill for agents to auto-reference the work\n\nNot all are required. Sometimes I have scope.md and then use Claude Code's plan mode. Sometimes I have a ux.md and a tasks.md. The key thing to remember is that docs are the context in context engineering.\n\n### 💧 So.... Waterfall?\n\nYeah basically Rapid Waterfall.\n\nSpecificity up front forces clarity, reduces ambiguity, and leads to better 1st pass results.\n\nTHEN -- you can iterate on the feature set, ux, architecture, etc. at lightning speed. AI coding agents are 10x better at working around *working* existing code. It's why they are so good at refactors. Because they are working with a working established baseline.\n\n**Workflows make it easier and faster to get to working code.**\n\nFrom there, you can iterate and adapt before you ship.\n\n## 📖 Background & Philosophy\n\n## About\n\nSPECTRE is the result of over 12 months of daily Claude Code use.\n\nThese are the *actual* prompts I use and iterate upon non stop every day to build products.\n\nWith SPECTRE, I built a React Native based AI Agent + GPS Rangefinder for Golfers (New June (in closed Alpha)) and a 250k line Tauri/Rust/React desktop application called Subspace (in open Beta - https://www.subspace.build).\n\n## 💡 Why\n\nI created SPECTRE because I wanted:\n\n- a repeatable daily driver workflow that works on brand new projects, and large existing codebases.\n\n- a single workflow that works on both small & big features without being overwhelmed with process\n\n- a workflow that delivers robust engineering plans when needed, or a concise set of tasks if not\n\n- hands on planning but hands off execution\n\n- higher quality INPUT with LESS WORK so i can ensure the outputs are more aligned with my vision\n\n- a workflow that lets Agents learn my codebase, features, patterns, bugs, so I don't have to remember everything\n\n- ***stupid. simple. memory.*** agent sessions are aware of the ongoing thread of work (/spectre:handoff)\n\n### My Workflow Iteration Process\n\nI improve these prompts daily, and I didn't just prompt Claude Code to generate these prompts. I iterated over many months, adjusting the prompts based on both the user experience of using them, and the quality of results that I got.\n\nFor example:\n\n- I iterated on /spectre:scope until I felt like the types of questions actually help me get clear on what I'm building, without asking questions that it could easily get from codebase research\n- I iterated on the /spectre:execute workflow until it successfully delivered large tasks in a single context window using subagents that deliver completion reports to handoff to the next subagents, use TDD effectively, and autonomously adapt the tasks based on what was discovered DURING development instead of blindly\n- I iterated on the /spectre:clean and /spectre:test workflows until it felt automatic that we were sticking to our linting rules, every new feature was well tested/covered, the commits were grouped logically with the appropriate amount of detail.\n- I iterated on the /spectre:evaluate learning workflow until 1) the agent automatically reached for the skills generated at the start of every conversation, 2) captured the *right* details and insights, and 3) proactively updated relevant skills as we make changes and learn more.\n- I iterated on the /spectre:handoff workflow until the status update had the appropriate detail/context, and worked perfectly if I'm working across MANY sessions or just one.\n\nSPECTRE made products like New June and Subspace possible, and it is making it possible for me, an ex-Meta, ex-Amazon Technical Product Manager to build, ship, and iterate on products 100x the complexity of anything I've ever built in the past.\n\n## 🔄 The SPECTRE Workflow\n\nIf you start with /scope, your agent will guide you through the rest of the steps automatically.\n\n| Phase | Command | What It Does |\n| --- | --- | --- |\n| **S**cope | `/spectre:scope` | Define requirements, constraints, success criteria |\n| **P**lan | `/spectre:plan` | Research codebase, create implementation plan |\n| **E**xecute | `/spectre:execute` | Parallel implementation with wave-based delivery |\n| **C**lean | `/spectre:clean` | Remove dead code, lint, format |\n| **T**est | `/spectre:test` | Risk-aware test coverage |\n| **R**ebase | `/spectre:rebase` | Safe merge preparation with conflict handling |\n| **E**valuate | `/spectre:evaluate` | Architecture review + knowledge capture |\n\nEach command ends with \"Next Steps\" suggestions, so you always know what prompt to run next — you don't have to remember what the prompts are, which is one thing that kills me about many other Spec Driven Development workflows.\n\nYou can use *any* of the commands in any sequence you want - they are good standalone too. More on my typical daily usage below.\n\n## 🧠 SPECTRE Session Memory\n\nSPECTRE maintains and accumulates context across sessions when you use the /spectre:handoff command. To get the most from SPECTRE's Session Memory, we recommend that you:\n\n1. turn off auto-compact in Claude Code /config settings, and\n\n2. run /spectre:handoff liberally when you are switching gears or the context window is getting north of 160k tokens.\n\n### How It Works\n\nWhen you run /spectre:handoff, a status report will get generated for that session, and automatically loaded into your context window for the next session. You'll see a nice summary of the status when you run /clear.\n\nIf you already had previous sessions, a subagent (@spectre:sync) will review the last 3 status updates and merge into a single continuous session memory.\n\nVoila -- trailing 3 session memory snapshots.\n\nIf you want to start fresh — /spectre:forget archives the session_logs.\n\n```plaintext\n/spectre:handoff   # Save progress before session ends\n/spectre:forget    # Clear memory for fresh start\n```\n\n## 🧬 SPECTRE Evaluate\n\nThe more I used SPECTRE and the faster I could build, the more frequently I found myself wanting to reference past work. Debugging sessions, a new architectural pattern, or how a feature works/was built.\n\nSPECTRE Evaluate combines **architecture review** with **knowledge capture** — reviewing what you built and learning from it in one step.\n\n### How It Works\n\n`/spectre:evaluate` runs two things in parallel:\n\n1. **Architecture review** — dispatches an Opus 4.6 subagent in the background to produce a principal-level architecture review of your completed work\n2. **Learn** — captures durable project knowledge (patterns, gotchas, decisions) into re-usable skills that **auto-load in future sessions**\n\n### The Hook + Skill Loop\n\nWhat is great about SPECTRE's learning system, is that Claude Code automatically loads skills that are relevant. We do this with a 'coercion' technique I borrowed from Jesse Vincent's great Superpowers skill.\n\n1. **SessionStart hook** — every time you start a conversation, SPECTRE's hook reads your project's knowledge registry and injects it into context. Claude now *knows what it knows* before you type a single word.\n\n2. **Skill auto-loading** — when your task matches a trigger word from the registry (e.g., you mention \"auth\" and there's a `feature-auth-flows` skill), Claude loads the full skill *before* searching the codebase. No wasted tool calls rediscovering what's already documented.\n\nThe result: knowledge compounds across sessions instead of resetting to zero. The more you learn, the faster and more accurate every future session becomes.\n\n### What Gets Captured\n\n| Category | Example |\n| --- | --- |\n| **Gotchas** | \"The websocket reconnect silently fails if...\" |\n| **Decisions** | \"We chose SQLite over Postgres because...\" |\n| **Features** | Architecture dossiers — key files, flows, common tasks |\n| **Patterns** | Reusable solutions established across the codebase |\n| **Procedures** | Multi-step processes like deploy, release, migrate |\n\nYou can also run these independently:\n\n```plaintext\n/spectre:evaluate              # Architecture review + learn (the full evaluate step)\n/spectre:learn                 # Just capture knowledge from this session\n/spectre:architecture_review   # Just run the architecture review\n/spectre:recall auth           # Find and load existing knowledge about auth\n```\n\n## 🤖 Subagents\n\nSPECTRE dispatches specialized subagents for different tasks:\n\nNOTE: You don't even need to know that these subagents exist. The prompts instruct Claude Code to call them automatically.\n\nAlthough I do sometimes use @spectre:web-research for web research. It's like mini deep-research.\n\n| Agent | Purpose |\n| --- | --- |\n| `@spectre:dev` | Implementation with MVP focus |\n| `@spectre:analyst` | Understand how code works |\n| `@spectre:finder` | Find where code lives |\n| `@spectre:patterns` | Find reusable patterns |\n| `@spectre:web-research` | Web research |\n| `@spectre:tester` | Test automation |\n| `@spectre:reviewer` | Independent code review |\n\n## 🛠️ How I Typically use SPECTRE\n\n99.9% of my day is spent using SPECTRE exactly like this.\n\n- start /spectre:scope to get crisp on what's in/out. this is non-negotiable unless the feature is a one line ask.\n\n  - if the feature's ux/user flow is unclear to me, or I want to make sure to really nail it, i run /spectre:ux. Its similar to /spectre:scope but focuses on getting clear on the core user flows.\n\n- /spectre:plan to build out a well researched technical design or set of tasks\n\n  - once i have scope/plan/tasks, I typically run /spectre:handoff to get a fresh context window with awareness of what we're working on.\n\n- then run /spectre:execute to use parallel subagents to work through the tasks. Execute is a meta prompt that also calls /spectre:code_review and /spectre:validate.\n\n  - side note /spectre:validate is a killer prompt. It breaks down the original tasks and dispatches subagents to verify. find stuff missing all the time with this.\n\n  - when initial execution is complete, i run another /spectre:handoff to get the context window clean for fixes/touch ups.\n\n- for low-complexity tasks where I trust the agent end-to-end, I use /spectre:ship. Brain dump what I want, walk away, and review the PR. It autonomously scopes, implements with TDD, sweeps, rebases, and opens a PR — zero confirmation gates.\n\n- From here — I do a bunch of manual testing and fixing.\n\n  - I largely use Claude Code's built in /plan mode for fixes in this phase.\n\n  - If there is a bug that can't easily be solved, i use the /spectre:fix prompt for a more structured debugging approach.\n\n  - If something new comes up, or if the scope is not what I'd hoped, I run a new /scope cycle from within the project.\n\n  - I liberally use /spectre:handoff here to keep context windows clean as I work through issues, and keep the sessions on track with the progress we're making.\n\n- During the process of manual testing/fixing, I typically accumulate uncommitted changes. /spectre:sweep will get your changes committed, while\n\n  - running and addressing lint\n  - running tests and related tests on touched files\n  - finding obvious dead code/AI slop, and\n  - grouping changes logically with descriptive conventional commits\n\n- Once wrapping up, /spectre:clean is a much deeper cleanup that dispatches subagents to find dead code, duplicates, verifies, lint, commits any stragglers, etc.\n\n- Then /spectre:test does deep analysis and dispatches subagents to write tests based on a risk-adjusted framework focusing on behavior not implementation details.\n\n- Once cleaned/tested — /spectre:rebase works great to rebase onto your parent branch, but obviously you do you with your release flow. From here I create PR/merge or directly merge depending on the task.\n\n- Finally, I run /spectre:evaluate to get an architecture review and capture any knowledge worth preserving — patterns, gotchas, decisions. This builds institutional memory that loads automatically in future sessions.\n\n- From here, merge/PR, address any PR comments, etc. and get the feature checked back in.\n\n## 📋 Slash Command Reference\n\n### Core Workflow\n\n| Command | Description |\n| --- | --- |\n| `/spectre:scope` | Interactive feature scoping |\n| `/spectre:plan` | Research codebase, create implementation plan |\n| `/spectre:execute` | Wave-based parallel execution with code review |\n| `/spectre:clean` | Code cleanup and quality gates |\n| `/spectre:test` | Risk-aware test coverage |\n| `/spectre:rebase` | Safe rebase with conflict handling |\n| `/spectre:evaluate` | Architecture review + knowledge capture |\n\n### Quick Start\n\n| Command | Description |\n| --- | --- |\n| `/spectre:quick_dev` | Scope + plan for small/medium tasks |\n| `/spectre:ship` | Autonomous end-to-end: brain dump → scope → TDD → rebase → PR |\n\n### Discovery & Research\n\n| Command | Description |\n| --- | --- |\n| `/spectre:kickoff` | Deep research for high-ambiguity features |\n| `/spectre:research` | Parallel codebase research |\n\n### Session Memory\n\n| Command | Description |\n| --- | --- |\n| `/spectre:handoff` | Save session state snapshot |\n| `/spectre:forget` | Clear memory, archive logs |\n\n### Utilities\n\nThese are situational commands.\n\nI use /spectre:fix for pretty much all bugs I run into.\n\n| Command | Description |\n| --- | --- |\n| `/spectre:sweep` | Light cleanup pass — lint, test, descriptive commits |\n| `/spectre:learn` | Capture knowledge for future sessions |\n| `/spectre:ux` | UX specification for UI-heavy features |\n| `/spectre:fix` | Investigate bugs & implement fixes |\n\n## 📁 Repository Structure\n\n```plaintext\nspectre/\n├── .claude-plugin/\n│   └── marketplace.json  # Marketplace registration\n├── plugins/\n│   └── spectre/\n│       ├── .claude-plugin/\n│       │   └── plugin.json   # Plugin manifest\n│       ├── agents/           # Subagent definitions\n│       ├── hooks/            # Session memory hooks\n│       └── skills/           # Slash workflows + knowledge skills\n├── scripts/              # Release & utility scripts\n└── CLAUDE.md\n```\n\n## Updating\n\nSkills update automatically when you update the plugin:\n\n`/plugin update spectre`\n\n## License\n\nMIT License - see LICENSE file for details\n\n## Support and/or Feedback\n\nIssues: https://github.com/codename-inc/spectre/issues\n\nEmail: [joe@bycodename.com](mailto:joe@bycodename.com?subject=Spectre%20Feedback)\n\nSocials:\n\n- Threads: [@joenandez](https://www.threads.com/joenandez)\n- X: [@joenandez](https://www.x.com/joenandez)\n- LinkedIn: [@joefernandez](https://www.linkedin.com/in/joefernandez/)\n","readmeFilename":"README.md"}