{"id":49904701,"url":"https://github.com/fraction12/openspec-studio","last_synced_at":"2026-05-16T10:04:38.264Z","repository":{"id":354743427,"uuid":"1222742290","full_name":"fraction12/openspec-studio","owner":"fraction12","description":"A local-first desktop workbench for inspecting OpenSpec repositories.","archived":false,"fork":false,"pushed_at":"2026-04-29T22:11:53.000Z","size":1420,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-29T22:32:03.949Z","etag":null,"topics":["desktop","local-first","openspec","react","spec-driven-development","tauri"],"latest_commit_sha":null,"homepage":"https://github.com/fraction12/openspec-studio#readme","language":"TypeScript","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/fraction12.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-27T17:00:26.000Z","updated_at":"2026-04-29T22:11:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fraction12/openspec-studio","commit_stats":null,"previous_names":["fraction12/openspec-studio"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/fraction12/openspec-studio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fopenspec-studio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fopenspec-studio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fopenspec-studio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fopenspec-studio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fraction12","download_url":"https://codeload.github.com/fraction12/openspec-studio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fopenspec-studio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33098340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["desktop","local-first","openspec","react","spec-driven-development","tauri"],"created_at":"2026-05-16T10:04:36.700Z","updated_at":"2026-05-16T10:04:38.255Z","avatar_url":"https://github.com/fraction12.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fraction12/openspec-studio\"\u003e\n    \u003cpicture\u003e\n      \u003csource srcset=\"public/openspec-studio-logo.svg\"\u003e\n      \u003cimg src=\"public/openspec-studio-logo.svg\" alt=\"OpenSpec Studio logo\" width=\"180\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA local-first desktop workbench for inspecting OpenSpec repositories.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fraction12/openspec-studio\"\u003e\u003cimg alt=\"Status: alpha\" src=\"https://img.shields.io/badge/status-alpha-orange?style=flat-square\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Fission-AI/OpenSpec\"\u003e\u003cimg alt=\"Built for OpenSpec\" src=\"https://img.shields.io/badge/built%20for-OpenSpec-blue?style=flat-square\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://tauri.app\"\u003e\u003cimg alt=\"Tauri v2\" src=\"https://img.shields.io/badge/Tauri-v2-24c8db?style=flat-square\u0026logo=tauri\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e [!IMPORTANT]\n\u003e Current alpha supports OpenSpec only. Provider adapters, Adapter Foundry, and non-OpenSpec repository dashboards are future exploration, not shipped capabilities.\n\nOpenSpec Studio points at a local repository, reads its `openspec/` directory, and turns proposals, specs, tasks, validation, archive readiness, and source artifacts into a fast inspection surface. OpenSpec files and the OpenSpec CLI remain the source of truth.\n\n```text\nwindow not wizard\nlocal not hosted\nsource truth not app database\ninspection before authoring\nnative enough to stay open all day\n```\n\n## Who This Is For\n\nOpenSpec Studio is for people already using, evaluating, or maintaining an OpenSpec workspace who want a visual workbench beside their editor and AI coding assistant.\n\nIt is a good fit if you want to:\n\n- inspect active, archive-ready, and archived OpenSpec changes\n- read proposal, design, task, and spec-delta artifacts without hunting through folders\n- run OpenSpec validation and see scoped diagnostics\n- archive completed changes through the OpenSpec CLI with validation guardrails\n- keep local repository state visible while your editor or agent does the writing\n\nIt is not currently for:\n\n- generic project planning outside OpenSpec\n- hosted team dashboards or cloud sync\n- replacing the OpenSpec CLI\n- editing every artifact inside Studio\n- generated/custom provider adapters\n- production Windows binary distribution\n\n## See It In Action\n\nStudio's first public alpha does not ship a polished demo recording yet. The product flow is:\n\n```text\nOpen a repo\n  -\u003e Studio finds openspec/\n  -\u003e indexes active changes, specs, archived changes, and artifact files\n  -\u003e shows what is proposed, blocked, stale, invalid, or ready to archive\n\nSelect a change\n  -\u003e read proposal.md, design.md, tasks.md, and spec deltas\n  -\u003e preview artifact contents without leaving the app\n  -\u003e open the real source file when you need to edit\n\nRun validation\n  -\u003e Studio calls openspec validate --all --json\n  -\u003e parses structured validation output\n  -\u003e keeps the UI honest about what needs attention\n\nArchive when ready\n  -\u003e Studio validates first\n  -\u003e calls the OpenSpec archive flow\n  -\u003e reloads from disk so the app never becomes the source of truth\n```\n\n## Current Surfaces\n\n- Change board for active, archive-ready, archived, blocked, missing, stale, and invalid work\n- Specs overview for capability-level inspection\n- Artifact inspector for proposals, designs, tasks, and spec deltas\n- Validation dashboard backed by the OpenSpec CLI\n- Archive actions with validation-first guardrails\n- OpenSpec Git-status awareness for local workspace changes\n- Sortable tables and keyboard-friendly row navigation\n- App-local persistence for recent repositories, selection, sorting, and validation freshness\n- Optional Studio Runner dispatch for sending one selected change to a local signed runner\n\n## Supported Platforms\n\nThe source tree is developed and tested primarily on macOS.\n\n- **macOS:** primary alpha target.\n- **Linux:** expected source-build target, but not yet packaged or deeply UATed.\n- **Windows:** experimental until process-tree containment and packaging are hardened to match Unix behavior.\n\nNo public binary installers are provided yet. Build from source for now. The Tauri bundle identifier is currently `dev.openspec.studio`; treat it as alpha metadata until binary release signing/notarization is planned.\n\n## Prerequisites\n\n- Node.js `^20.19.0` or `\u003e=22.12.0`\n- Rust and Cargo\n- Platform prerequisites for Tauri v2 development\n- OpenSpec CLI available on `PATH`\n\nInstall or update OpenSpec:\n\n```bash\nnpm install -g @fission-ai/openspec@latest\n```\n\nFor Tauri platform setup, use the official guide for your OS: https://tauri.app/start/prerequisites/\n\n## Install And Run From Source\n\n```bash\ngit clone https://github.com/fraction12/openspec-studio.git\ncd openspec-studio\nnpm install\nnpm run tauri:dev\n```\n\nThen choose a local repository that contains an `openspec/` directory.\n\nFrontend-only development is available for UI work, but local repository access, validation, archive, and file actions require the Tauri desktop runtime:\n\n```bash\nnpm run dev\n```\n\nBuild the frontend:\n\n```bash\nnpm run build\n```\n\nBuild a local desktop bundle:\n\n```bash\nnpm run tauri:build\n```\n\n## Usage Walkthrough\n\n1. Open Studio and choose a local repository folder.\n2. Confirm the workspace header shows the repository you selected.\n3. Use **Changes** to scan active, archive-ready, and archived changes.\n4. Select a change row to inspect proposal, design, tasks, spec deltas, validation, and archive metadata.\n5. Use **Specs** to inspect current capability specs and requirement counts.\n6. Run validation to refresh trust state from the OpenSpec CLI.\n7. Archive from the archive-ready board when tasks are complete and validation passes.\n\n\n## Optional Studio Runner\n\nStudio can hand one selected active change to a local Studio Runner companion process. This is explicit and push-based: Studio does not poll, does not require Linear for the OpenSpec path, and does not automatically dispatch when a change becomes valid.\n\nTo use it in the current alpha:\n\n1. Configure the local runner endpoint, or keep the default `http://127.0.0.1:4000/api/v1/studio-runner/events`.\n2. Click **Generate session secret**. Studio keeps the secret in memory only.\n3. Click **Start runner**. Studio starts the Studio-owned Symphony runner, passes `STUDIO_RUNNER_SIGNING_SECRET`, and waits for `/health` before marking it reachable.\n4. Run validation until the workspace is clean.\n5. Click **Build with agent**.\n\nStudio sends `build.requested` to `POST /api/v1/studio-runner/events` with `webhook-id`, `webhook-timestamp`, and `webhook-signature` headers. The signature is HMAC-SHA256 over `webhook-id.webhook-timestamp.raw-body`. Payloads are intentionally thin: repo path, change name, validation state, and artifact paths, not full repository contents.\n\nAfter accepting the event, Studio Runner verifies and deduplicates the request, claims the repository/change pair, reads the referenced OpenSpec artifacts from disk, creates an isolated workspace, and enqueues one run through the Studio-owned Symphony orchestrator and `AgentRunner`. Duplicate deliveries reuse the same event identity so the runner can avoid spawning a second agent for the same build request.\n\nThe Runner Log uses the existing Studio Runner event stream as the v1 source of truth for run identity, workspace/session, git/publication, cleanup, and error metadata. Expanded rows show bounded summary-derived milestones when Symphony has not yet emitted first-class execution-log entries. A future Symphony follow-up can add structured execution-log entries to the same SSE stream, or expose a localhost-only bounded detail endpoint, using the same safe fields and retention limits rather than streaming raw stdout, stderr, secrets, signatures, auth headers, or environment values into Studio state.\n\n## Development\n\nRun checks:\n\n```bash\nnpm test\nnpm run check\nnpm run build\ncd src-tauri \u0026\u0026 cargo check\ncd src-tauri \u0026\u0026 cargo test\nopenspec validate --all\n```\n\nThis repo dogfoods OpenSpec. Larger changes should add or update an OpenSpec change under `openspec/changes/` before implementation.\n\n## Project Status\n\nOpenSpec Studio is alpha software. The current product direction is intentionally narrow:\n\n```text\nOpenSpec Studio = a local inspection surface for OpenSpec state.\n```\n\nNear-term focus:\n\n- read-only clarity for changes, specs, archive, validation, tasks, and artifacts\n- lightweight app-local persistence for recent repos and UI continuity\n- better CLI JSON contracts where Studio needs less fragile parsing\n- provider adapter architecture as an internal seam, with OpenSpec as the only shipped provider\n- read-only graph/timeline ideas only if they improve inspection\n\nExplicitly parked:\n\n- guided propose/apply workflows beyond existing validation/archive guardrails\n- Adapter Foundry or generated custom providers\n- hosted sync\n- broad artifact editing\n- npm package publishing\n- public binary distribution\n\n## Security And Privacy\n\nStudio is local-first and has no hosted sync.\n\nStudio can:\n\n- read files under the `openspec/` directory in a repository you choose\n- run narrowly allowed OpenSpec CLI commands for validation, status, and archive\n- run Git status scoped to `openspec/`\n- open artifact files in your system editor\n- store recent repository paths, UI state, validation snapshots, runner settings, and bounded dispatch history in local app state\n\nPersisted validation snapshots may include OpenSpec diagnostics with file paths and command output. Clear local app data if you want to remove those records before sharing a machine or debugging profile.\n\nThe Tauri bridge intentionally keeps command, file, and runner operations narrow: repository paths are canonicalized, artifact reads are bounded to `openspec/`, OpenSpec command shapes are allowlisted, archive validates the change name, and command output/time are bounded.\n\nThe Content Security Policy keeps production assets local and allows Tauri IPC. Localhost connection allowances remain because the same Tauri config supports development/HMR workflows; production code should not depend on hosted services.\n\nSee [SECURITY.md](SECURITY.md) for vulnerability reporting guidance.\n\n## Contributing\n\nOutside contributions are welcome, but this repo is still alpha and not yet a fully contributor-optimized project. Start with [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Docs\n\n→ **[OpenSpec](https://github.com/Fission-AI/OpenSpec)**: the upstream spec framework\u003cbr\u003e\n→ **[OpenSpec CLI](https://github.com/Fission-AI/OpenSpec/blob/main/docs/cli.md)**: command reference\u003cbr\u003e\n→ **[OpenSpec Workflows](https://github.com/Fission-AI/OpenSpec/blob/main/docs/workflows.md)**: propose/apply/archive patterns\u003cbr\u003e\n→ **[`openspec/`](openspec/)**: this app's own product specs and change history\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffraction12%2Fopenspec-studio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffraction12%2Fopenspec-studio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffraction12%2Fopenspec-studio/lists"}