{"owner":"different-ai","repo":"openwork","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS.md\n\nOpenWork is a free, open-source desktop app (macOS, Windows, Linux) for doing\nwork with AI agents on your own files — an open-source alternative to Claude\nCowork and Codex, built on OpenCode, running any model from 50+ providers.\nDesktop mode keeps files local; cloud is optional. Three surfaces live in this\nrepo:\n\n- **Desktop app** (`apps/`, `packages/`) — local-first agent workspace: chat on\n  files, skills, browser automation, scheduled automations, Anthropic-compatible\n  plugins.\n- **OpenWork MCP gateway** (`ee/apps/den-api`) — one URL\n  (`api.openworklabs.com/mcp/agent`) that brings org-assigned skills, plugins,\n  and connections (Google Workspace, Microsoft 365, MCPs) into Codex, Claude\n  Code, Cursor, or any MCP client via `search_capabilities` /\n  `execute_capability`.\n- **OpenWork Den** (`ee/apps/den-*`) — the org control plane: provision\n  inference, manage teams and access, set desktop policies, publish skills and\n  plugins through marketplaces.\n\nThe app consumes OpenWork server surfaces (self-hosted or hosted) rather than\ninventing parallel behavior. Anything OpenCode can do is available in OpenWork,\neven before a dedicated UI exists.\n\n## Verification (every change)\n\n- The only proof path is `evals/specs/**/*.test.ts` with `test` from\n  `@openwork/testkit`; app-driving specs use `.slow.test.ts`. Prose, screenshots,\n  and recordings never decide pass/fail — the testkit tape does.\n- Skills own the mechanics: `prove-a-pr` → `write-a-spec` → `run-tests` →\n  `diagnose-a-red-run` when red → `publish-evidence`. Evidence is ambient; never\n  create or pass roll handles.\n- Verdicts: `Passed` only when every claim has an observable assertion in the\n  tape; otherwise `Incomplete` or `Failed` with repro steps. Skips are never\n  passed.\n- Prefer Daytona when credentials are available; local fallback is an expected\n  OSS path, not a failure. Report which lane ran.\n- Docs/comments, types-only, and inert agent config may skip runtime proof — say so.\n\n## Pull requests\n\n- Do not default to draft PRs. A request to create or make a PR means a\n  ready-for-review PR once the required proof is published. Use a draft only\n  when the requester explicitly asks for one or the current verdict is\n  `Incomplete` or `Failed`, and state exactly what proof is missing.\n- Run tests and report commands + results. A runtime-observable change is not\n  done until its testkit tape is visible on the PR. If validation cannot run,\n  say why and give exact repro steps.\n- Feature work is demo-driven: `/voiceover <feature>` — no code until the script\n  is approved — then a fresh worktree (never the user's checkout), spec from the\n  narration, PR against `dev` with the tape. The `voiceover` skill owns the\n  journey.\n\n## Local headless web (agents)\n\n- `pnpm dev:headless-web --detach` launches an isolated browser UI + local\n `openwork-server` without Electron, detached from the invoking shell. Read\n `tmp/dev-headless-web.json` for `webUrl`, tokens, logs, and Den proxy URLs.\n It does not use `~/.config/openwork/server.json`. Re-running reuses a healthy\n instance; `--replace` restarts it with fresh tokens (`--keep-tokens` to\n keep the previous ones). Cloud sign-in is copy/paste handoff (Den cannot\n redirect grants to localhost): Account → Sign in → copy OpenWork link on Den\n → Paste sign-in code in Settings.\n\n## Coding\n\n- pnpm only, never npm/yarn. TypeScript: never `any`, typecasts, or `as` unless\n  100% necessary or instructed.\n- Prefer Tailwind, React, shadcn/ui (Base UI), TanStack Query, Zustand, Zod,\n  Drizzle, Better-Auth. Reuse `@/components`; end users are non-technical.\n- Smallest possible diff, then make it smaller. Propose the simpler solution. No\n  fallback expressions when types or control flow already guarantee a value.\n- If asked to do too much at once, stop and say so.\n"},"files":{"AGENTS.md":"# AGENTS.md\n\nOpenWork is a free, open-source desktop app (macOS, Windows, Linux) for doing\nwork with AI agents on your own files — an open-source alternative to Claude\nCowork and Codex, built on OpenCode, running any model from 50+ providers.\nDesktop mode keeps files local; cloud is optional. Three surfaces live in this\nrepo:\n\n- **Desktop app** (`apps/`, `packages/`) — local-first agent workspace: chat on\n  files, skills, browser automation, scheduled automations, Anthropic-compatible\n  plugins.\n- **OpenWork MCP gateway** (`ee/apps/den-api`) — one URL\n  (`api.openworklabs.com/mcp/agent`) that brings org-assigned skills, plugins,\n  and connections (Google Workspace, Microsoft 365, MCPs) into Codex, Claude\n  Code, Cursor, or any MCP client via `search_capabilities` /\n  `execute_capability`.\n- **OpenWork Den** (`ee/apps/den-*`) — the org control plane: provision\n  inference, manage teams and access, set desktop policies, publish skills and\n  plugins through marketplaces.\n\nThe app consumes OpenWork server surfaces (self-hosted or hosted) rather than\ninventing parallel behavior. Anything OpenCode can do is available in OpenWork,\neven before a dedicated UI exists.\n\n## Verification (every change)\n\n- The only proof path is `evals/specs/**/*.test.ts` with `test` from\n  `@openwork/testkit`; app-driving specs use `.slow.test.ts`. Prose, screenshots,\n  and recordings never decide pass/fail — the testkit tape does.\n- Skills own the mechanics: `prove-a-pr` → `write-a-spec` → `run-tests` →\n  `diagnose-a-red-run` when red → `publish-evidence`. Evidence is ambient; never\n  create or pass roll handles.\n- Verdicts: `Passed` only when every claim has an observable assertion in the\n  tape; otherwise `Incomplete` or `Failed` with repro steps. Skips are never\n  passed.\n- Prefer Daytona when credentials are available; local fallback is an expected\n  OSS path, not a failure. Report which lane ran.\n- Docs/comments, types-only, and inert agent config may skip runtime proof — say so.\n\n## Pull requests\n\n- Do not default to draft PRs. A request to create or make a PR means a\n  ready-for-review PR once the required proof is published. Use a draft only\n  when the requester explicitly asks for one or the current verdict is\n  `Incomplete` or `Failed`, and state exactly what proof is missing.\n- Run tests and report commands + results. A runtime-observable change is not\n  done until its testkit tape is visible on the PR. If validation cannot run,\n  say why and give exact repro steps.\n- Feature work is demo-driven: `/voiceover <feature>` — no code until the script\n  is approved — then a fresh worktree (never the user's checkout), spec from the\n  narration, PR against `dev` with the tape. The `voiceover` skill owns the\n  journey.\n\n## Local headless web (agents)\n\n- `pnpm dev:headless-web --detach` launches an isolated browser UI + local\n `openwork-server` without Electron, detached from the invoking shell. Read\n `tmp/dev-headless-web.json` for `webUrl`, tokens, logs, and Den proxy URLs.\n It does not use `~/.config/openwork/server.json`. Re-running reuses a healthy\n instance; `--replace` restarts it with fresh tokens (`--keep-tokens` to\n keep the previous ones). Cloud sign-in is copy/paste handoff (Den cannot\n redirect grants to localhost): Account → Sign in → copy OpenWork link on Den\n → Paste sign-in code in Settings.\n\n## Coding\n\n- pnpm only, never npm/yarn. TypeScript: never `any`, typecasts, or `as` unless\n  100% necessary or instructed.\n- Prefer Tailwind, React, shadcn/ui (Base UI), TanStack Query, Zustand, Zod,\n  Drizzle, Better-Auth. Reuse `@/components`; end users are non-technical.\n- Smallest possible diff, then make it smaller. Propose the simpler solution. No\n  fallback expressions when types or control flow already guarantee a value.\n- If asked to do too much at once, stop and say so.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md\n\nOpenWork is a free, open-source desktop app (macOS, Windows, Linux) for doing\nwork with AI agents on your own files — an open-source alternative to Claude\nCowork and Codex, built on OpenCode, running any model from 50+ providers.\nDesktop mode keeps files local; cloud is optional. Three surfaces live in this\nrepo:\n\n- **Desktop app** (`apps/`, `packages/`) — local-first agent workspace: chat on\n  files, skills, browser automation, scheduled automations, Anthropic-compatible\n  plugins.\n- **OpenWork MCP gateway** (`ee/apps/den-api`) — one URL\n  (`api.openworklabs.com/mcp/agent`) that brings org-assigned skills, plugins,\n  and connections (Google Workspace, Microsoft 365, MCPs) into Codex, Claude\n  Code, Cursor, or any MCP client via `search_capabilities` /\n  `execute_capability`.\n- **OpenWork Den** (`ee/apps/den-*`) — the org control plane: provision\n  inference, manage teams and access, set desktop policies, publish skills and\n  plugins through marketplaces.\n\nThe app consumes OpenWork server surfaces (self-hosted or hosted) rather than\ninventing parallel behavior. Anything OpenCode can do is available in OpenWork,\neven before a dedicated UI exists.\n\n## Verification (every change)\n\n- The only proof path is `evals/specs/**/*.test.ts` with `test` from\n  `@openwork/testkit`; app-driving specs use `.slow.test.ts`. Prose, screenshots,\n  and recordings never decide pass/fail — the testkit tape does.\n- Skills own the mechanics: `prove-a-pr` → `write-a-spec` → `run-tests` →\n  `diagnose-a-red-run` when red → `publish-evidence`. Evidence is ambient; never\n  create or pass roll handles.\n- Verdicts: `Passed` only when every claim has an observable assertion in the\n  tape; otherwise `Incomplete` or `Failed` with repro steps. Skips are never\n  passed.\n- Prefer Daytona when credentials are available; local fallback is an expected\n  OSS path, not a failure. Report which lane ran.\n- Docs/comments, types-only, and inert agent config may skip runtime proof — say so.\n\n## Pull requests\n\n- Do not default to draft PRs. A request to create or make a PR means a\n  ready-for-review PR once the required proof is published. Use a draft only\n  when the requester explicitly asks for one or the current verdict is\n  `Incomplete` or `Failed`, and state exactly what proof is missing.\n- Run tests and report commands + results. A runtime-observable change is not\n  done until its testkit tape is visible on the PR. If validation cannot run,\n  say why and give exact repro steps.\n- Feature work is demo-driven: `/voiceover <feature>` — no code until the script\n  is approved — then a fresh worktree (never the user's checkout), spec from the\n  narration, PR against `dev` with the tape. The `voiceover` skill owns the\n  journey.\n\n## Local headless web (agents)\n\n- `pnpm dev:headless-web --detach` launches an isolated browser UI + local\n `openwork-server` without Electron, detached from the invoking shell. Read\n `tmp/dev-headless-web.json` for `webUrl`, tokens, logs, and Den proxy URLs.\n It does not use `~/.config/openwork/server.json`. Re-running reuses a healthy\n instance; `--replace` restarts it with fresh tokens (`--keep-tokens` to\n keep the previous ones). Cloud sign-in is copy/paste handoff (Den cannot\n redirect grants to localhost): Account → Sign in → copy OpenWork link on Den\n → Paste sign-in code in Settings.\n\n## Coding\n\n- pnpm only, never npm/yarn. TypeScript: never `any`, typecasts, or `as` unless\n  100% necessary or instructed.\n- Prefer Tailwind, React, shadcn/ui (Base UI), TanStack Query, Zustand, Zod,\n  Drizzle, Better-Auth. Reuse `@/components`; end users are non-technical.\n- Smallest possible diff, then make it smaller. Propose the simpler solution. No\n  fallback expressions when types or control flow already guarantee a value.\n- If asked to do too much at once, stop and say so.\n","category":"root","tokens":957}]}