{"owner":"superset-sh","repo":"superset","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# Superset Monorepo\n\nSuperset is an agent-first development platform, with an Electron desktop IDE, Next.js web apps, and an Expo mobile app as the main customer-facing surfaces. It's a Turborepo monorepo, deployed apps are in apps/ and supporting packages are in packages/, and we use tRPC for the api.\n\nYou're working inside a Superset workspace, an isolated git-worktree copy of this repo. \"Workspace\" in a user message means that, not an editor workspace.\n\n## Project Structure\n\nAll projects in this repo should be structured like this:\n\n```\napp/\n├── page.tsx\n├── dashboard/\n│   ├── page.tsx\n│   ├── components/\n│   │   └── MetricsChart/\n│   │       ├── MetricsChart.tsx\n│   │       ├── MetricsChart.test.tsx      # Tests co-located\n│   │       ├── index.ts\n│   │       └── constants.ts\n│   ├── hooks/                             # Hooks used only in dashboard\n│   │   └── useMetrics/\n│   │       ├── useMetrics.ts\n│   │       ├── useMetrics.test.ts\n│   │       └── index.ts\n│   ├── utils/                             # Utils used only in dashboard\n│   │   └── formatData/\n│   │       ├── formatData.ts\n│   │       ├── formatData.test.ts\n│   │       └── index.ts\n│   ├── stores/                            # Stores used only in dashboard\n│   │   └── dashboardStore/\n│   │       ├── dashboardStore.ts\n│   │       └── index.ts\n│   └── providers/                         # Providers for dashboard context\n│       └── DashboardProvider/\n│           ├── DashboardProvider.tsx\n│           └── index.ts\n└── components/\n    ├── Sidebar/\n    │   ├── Sidebar.tsx\n    │   ├── Sidebar.test.tsx               # Tests co-located\n    │   ├── index.ts\n    │   ├── components/                    # Used 2+ times IN Sidebar\n    │   │   └── SidebarButton/             # Shared by SidebarNav + SidebarFooter\n    │   │       ├── SidebarButton.tsx\n    │   │       ├── SidebarButton.test.tsx\n    │   │       └── index.ts\n    │   ├── SidebarNav/\n    │   │   ├── SidebarNav.tsx\n    │   │   └── index.ts\n    │   └── SidebarFooter/\n    │       ├── SidebarFooter.tsx\n    │       └── index.ts\n    └── HeroSection/\n        ├── HeroSection.tsx\n        ├── HeroSection.test.tsx           # Tests co-located\n        ├── index.ts\n        └── components/                    # Used ONLY by HeroSection\n            └── HeroCanvas/\n                ├── HeroCanvas.tsx\n                ├── HeroCanvas.test.tsx\n                ├── HeroCanvas.stories.tsx\n                ├── index.ts\n                └── config.ts\n\ncomponents/                                # Used in 2+ pages (last resort)\n└── Header/\n```\n\n1. **One folder per component**: `ComponentName/ComponentName.tsx` + `index.ts` for barrel export\n2. **Co-locate by usage**: If used once, nest under parent's `components/`. If used 2+ times, promote to **highest shared parent's** `components/` (or `components/` as last resort)\n3. **One component per file**: No multi-component files\n4. **Co-locate dependencies**: Utils, hooks, constants, config, tests, stories live next to the file using them\n\n### Exception: shadcn/ui Components\n\nThe `src/components/ui/` and `src/components/ai-elements` directories contain shadcn/ui components. These use **kebab-case single files** (e.g., `button.tsx`, `base-node.tsx`) instead of the folder structure above. This is intentional—shadcn CLI expects this format for updates via `bunx shadcn@latest add`.\n\n## Database\n\nDrizzle ORM, schema in `packages/db/src/`. Follow `.agents/skills/db-migrations/SKILL.md` to generate\nmigrations. Never hand-edit `packages/db/drizzle/` (SQL, `meta/_journal.json`, snapshots) without\nexplicit user confirmation, and never apply migrations against a shared or production database.\n\n## Releases\n\nDesktop, host-service, and cli share one version; cut releases on a dedicated branch. Runbook:\n`scripts/release/README.md`. A *canary* is a separate thing: `bash scripts/release-canary.sh\n[commit]` builds the rolling internal `desktop-canary` prerelease, not a versioned release.\n\n## Orchestrating agents and workspaces\n\nWhen work wants a fresh isolated environment, a parallel agent, or a long-running job, reach for the\n`superset` CLI instead of hand-rolling git worktrees or doing it all serially in this one. It's\nalready on `PATH` in Superset terminals, and we dogfood it.\n\nReplace the capitalized placeholders before running these:\n\n```bash\nsuperset ws create --project PROJECT_ID --branch BRANCH --agent claude --prompt \"...\"\nsuperset agents create --workspace WORKSPACE_ID --agent claude --prompt \"...\"\nsuperset ws list\nsuperset terminals read --workspace WORKSPACE_ID --terminal TERMINAL_ID\nsuperset ws delete WORKSPACE_ID\n```\n\nIn order: an isolated workspace with an agent already working in it, another agent in an existing\nworkspace, what's running, what an agent is doing right now, and cleanup when you're done.\n\n`superset <command> --help` covers the rest (tasks, automations, hosts, settings). Pass `--json` for\nparsable output; it's on by default under agent environments.\n\n## Further reading\n\n- `.agents/skills/`: CDP UI verification, DB migrations, ticket format, and more. Read the matching\n  `SKILL.md` when a task fits its description.\n- `docs/agent-tooling.md`: where commands, skills, and per-agent-CLI config live.\n- `apps/desktop/AGENTS.md`: desktop specifics (notices, persisted renderer state).\n- `apps/mobile/AGENTS.md`: mobile structure and iOS-only scope.\n"},"files":{"AGENTS.md":"# Superset Monorepo\n\nSuperset is an agent-first development platform, with an Electron desktop IDE, Next.js web apps, and an Expo mobile app as the main customer-facing surfaces. It's a Turborepo monorepo, deployed apps are in apps/ and supporting packages are in packages/, and we use tRPC for the api.\n\nYou're working inside a Superset workspace, an isolated git-worktree copy of this repo. \"Workspace\" in a user message means that, not an editor workspace.\n\n## Project Structure\n\nAll projects in this repo should be structured like this:\n\n```\napp/\n├── page.tsx\n├── dashboard/\n│   ├── page.tsx\n│   ├── components/\n│   │   └── MetricsChart/\n│   │       ├── MetricsChart.tsx\n│   │       ├── MetricsChart.test.tsx      # Tests co-located\n│   │       ├── index.ts\n│   │       └── constants.ts\n│   ├── hooks/                             # Hooks used only in dashboard\n│   │   └── useMetrics/\n│   │       ├── useMetrics.ts\n│   │       ├── useMetrics.test.ts\n│   │       └── index.ts\n│   ├── utils/                             # Utils used only in dashboard\n│   │   └── formatData/\n│   │       ├── formatData.ts\n│   │       ├── formatData.test.ts\n│   │       └── index.ts\n│   ├── stores/                            # Stores used only in dashboard\n│   │   └── dashboardStore/\n│   │       ├── dashboardStore.ts\n│   │       └── index.ts\n│   └── providers/                         # Providers for dashboard context\n│       └── DashboardProvider/\n│           ├── DashboardProvider.tsx\n│           └── index.ts\n└── components/\n    ├── Sidebar/\n    │   ├── Sidebar.tsx\n    │   ├── Sidebar.test.tsx               # Tests co-located\n    │   ├── index.ts\n    │   ├── components/                    # Used 2+ times IN Sidebar\n    │   │   └── SidebarButton/             # Shared by SidebarNav + SidebarFooter\n    │   │       ├── SidebarButton.tsx\n    │   │       ├── SidebarButton.test.tsx\n    │   │       └── index.ts\n    │   ├── SidebarNav/\n    │   │   ├── SidebarNav.tsx\n    │   │   └── index.ts\n    │   └── SidebarFooter/\n    │       ├── SidebarFooter.tsx\n    │       └── index.ts\n    └── HeroSection/\n        ├── HeroSection.tsx\n        ├── HeroSection.test.tsx           # Tests co-located\n        ├── index.ts\n        └── components/                    # Used ONLY by HeroSection\n            └── HeroCanvas/\n                ├── HeroCanvas.tsx\n                ├── HeroCanvas.test.tsx\n                ├── HeroCanvas.stories.tsx\n                ├── index.ts\n                └── config.ts\n\ncomponents/                                # Used in 2+ pages (last resort)\n└── Header/\n```\n\n1. **One folder per component**: `ComponentName/ComponentName.tsx` + `index.ts` for barrel export\n2. **Co-locate by usage**: If used once, nest under parent's `components/`. If used 2+ times, promote to **highest shared parent's** `components/` (or `components/` as last resort)\n3. **One component per file**: No multi-component files\n4. **Co-locate dependencies**: Utils, hooks, constants, config, tests, stories live next to the file using them\n\n### Exception: shadcn/ui Components\n\nThe `src/components/ui/` and `src/components/ai-elements` directories contain shadcn/ui components. These use **kebab-case single files** (e.g., `button.tsx`, `base-node.tsx`) instead of the folder structure above. This is intentional—shadcn CLI expects this format for updates via `bunx shadcn@latest add`.\n\n## Database\n\nDrizzle ORM, schema in `packages/db/src/`. Follow `.agents/skills/db-migrations/SKILL.md` to generate\nmigrations. Never hand-edit `packages/db/drizzle/` (SQL, `meta/_journal.json`, snapshots) without\nexplicit user confirmation, and never apply migrations against a shared or production database.\n\n## Releases\n\nDesktop, host-service, and cli share one version; cut releases on a dedicated branch. Runbook:\n`scripts/release/README.md`. A *canary* is a separate thing: `bash scripts/release-canary.sh\n[commit]` builds the rolling internal `desktop-canary` prerelease, not a versioned release.\n\n## Orchestrating agents and workspaces\n\nWhen work wants a fresh isolated environment, a parallel agent, or a long-running job, reach for the\n`superset` CLI instead of hand-rolling git worktrees or doing it all serially in this one. It's\nalready on `PATH` in Superset terminals, and we dogfood it.\n\nReplace the capitalized placeholders before running these:\n\n```bash\nsuperset ws create --project PROJECT_ID --branch BRANCH --agent claude --prompt \"...\"\nsuperset agents create --workspace WORKSPACE_ID --agent claude --prompt \"...\"\nsuperset ws list\nsuperset terminals read --workspace WORKSPACE_ID --terminal TERMINAL_ID\nsuperset ws delete WORKSPACE_ID\n```\n\nIn order: an isolated workspace with an agent already working in it, another agent in an existing\nworkspace, what's running, what an agent is doing right now, and cleanup when you're done.\n\n`superset <command> --help` covers the rest (tasks, automations, hosts, settings). Pass `--json` for\nparsable output; it's on by default under agent environments.\n\n## Further reading\n\n- `.agents/skills/`: CDP UI verification, DB migrations, ticket format, and more. Read the matching\n  `SKILL.md` when a task fits its description.\n- `docs/agent-tooling.md`: where commands, skills, and per-agent-CLI config live.\n- `apps/desktop/AGENTS.md`: desktop specifics (notices, persisted renderer state).\n- `apps/mobile/AGENTS.md`: mobile structure and iOS-only scope.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# Superset Monorepo\n\nSuperset is an agent-first development platform, with an Electron desktop IDE, Next.js web apps, and an Expo mobile app as the main customer-facing surfaces. It's a Turborepo monorepo, deployed apps are in apps/ and supporting packages are in packages/, and we use tRPC for the api.\n\nYou're working inside a Superset workspace, an isolated git-worktree copy of this repo. \"Workspace\" in a user message means that, not an editor workspace.\n\n## Project Structure\n\nAll projects in this repo should be structured like this:\n\n```\napp/\n├── page.tsx\n├── dashboard/\n│   ├── page.tsx\n│   ├── components/\n│   │   └── MetricsChart/\n│   │       ├── MetricsChart.tsx\n│   │       ├── MetricsChart.test.tsx      # Tests co-located\n│   │       ├── index.ts\n│   │       └── constants.ts\n│   ├── hooks/                             # Hooks used only in dashboard\n│   │   └── useMetrics/\n│   │       ├── useMetrics.ts\n│   │       ├── useMetrics.test.ts\n│   │       └── index.ts\n│   ├── utils/                             # Utils used only in dashboard\n│   │   └── formatData/\n│   │       ├── formatData.ts\n│   │       ├── formatData.test.ts\n│   │       └── index.ts\n│   ├── stores/                            # Stores used only in dashboard\n│   │   └── dashboardStore/\n│   │       ├── dashboardStore.ts\n│   │       └── index.ts\n│   └── providers/                         # Providers for dashboard context\n│       └── DashboardProvider/\n│           ├── DashboardProvider.tsx\n│           └── index.ts\n└── components/\n    ├── Sidebar/\n    │   ├── Sidebar.tsx\n    │   ├── Sidebar.test.tsx               # Tests co-located\n    │   ├── index.ts\n    │   ├── components/                    # Used 2+ times IN Sidebar\n    │   │   └── SidebarButton/             # Shared by SidebarNav + SidebarFooter\n    │   │       ├── SidebarButton.tsx\n    │   │       ├── SidebarButton.test.tsx\n    │   │       └── index.ts\n    │   ├── SidebarNav/\n    │   │   ├── SidebarNav.tsx\n    │   │   └── index.ts\n    │   └── SidebarFooter/\n    │       ├── SidebarFooter.tsx\n    │       └── index.ts\n    └── HeroSection/\n        ├── HeroSection.tsx\n        ├── HeroSection.test.tsx           # Tests co-located\n        ├── index.ts\n        └── components/                    # Used ONLY by HeroSection\n            └── HeroCanvas/\n                ├── HeroCanvas.tsx\n                ├── HeroCanvas.test.tsx\n                ├── HeroCanvas.stories.tsx\n                ├── index.ts\n                └── config.ts\n\ncomponents/                                # Used in 2+ pages (last resort)\n└── Header/\n```\n\n1. **One folder per component**: `ComponentName/ComponentName.tsx` + `index.ts` for barrel export\n2. **Co-locate by usage**: If used once, nest under parent's `components/`. If used 2+ times, promote to **highest shared parent's** `components/` (or `components/` as last resort)\n3. **One component per file**: No multi-component files\n4. **Co-locate dependencies**: Utils, hooks, constants, config, tests, stories live next to the file using them\n\n### Exception: shadcn/ui Components\n\nThe `src/components/ui/` and `src/components/ai-elements` directories contain shadcn/ui components. These use **kebab-case single files** (e.g., `button.tsx`, `base-node.tsx`) instead of the folder structure above. This is intentional—shadcn CLI expects this format for updates via `bunx shadcn@latest add`.\n\n## Database\n\nDrizzle ORM, schema in `packages/db/src/`. Follow `.agents/skills/db-migrations/SKILL.md` to generate\nmigrations. Never hand-edit `packages/db/drizzle/` (SQL, `meta/_journal.json`, snapshots) without\nexplicit user confirmation, and never apply migrations against a shared or production database.\n\n## Releases\n\nDesktop, host-service, and cli share one version; cut releases on a dedicated branch. Runbook:\n`scripts/release/README.md`. A *canary* is a separate thing: `bash scripts/release-canary.sh\n[commit]` builds the rolling internal `desktop-canary` prerelease, not a versioned release.\n\n## Orchestrating agents and workspaces\n\nWhen work wants a fresh isolated environment, a parallel agent, or a long-running job, reach for the\n`superset` CLI instead of hand-rolling git worktrees or doing it all serially in this one. It's\nalready on `PATH` in Superset terminals, and we dogfood it.\n\nReplace the capitalized placeholders before running these:\n\n```bash\nsuperset ws create --project PROJECT_ID --branch BRANCH --agent claude --prompt \"...\"\nsuperset agents create --workspace WORKSPACE_ID --agent claude --prompt \"...\"\nsuperset ws list\nsuperset terminals read --workspace WORKSPACE_ID --terminal TERMINAL_ID\nsuperset ws delete WORKSPACE_ID\n```\n\nIn order: an isolated workspace with an agent already working in it, another agent in an existing\nworkspace, what's running, what an agent is doing right now, and cleanup when you're done.\n\n`superset <command> --help` covers the rest (tasks, automations, hosts, settings). Pass `--json` for\nparsable output; it's on by default under agent environments.\n\n## Further reading\n\n- `.agents/skills/`: CDP UI verification, DB migrations, ticket format, and more. Read the matching\n  `SKILL.md` when a task fits its description.\n- `docs/agent-tooling.md`: where commands, skills, and per-agent-CLI config live.\n- `apps/desktop/AGENTS.md`: desktop specifics (notices, persisted renderer state).\n- `apps/mobile/AGENTS.md`: mobile structure and iOS-only scope.\n","category":"root","tokens":1344}]}