diff --git a/cloud/app/src/routes/docs/[...path].ts b/cloud/app/src/routes/docs/[...path].ts
new file mode 100644
index 00000000..f9822393
--- /dev/null
+++ b/cloud/app/src/routes/docs/[...path].ts
@@ -0,0 +1,20 @@
+import type { APIEvent } from "@solidjs/start/server"
+
+async function handler(evt: APIEvent) {
+ const req = evt.request.clone()
+ const url = new URL(req.url)
+ const targetUrl = `https://dev.opencode.ai${url.pathname}${url.search}`
+ const response = await fetch(targetUrl, {
+ method: req.method,
+ headers: req.headers,
+ body: req.body,
+ })
+ return response
+}
+
+export const GET = handler
+export const POST = handler
+export const PUT = handler
+export const DELETE = handler
+export const OPTIONS = handler
+export const PATCH = handler
diff --git a/cloud/app/src/routes/docs/index.ts b/cloud/app/src/routes/docs/index.ts
new file mode 100644
index 00000000..f9822393
--- /dev/null
+++ b/cloud/app/src/routes/docs/index.ts
@@ -0,0 +1,20 @@
+import type { APIEvent } from "@solidjs/start/server"
+
+async function handler(evt: APIEvent) {
+ const req = evt.request.clone()
+ const url = new URL(req.url)
+ const targetUrl = `https://dev.opencode.ai${url.pathname}${url.search}`
+ const response = await fetch(targetUrl, {
+ method: req.method,
+ headers: req.headers,
+ body: req.body,
+ })
+ return response
+}
+
+export const GET = handler
+export const POST = handler
+export const PUT = handler
+export const DELETE = handler
+export const OPTIONS = handler
+export const PATCH = handler
diff --git a/cloud/app/src/routes/s/[id].ts b/cloud/app/src/routes/s/[id].ts
new file mode 100644
index 00000000..75bff7ae
--- /dev/null
+++ b/cloud/app/src/routes/s/[id].ts
@@ -0,0 +1,20 @@
+import type { APIEvent } from "@solidjs/start/server"
+
+async function handler(evt: APIEvent) {
+ const req = evt.request.clone()
+ const url = new URL(req.url)
+ const targetUrl = `http://dev.opencode.ai/docs${url.pathname}${url.search}`
+ const response = await fetch(targetUrl, {
+ method: req.method,
+ headers: req.headers,
+ body: req.body,
+ })
+ return response
+}
+
+export const GET = handler
+export const POST = handler
+export const PUT = handler
+export const DELETE = handler
+export const OPTIONS = handler
+export const PATCH = handler
diff --git a/cloud/app/src/routes/workspace/[id].tsx b/cloud/app/src/routes/workspace/[id].tsx
index b10a87e8..17f4f85d 100644
--- a/cloud/app/src/routes/workspace/[id].tsx
+++ b/cloud/app/src/routes/workspace/[id].tsx
@@ -1,11 +1,10 @@
+import "./[id].css"
import { Billing } from "@opencode/cloud-core/billing.js"
import { Key } from "@opencode/cloud-core/key.js"
import { action, createAsync, query, useAction, useSubmission, json } from "@solidjs/router"
-import { createSignal, For, onMount, Show } from "solid-js"
-import { getActor } from "~/context/auth"
+import { createSignal, For, Show } from "solid-js"
import { withActor } from "~/context/auth.withActor"
import { IconCopy, IconCheck } from "~/component/icon"
-import "./[id].css"
import { User } from "@opencode/cloud-core/user.js"
import { Actor } from "@opencode/cloud-core/actor.js"
@@ -63,7 +62,7 @@ const createPortalUrl = action(async (returnUrl: string) => {
return withActor(() => Billing.generatePortalUrl({ returnUrl }))
}, "portalUrl")
-export default function() {
+export default function () {
/////////////////
// Keys section
diff --git a/infra/app.ts b/infra/app.ts
index e1e7b26c..73e12350 100644
--- a/infra/app.ts
+++ b/infra/app.ts
@@ -34,7 +34,7 @@ export const api = new sst.cloudflare.Worker("Api", {
})
export const web = new sst.cloudflare.x.Astro("Web", {
- domain,
+ domain: "docs." + domain,
path: "packages/web",
environment: {
// For astro config
diff --git a/packages/web/astro.config.mjs b/packages/web/astro.config.mjs
index 3a5d933a..98f22960 100644
--- a/packages/web/astro.config.mjs
+++ b/packages/web/astro.config.mjs
@@ -12,6 +12,7 @@ import { spawnSync } from "child_process"
// https://astro.build/config
export default defineConfig({
site: config.url,
+ base: "/docs",
output: "server",
adapter: cloudflare({
imageService: "passthrough",
@@ -59,44 +60,36 @@ export default defineConfig({
replacesTitle: true,
},
sidebar: [
- "docs",
- "docs/config",
- "docs/providers",
- "docs/enterprise",
- "docs/troubleshooting",
+ "",
+ "config",
+ "providers",
+ "enterprise",
+ "troubleshooting",
{
label: "Usage",
- items: [
- "docs/tui",
- "docs/cli",
- "docs/ide",
- "docs/zen",
- "docs/share",
- "docs/github",
- "docs/gitlab"
- ],
+ items: ["tui", "cli", "ide", "zen", "share", "github", "gitlab"],
},
{
label: "Configure",
items: [
- "docs/rules",
- "docs/agents",
- "docs/models",
- "docs/themes",
- "docs/keybinds",
- "docs/commands",
- "docs/formatters",
- "docs/permissions",
- "docs/lsp",
- "docs/mcp-servers",
+ "rules",
+ "agents",
+ "models",
+ "themes",
+ "keybinds",
+ "commands",
+ "formatters",
+ "permissions",
+ "lsp",
+ "mcp-servers",
],
},
{
label: "Develop",
- items: ["docs/sdk", "docs/server", "docs/plugins"],
+ items: ["sdk", "server", "plugins"],
},
],
components: {
diff --git a/packages/web/src/content/docs/docs/agents.mdx b/packages/web/src/content/docs/agents.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/agents.mdx
rename to packages/web/src/content/docs/agents.mdx
diff --git a/packages/web/src/content/docs/docs/cli.mdx b/packages/web/src/content/docs/cli.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/cli.mdx
rename to packages/web/src/content/docs/cli.mdx
diff --git a/packages/web/src/content/docs/docs/commands.mdx b/packages/web/src/content/docs/commands.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/commands.mdx
rename to packages/web/src/content/docs/commands.mdx
diff --git a/packages/web/src/content/docs/docs/config.mdx b/packages/web/src/content/docs/config.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/config.mdx
rename to packages/web/src/content/docs/config.mdx
diff --git a/packages/web/src/content/docs/docs/index.mdx b/packages/web/src/content/docs/docs/index.mdx
deleted file mode 100644
index 97910e0e..00000000
--- a/packages/web/src/content/docs/docs/index.mdx
+++ /dev/null
@@ -1,311 +0,0 @@
----
-title: Intro
-description: Get started with opencode.
----
-
-import { Tabs, TabItem } from "@astrojs/starlight/components"
-
-[**opencode**](/) is an AI coding agent built for the terminal.
-
-
-
-Let's get started.
-
----
-
-#### Prerequisites
-
-To use opencode, you'll need:
-
-1. A modern terminal emulator like:
-
- - [WezTerm](https://wezterm.org), cross-platform
- - [Alacritty](https://alacritty.org), cross-platform
- - [Ghostty](https://ghostty.org), Linux and macOS
- - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux and macOS
-
-2. API keys for the LLM providers you want to use.
-
----
-
-## Install
-
-The easiest way to install opencode is through the install script.
-
-```bash
-curl -fsSL https://opencode.ai/install | bash
-```
-
-You can also install it with the following:
-
-- **Using Node.js**
-
-
-
- ```bash
- npm install -g opencode-ai
- ```
-
-
- ```bash
- bun install -g opencode-ai
- ```
-
-
- ```bash
- pnpm install -g opencode-ai
- ```
-
-
- ```bash
- yarn global add opencode-ai
- ```
-
-
-
-- **Using Homebrew on macOS and Linux**
-
- ```bash
- brew install sst/tap/opencode
- ```
-
-- **Using Paru on Arch Linux**
-
- ```bash
- paru -S opencode-bin
- ```
-
-#### Windows
-
-Right now the automatic installation methods do not work properly on Windows. However you can grab the binary from the [Releases](https://github.com/sst/opencode/releases).
-
----
-
-## Configure
-
-With opencode you can use any LLM provider by configuring their API keys.
-
-We recommend signing up for [Claude Pro](https://www.anthropic.com/news/claude-pro) or [Max](https://www.anthropic.com/max), it's the most cost-effective way to use opencode.
-
-Once you've signed up, run `opencode auth login` and select Anthropic.
-
-```bash
-$ opencode auth login
-
-┌ Add credential
-│
-◆ Select provider
-│ ● Anthropic (recommended)
-│ ○ OpenAI
-│ ○ Google
-│ ○ Amazon Bedrock
-│ ○ Azure
-│ ○ DeepSeek
-│ ○ Groq
-│ ...
-└
-```
-
-Alternatively, you can select one of the other providers. [Learn more](/docs/providers#directory).
-
----
-
-## Initialize
-
-Now that you've configured a provider, you can navigate to a project that
-you want to work on.
-
-```bash
-cd /path/to/project
-```
-
-And run opencode.
-
-```bash
-opencode
-```
-
-Next, initialize opencode for the project by running the following command.
-
-```bash frame="none"
-/init
-```
-
-This will get opencode to analyze your project and create an `AGENTS.md` file in
-the project root.
-
-:::tip
-You should commit your project's `AGENTS.md` file to Git.
-:::
-
-This helps opencode understand the project structure and the coding patterns
-used.
-
----
-
-## Usage
-
-You are now ready to use opencode to work on your project. Feel free to ask it
-anything!
-
-If you are new to using an AI coding agent, here are some examples that might
-help.
-
----
-
-### Ask questions
-
-You can ask opencode to explain the codebase to you.
-
-:::tip
-Use the `@` key to fuzzy search for files in the project.
-:::
-
-```txt frame="none" "@packages/functions/src/api/index.ts"
-How is authentication handled in @packages/functions/src/api/index.ts
-```
-
-This is helpful if there's a part of the codebase that you didn't work on.
-
----
-
-### Add features
-
-You can ask opencode to add new features to your project. Though we first recommend asking it to create a plan.
-
-1. **Create a plan**
-
- opencode has a _Plan mode_ that disables its ability to make changes and
- instead suggest _how_ it'll implement the feature.
-
- Switch to it using the **Tab** key. You'll see an indicator for this in the lower right corner.
-
- ```bash frame="none" title="Switch to Plan mode"
-
- ```
-
- Now let's describe what we want it to do.
-
- ```txt frame="none"
- When a user deletes a note, we'd like to flag it as deleted in the database.
- Then create a screen that shows all the recently deleted notes.
- From this screen, the user can undelete a note or permanently delete it.
- ```
-
- You want to give opencode enough details to understand what you want. It helps
- to talk to it like you are talking to a junior developer on your team.
-
- :::tip
- Give opencode plenty of context and examples to help it understand what you
- want.
- :::
-
-2. **Iterate on the plan**
-
- Once it gives you a plan, you can give it feedback or add more details.
-
- ```txt frame="none"
- We'd like to design this new screen using a design I've used before.
- [Image #1] Take a look at this image and use it as a reference.
- ```
-
- :::tip
- Drag and drop images into the terminal to add them to the prompt.
- :::
-
- opencode can scan any images you give it and add them to the prompt. You can
- do this by dragging and dropping an image into the terminal.
-
-3. **Build the feature**
-
- Once you feel comfortable with the plan, switch back to _Build mode_ by
- hitting the **Tab** key again.
-
- ```bash frame="none"
-
- ```
-
- And asking it to make the changes.
-
- ```bash frame="none"
- Sounds good! Go ahead and make the changes.
- ```
-
----
-
-### Make changes
-
-For more straightforward changes, you can ask opencode to directly build it
-without having to review the plan first.
-
-```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
-We need to add authentication to the /settings route. Take a look at how this is
-handled in the /notes route in @packages/functions/src/notes.ts and implement
-the same logic in @packages/functions/src/settings.ts
-```
-
-You want to make sure you provide a good amount of detail so opencode makes the right
-changes.
-
----
-
-### Undo changes
-
-Let's say you ask opencode to make some changes.
-
-```txt frame="none" "@packages/functions/src/api/index.ts"
-Can you refactor the function in @packages/functions/src/api/index.ts?
-```
-
-But you realize that it is not what you wanted. You **can undo** the changes
-using the `/undo` command.
-
-```bash frame="none"
-/undo
-```
-
-opencode will now revert the changes you made and show your original message
-again.
-
-```txt frame="none" "@packages/functions/src/api/index.ts"
-Can you refactor the function in @packages/functions/src/api/index.ts?
-```
-
-From here you can tweak the prompt and ask opencode to try again.
-
-:::tip
-You can run `/undo` multiple times to undo multiple changes.
-:::
-
-Or you **can redo** the changes using the `/redo` command.
-
-```bash frame="none"
-/redo
-```
-
----
-
-## Share
-
-The conversations that you have with opencode can be [shared with your
-team](/docs/share).
-
-```bash frame="none"
-/share
-```
-
-This will create a link to the current conversation and copy it to your clipboard.
-
-:::note
-Conversations are not shared by default.
-:::
-
-Here's an [example conversation](https://opencode.ai/s/4XP1fce5) with opencode.
-
----
-
-## Customize
-
-And that's it! You are now a pro at using opencode.
-
-To make it your own, we recommend [picking a theme](/docs/themes), [customizing the keybinds](/docs/keybinds), [configuring code formatters](/docs/formatters), [creating custom commands](/docs/commands), or playing around with the [opencode config](/docs/config).
diff --git a/packages/web/src/content/docs/docs/enterprise.mdx b/packages/web/src/content/docs/enterprise.mdx
similarity index 98%
rename from packages/web/src/content/docs/docs/enterprise.mdx
rename to packages/web/src/content/docs/enterprise.mdx
index 3e4b281e..4faff39c 100644
--- a/packages/web/src/content/docs/docs/enterprise.mdx
+++ b/packages/web/src/content/docs/enterprise.mdx
@@ -3,7 +3,7 @@ title: Enterprise
description: Using opencode in your organization.
---
-import config from "../../../../config.mjs"
+import config from "../../../config.mjs"
export const email = `mailto:${config.email}`
opencode does not store any of your code or context data. This makes it easy for
diff --git a/packages/web/src/content/docs/docs/formatters.mdx b/packages/web/src/content/docs/formatters.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/formatters.mdx
rename to packages/web/src/content/docs/formatters.mdx
diff --git a/packages/web/src/content/docs/docs/github.mdx b/packages/web/src/content/docs/github.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/github.mdx
rename to packages/web/src/content/docs/github.mdx
diff --git a/packages/web/src/content/docs/docs/gitlab.mdx b/packages/web/src/content/docs/gitlab.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/gitlab.mdx
rename to packages/web/src/content/docs/gitlab.mdx
diff --git a/packages/web/src/content/docs/docs/ide.mdx b/packages/web/src/content/docs/ide.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/ide.mdx
rename to packages/web/src/content/docs/ide.mdx
diff --git a/packages/web/src/content/docs/index.mdx b/packages/web/src/content/docs/index.mdx
index ea39be9e..7ca2fee7 100644
--- a/packages/web/src/content/docs/index.mdx
+++ b/packages/web/src/content/docs/index.mdx
@@ -1,12 +1,311 @@
---
-title: opencode
-description: The AI coding agent built for the terminal.
-template: splash
-hero:
- title: The AI coding agent built for the terminal.
- tagline: The AI coding agent built for the terminal.
- image:
- dark: ../../assets/logo-ornate-dark.svg
- light: ../../assets/logo-ornate-light.svg
- alt: opencode logo
+title: Intro
+description: Get started with opencode.
---
+
+import { Tabs, TabItem } from "@astrojs/starlight/components"
+
+[**opencode**](/) is an AI coding agent built for the terminal.
+
+
+
+Let's get started.
+
+---
+
+#### Prerequisites
+
+To use opencode, you'll need:
+
+1. A modern terminal emulator like:
+
+ - [WezTerm](https://wezterm.org), cross-platform
+ - [Alacritty](https://alacritty.org), cross-platform
+ - [Ghostty](https://ghostty.org), Linux and macOS
+ - [Kitty](https://sw.kovidgoyal.net/kitty/), Linux and macOS
+
+2. API keys for the LLM providers you want to use.
+
+---
+
+## Install
+
+The easiest way to install opencode is through the install script.
+
+```bash
+curl -fsSL https://opencode.ai/install | bash
+```
+
+You can also install it with the following:
+
+- **Using Node.js**
+
+
+
+ ```bash
+ npm install -g opencode-ai
+ ```
+
+
+ ```bash
+ bun install -g opencode-ai
+ ```
+
+
+ ```bash
+ pnpm install -g opencode-ai
+ ```
+
+
+ ```bash
+ yarn global add opencode-ai
+ ```
+
+
+
+- **Using Homebrew on macOS and Linux**
+
+ ```bash
+ brew install sst/tap/opencode
+ ```
+
+- **Using Paru on Arch Linux**
+
+ ```bash
+ paru -S opencode-bin
+ ```
+
+#### Windows
+
+Right now the automatic installation methods do not work properly on Windows. However you can grab the binary from the [Releases](https://github.com/sst/opencode/releases).
+
+---
+
+## Configure
+
+With opencode you can use any LLM provider by configuring their API keys.
+
+We recommend signing up for [Claude Pro](https://www.anthropic.com/news/claude-pro) or [Max](https://www.anthropic.com/max), it's the most cost-effective way to use opencode.
+
+Once you've signed up, run `opencode auth login` and select Anthropic.
+
+```bash
+$ opencode auth login
+
+┌ Add credential
+│
+◆ Select provider
+│ ● Anthropic (recommended)
+│ ○ OpenAI
+│ ○ Google
+│ ○ Amazon Bedrock
+│ ○ Azure
+│ ○ DeepSeek
+│ ○ Groq
+│ ...
+└
+```
+
+Alternatively, you can select one of the other providers. [Learn more](/docs/providers#directory).
+
+---
+
+## Initialize
+
+Now that you've configured a provider, you can navigate to a project that
+you want to work on.
+
+```bash
+cd /path/to/project
+```
+
+And run opencode.
+
+```bash
+opencode
+```
+
+Next, initialize opencode for the project by running the following command.
+
+```bash frame="none"
+/init
+```
+
+This will get opencode to analyze your project and create an `AGENTS.md` file in
+the project root.
+
+:::tip
+You should commit your project's `AGENTS.md` file to Git.
+:::
+
+This helps opencode understand the project structure and the coding patterns
+used.
+
+---
+
+## Usage
+
+You are now ready to use opencode to work on your project. Feel free to ask it
+anything!
+
+If you are new to using an AI coding agent, here are some examples that might
+help.
+
+---
+
+### Ask questions
+
+You can ask opencode to explain the codebase to you.
+
+:::tip
+Use the `@` key to fuzzy search for files in the project.
+:::
+
+```txt frame="none" "@packages/functions/src/api/index.ts"
+How is authentication handled in @packages/functions/src/api/index.ts
+```
+
+This is helpful if there's a part of the codebase that you didn't work on.
+
+---
+
+### Add features
+
+You can ask opencode to add new features to your project. Though we first recommend asking it to create a plan.
+
+1. **Create a plan**
+
+ opencode has a _Plan mode_ that disables its ability to make changes and
+ instead suggest _how_ it'll implement the feature.
+
+ Switch to it using the **Tab** key. You'll see an indicator for this in the lower right corner.
+
+ ```bash frame="none" title="Switch to Plan mode"
+
+ ```
+
+ Now let's describe what we want it to do.
+
+ ```txt frame="none"
+ When a user deletes a note, we'd like to flag it as deleted in the database.
+ Then create a screen that shows all the recently deleted notes.
+ From this screen, the user can undelete a note or permanently delete it.
+ ```
+
+ You want to give opencode enough details to understand what you want. It helps
+ to talk to it like you are talking to a junior developer on your team.
+
+ :::tip
+ Give opencode plenty of context and examples to help it understand what you
+ want.
+ :::
+
+2. **Iterate on the plan**
+
+ Once it gives you a plan, you can give it feedback or add more details.
+
+ ```txt frame="none"
+ We'd like to design this new screen using a design I've used before.
+ [Image #1] Take a look at this image and use it as a reference.
+ ```
+
+ :::tip
+ Drag and drop images into the terminal to add them to the prompt.
+ :::
+
+ opencode can scan any images you give it and add them to the prompt. You can
+ do this by dragging and dropping an image into the terminal.
+
+3. **Build the feature**
+
+ Once you feel comfortable with the plan, switch back to _Build mode_ by
+ hitting the **Tab** key again.
+
+ ```bash frame="none"
+
+ ```
+
+ And asking it to make the changes.
+
+ ```bash frame="none"
+ Sounds good! Go ahead and make the changes.
+ ```
+
+---
+
+### Make changes
+
+For more straightforward changes, you can ask opencode to directly build it
+without having to review the plan first.
+
+```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
+We need to add authentication to the /settings route. Take a look at how this is
+handled in the /notes route in @packages/functions/src/notes.ts and implement
+the same logic in @packages/functions/src/settings.ts
+```
+
+You want to make sure you provide a good amount of detail so opencode makes the right
+changes.
+
+---
+
+### Undo changes
+
+Let's say you ask opencode to make some changes.
+
+```txt frame="none" "@packages/functions/src/api/index.ts"
+Can you refactor the function in @packages/functions/src/api/index.ts?
+```
+
+But you realize that it is not what you wanted. You **can undo** the changes
+using the `/undo` command.
+
+```bash frame="none"
+/undo
+```
+
+opencode will now revert the changes you made and show your original message
+again.
+
+```txt frame="none" "@packages/functions/src/api/index.ts"
+Can you refactor the function in @packages/functions/src/api/index.ts?
+```
+
+From here you can tweak the prompt and ask opencode to try again.
+
+:::tip
+You can run `/undo` multiple times to undo multiple changes.
+:::
+
+Or you **can redo** the changes using the `/redo` command.
+
+```bash frame="none"
+/redo
+```
+
+---
+
+## Share
+
+The conversations that you have with opencode can be [shared with your
+team](/docs/share).
+
+```bash frame="none"
+/share
+```
+
+This will create a link to the current conversation and copy it to your clipboard.
+
+:::note
+Conversations are not shared by default.
+:::
+
+Here's an [example conversation](https://opencode.ai/s/4XP1fce5) with opencode.
+
+---
+
+## Customize
+
+And that's it! You are now a pro at using opencode.
+
+To make it your own, we recommend [picking a theme](/docs/themes), [customizing the keybinds](/docs/keybinds), [configuring code formatters](/docs/formatters), [creating custom commands](/docs/commands), or playing around with the [opencode config](/docs/config).
diff --git a/packages/web/src/content/docs/docs/keybinds.mdx b/packages/web/src/content/docs/keybinds.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/keybinds.mdx
rename to packages/web/src/content/docs/keybinds.mdx
diff --git a/packages/web/src/content/docs/docs/lsp.mdx b/packages/web/src/content/docs/lsp.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/lsp.mdx
rename to packages/web/src/content/docs/lsp.mdx
diff --git a/packages/web/src/content/docs/docs/mcp-servers.mdx b/packages/web/src/content/docs/mcp-servers.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/mcp-servers.mdx
rename to packages/web/src/content/docs/mcp-servers.mdx
diff --git a/packages/web/src/content/docs/docs/models.mdx b/packages/web/src/content/docs/models.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/models.mdx
rename to packages/web/src/content/docs/models.mdx
diff --git a/packages/web/src/content/docs/docs/modes.mdx b/packages/web/src/content/docs/modes.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/modes.mdx
rename to packages/web/src/content/docs/modes.mdx
diff --git a/packages/web/src/content/docs/docs/permissions.mdx b/packages/web/src/content/docs/permissions.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/permissions.mdx
rename to packages/web/src/content/docs/permissions.mdx
diff --git a/packages/web/src/content/docs/docs/plugins.mdx b/packages/web/src/content/docs/plugins.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/plugins.mdx
rename to packages/web/src/content/docs/plugins.mdx
diff --git a/packages/web/src/content/docs/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx
similarity index 99%
rename from packages/web/src/content/docs/docs/providers.mdx
rename to packages/web/src/content/docs/providers.mdx
index 2e8a3b5a..c25a1c7d 100644
--- a/packages/web/src/content/docs/docs/providers.mdx
+++ b/packages/web/src/content/docs/providers.mdx
@@ -3,7 +3,7 @@ title: Providers
description: Using any LLM provider in opencode.
---
-import config from "../../../../config.mjs"
+import config from "../../../config.mjs"
export const console = config.console
opencode uses the [AI SDK](https://ai-sdk.dev/) and [Models.dev](https://models.dev) to support for **75+ LLM providers** and it supports running local models.
diff --git a/packages/web/src/content/docs/docs/rules.mdx b/packages/web/src/content/docs/rules.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/rules.mdx
rename to packages/web/src/content/docs/rules.mdx
diff --git a/packages/web/src/content/docs/docs/sdk.mdx b/packages/web/src/content/docs/sdk.mdx
similarity index 99%
rename from packages/web/src/content/docs/docs/sdk.mdx
rename to packages/web/src/content/docs/sdk.mdx
index aaf218cc..1e65064f 100644
--- a/packages/web/src/content/docs/docs/sdk.mdx
+++ b/packages/web/src/content/docs/sdk.mdx
@@ -3,7 +3,7 @@ title: SDK
description: Type-safe JS client for opencode server.
---
-import config from "../../../../config.mjs"
+import config from "../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
The opencode JS/TS SDK provides a type-safe client for interacting with the server.
diff --git a/packages/web/src/content/docs/docs/server.mdx b/packages/web/src/content/docs/server.mdx
similarity index 99%
rename from packages/web/src/content/docs/docs/server.mdx
rename to packages/web/src/content/docs/server.mdx
index f63adb6c..0713cce6 100644
--- a/packages/web/src/content/docs/docs/server.mdx
+++ b/packages/web/src/content/docs/server.mdx
@@ -3,7 +3,7 @@ title: Server
description: Interact with opencode server over HTTP.
---
-import config from "../../../../config.mjs"
+import config from "../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
The `opencode serve` command runs a headless HTTP server that exposes an OpenAPI endpoint that an opencode client can use.
diff --git a/packages/web/src/content/docs/docs/share.mdx b/packages/web/src/content/docs/share.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/share.mdx
rename to packages/web/src/content/docs/share.mdx
diff --git a/packages/web/src/content/docs/docs/themes.mdx b/packages/web/src/content/docs/themes.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/themes.mdx
rename to packages/web/src/content/docs/themes.mdx
diff --git a/packages/web/src/content/docs/docs/troubleshooting.mdx b/packages/web/src/content/docs/troubleshooting.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/troubleshooting.mdx
rename to packages/web/src/content/docs/troubleshooting.mdx
diff --git a/packages/web/src/content/docs/docs/tui.mdx b/packages/web/src/content/docs/tui.mdx
similarity index 100%
rename from packages/web/src/content/docs/docs/tui.mdx
rename to packages/web/src/content/docs/tui.mdx
diff --git a/packages/web/src/content/docs/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx
similarity index 98%
rename from packages/web/src/content/docs/docs/zen.mdx
rename to packages/web/src/content/docs/zen.mdx
index 46d45793..b3de5902 100644
--- a/packages/web/src/content/docs/docs/zen.mdx
+++ b/packages/web/src/content/docs/zen.mdx
@@ -3,7 +3,7 @@ title: Zen
description: Curated list of models provided by opencode.
---
-import config from "../../../../config.mjs"
+import config from "../../../config.mjs"
export const console = config.console
export const email = `mailto:${config.email}`