본문으로 건너뛰기
cccskills
무료GitHub에 공개

add-opencode

Add OpenCode as an agent runtime in NanoClaw to use models from OpenAI, Google, OpenRouter, DeepSeek, and other supported services. The skill covers installation, authentication, group selection, and default model changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Use OpenCode as an agent provider. OpenRouter, OpenAI, Google, DeepSeek, etc. via OpenCode config — not the Anthropic Agent SDK. Per group via `ncl groups config update --provider opencode`; host passes OPENCODE_* and XDG mount when spawning containers.

연동 도구OpenAI
설치 방법 보기

이럴 때 유용합니다

  • Adding OpenCode to an existing NanoClaw installation
  • Switching an agent group to OpenCode
  • Changing the default model without signing in again
  • Recovering an expired ChatGPT login

포함된 파일(42)

  • SKILL.md19.6 KB
  • apply-fixtures.json303 B
  • ARCHITECTURE.md8.0 KB
  • payload/container/agent-runner/src/provider-contracts/opencode.ts866 B
  • payload/container/agent-runner/src/providers/mcp-to-opencode.test.ts2.7 KB
  • payload/container/agent-runner/src/providers/mcp-to-opencode.ts1.6 KB
  • payload/container/agent-runner/src/providers/opencode-auth.test.ts3.1 KB
  • payload/container/agent-runner/src/providers/opencode-auth.ts1.7 KB
  • payload/container/agent-runner/src/providers/opencode-config.ts10.0 KB
  • payload/container/agent-runner/src/providers/opencode-memory.ts4.4 KB
  • payload/container/agent-runner/src/providers/opencode-registration.test.ts625 B
  • payload/container/agent-runner/src/providers/opencode-turn.ts14.1 KB
  • payload/container/agent-runner/src/providers/opencode.attachments.test.ts4.6 KB
  • payload/container/agent-runner/src/providers/opencode.config.test.ts16.2 KB
  • payload/container/agent-runner/src/providers/opencode.conformance.test.ts253 B
  • payload/container/agent-runner/src/providers/opencode.empty-resume.test.ts14.7 KB
  • payload/container/agent-runner/src/providers/opencode.factory.test.ts331 B
  • payload/container/agent-runner/src/providers/opencode.memory.test.ts6.9 KB
  • payload/container/agent-runner/src/providers/opencode.native.test.ts17.6 KB
  • payload/container/agent-runner/src/providers/opencode.question.test.ts7.6 KB
  • payload/container/agent-runner/src/providers/opencode.shared-runtime.test.ts30.8 KB
  • payload/container/agent-runner/src/providers/opencode.sse-cleanup.test.ts6.4 KB
  • payload/container/agent-runner/src/providers/opencode.ts31.4 KB
  • payload/scripts/opencode-auth-config.test.ts27.1 KB
  • payload/scripts/opencode-auth.test.ts19.7 KB
  • payload/scripts/opencode-auth.ts21.4 KB
  • payload/scripts/opencode-gateway.test.ts7.0 KB
  • payload/scripts/opencode-host.test.ts13.4 KB
  • payload/scripts/opencode-host.ts8.9 KB
  • payload/scripts/opencode-model-config.ts8.6 KB
  • payload/scripts/opencode-models.test.ts10.6 KB
  • payload/scripts/opencode-models.ts4.0 KB
  • payload/scripts/opencode-vault.test.ts3.3 KB
  • payload/scripts/opencode-vault.ts2.6 KB
  • payload/scripts/tsconfig.opencode-auth.json171 B
  • payload/setup/providers/opencode.test.ts1.2 KB
  • payload/setup/providers/opencode.ts806 B
  • payload/src/provider-contracts/opencode.ts2.9 KB
  • payload/src/providers/opencode-auth-stub.ts909 B
  • payload/src/providers/opencode-registration.test.ts8.5 KB
  • payload/src/providers/opencode.ts2.8 KB
  • REMOVE.md3.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

OpenCode agent provider

Install OpenCode as an optional NanoClaw runtime. The payload is included in this skill; it needs no separate provider branch. It uses the upstream runtime, instructions, host, and setup metadata contracts. The host contract remains at version 1; the container owns its non-secret ChatGPT placeholder file.

OpenCode is offered by the standard setup provider picker. Existing installs can add or authenticate it with pnpm exec tsx setup/index.ts --step provider-auth opencode. To replace an installed payload and update its pins, append --refresh; back up local payload edits first. Ordinary re-authentication leaves installed files and the container image alone. Backend defaults are installation-wide; model and reasoning effort can be overridden per group through the existing container configuration. Per-group backend/auth selection and structured channel attachment transport are separate work.

Authentication checks the installed files, registration lines, and exact pins against this skill's declarations without launching a subprocess or container. Install and refresh run the existing provider contract verification; the build step owns image freshness. Model selection does not repeat installation checks. A working backend and account are checked separately by sending a real request.

Install

After installing this payload, run pnpm exec tsx scripts/opencode-host.ts --configure for host OpenCode setup, or use --update / --debug for the corresponding operational skill. An existing OpenCode CLI can also run directly in the checkout; it discovers .claude/skills natively. Host sign-in uses OpenCode's own settings and is independent of the container's gateway credentials. Installed setup failures use the existing provider failure-assist hook, including wizard authentication and installation-check failures. Host diagnostic context is model input and may remain in native OpenCode history; deleting its private temporary file does not erase those records. The helper requires stable OpenCode 1.18.25 or newer with --prompt and prefers the newest compatible installation it finds. --debug, --update and failure help launch it with an OPENCODE_PERMISSION override, so OpenCode asks before every edit and command even when the operator's top-level config allows them (OpenCode itself skips the prompt for a bare redirection with no command, such as > file). --configure keeps OpenCode's native permissions. Automatic help before payload installation is optional and is not part of the runtime contract.

Install and refresh require host contract version 1 and credential-connection seam version 1. The compatibility predicate below guards every subsequent step, so an unsupported core receives no partial payload or dependency changes. Update core first if it reports a missing prerequisite.

node -e "const fs=require('fs'); const p='src/provider-contracts/registry.ts', g='setup/gateways/credential-store.ts'; if(fs.existsSync(p) && /PROVIDER_HOST_CONTRACT_SEAM_VERSION = 1/.test(fs.readFileSync(p,'utf8')) && fs.existsSync(g) && /PROVIDER_CREDENTIAL_CONNECTION_SEAM_VERSION = 1/.test(fs.readFileSync(g,'utf8'))) console.log('yes'); else console.log('no')"

Copy only the files listed below from this skill's payload/ to the matching paths at the project root. Do not copy ignored dependency directories or other generated native-test files. These are skill-owned files; overwrite them together when refreshing the skill. Keep the core-owned cwd-shim.ts, registries, and contract realization files in place.

When refreshing an older installation, remove its unused opencode-memory-plugin.ts, opencode.compaction.test.ts, and dedicated opencode-managed-config tree from container/agent-runner/src/providers/. Recreate affected containers after the refresh to discard their old config symlinks. Keep other tools' settings and persisted session data.

The obsolete host Dockerfile guard must also be removed during refresh; current OpenCode installation is declared by the SDK and CLI manifests.

rm -f src/opencode-dockerfile.test.ts
payload/container/agent-runner/src/provider-contracts/opencode.ts -> container/agent-runner/src/provider-contracts/opencode.ts
payload/container/agent-runner/src/providers/mcp-to-opencode.test.ts -> container/agent-runner/src/providers/mcp-to-opencode.test.ts
payload/container/agent-runner/src/providers/mcp-to-opencode.ts -> container/agent-runner/src/providers/mcp-to-opencode.ts
payload/container/agent-runner/src/providers/opencode-config.ts -> container/agent-runner/src/providers/opencode-config.ts
payload/container/agent-runner/src/providers/opencode-memory.ts -> container/agent-runner/src/providers/opencode-memory.ts
payload/container/agent-runner/src/providers/opencode-registration.test.ts -> container/agent-runner/src/providers/opencode-registration.test.ts
payload/container/agent-runner/src/providers/opencode-turn.ts -> container/agent-runner/src/providers/opencode-turn.ts
payload/container/agent-runner/src/providers/opencode.attachments.test.ts -> container/agent-runner/src/providers/opencode.attachments.test.ts
payload/container/agent-runner/src/providers/opencode.config.test.ts -> container/agent-runner/src/providers/opencode.config.test.ts
payload/container/agent-runner/src/providers/opencode.conformance.test.ts -> container/agent-runner/src/providers/opencode.conformance.test.ts
payload/container/agent-runner/src/providers/opencode.empty-resume.test.ts -> container/agent-runner/src/providers/opencode.empty-resume.test.ts
payload/container/agent-runner/src/providers/opencode.factory.test.ts -> container/agent-runner/src/providers/opencode.factory.test.ts
payload/container/agent-runner/src/providers/opencode.memory.test.ts -> container/agent-runner/src/providers/opencode.memory.test.ts
payload/container/agent-runner/src/providers/opencode.native.test.ts -> container/agent-runner/src/providers/opencode.native.test.ts
payload/container/agent-runner/src/providers/opencode.question.test.ts -> container/agent-runner/src/providers/opencode.question.test.ts
payload/container/agent-runner/src/providers/opencode.shared-runtime.test.ts -> container/agent-runner/src/providers/opencode.shared-runtime.test.ts
payload/container/agent-runner/src/providers/opencode.sse-cleanup.test.ts -> container/agent-runner/src/providers/opencode.sse-cleanup.test.ts
payload/container/agent-runner/src/providers/opencode.ts -> container/agent-runner/src/providers/opencode.ts
payload/container/agent-runner/src/providers/opencode-auth.ts -> container/agent-runner/src/providers/opencode-auth.ts
payload/container/agent-runner/src/providers/opencode-auth.test.ts -> container/agent-runner/src/providers/opencode-auth.test.ts
payload/scripts/opencode-auth-config.test.ts -> scripts/opencode-auth-config.test.ts
payload/scripts/opencode-auth.test.ts -> scripts/opencode-auth.test.ts
payload/scripts/opencode-auth.ts -> scripts/opencode-auth.ts
payload/scripts/opencode-gateway.test.ts -> scripts/opencode-gateway.test.ts
payload/scripts/opencode-host.ts -> scripts/opencode-host.ts
payload/scripts/opencode-host.test.ts -> scripts/opencode-host.test.ts
payload/scripts/opencode-model-config.ts -> scripts/opencode-model-config.ts
payload/scripts/opencode-models.test.ts -> scripts/opencode-models.test.ts
payload/scripts/opencode-models.ts -> scripts/opencode-models.ts
payload/scripts/opencode-vault.test.ts -> scripts/opencode-vault.test.ts
payload/scripts/opencode-vault.ts -> scripts/opencode-vault.ts
payload/scripts/tsconfig.opencode-auth.json -> scripts/tsconfig.opencode-auth.json
payload/setup/providers/opencode.test.ts -> setup/providers/opencode.test.ts
payload/setup/providers/opencode.ts -> setup/providers/opencode.ts
payload/src/provider-contracts/opencode.ts -> src/provider-contracts/opencode.ts
payload/src/providers/opencode-auth-stub.ts -> src/providers/opencode-auth-stub.ts
payload/src/providers/opencode-registration.test.ts -> src/providers/opencode-registration.test.ts
payload/src/providers/opencode.ts -> src/providers/opencode.ts

Append import './opencode.js'; once to each of the five setup, provider, and contract barrels below. Keep all existing imports.

import './opencode.js';
import './opencode.js';
import './opencode.js';
import './opencode.js';
import './opencode.js';

Install the SDK in the runner's Bun package and add the matching CLI manifest entry with trusted postinstall enabled. Both pins must remain exactly 1.18.25. When refreshing an existing install, replace both old pin entries; presence alone does not establish compatibility. This updates the runner package and lockfile; there is no host SDK dependency.

@opencode-ai/sdk@1.18.25
{"name":"opencode-ai","version":"1.18.25","onlyBuilt":true}

Run the host build, runner typecheck, host/auth tests, and all provider tests. The tests exercise real barrel registration and the provider-owned contract conformance suite. All checks must pass before rebuilding the agent image.

pnpm run build
pnpm exec tsc -p scripts/tsconfig.opencode-auth.json
cd container/agent-runner && bun run typecheck
pnpm exec vitest run src/providers/opencode-registration.test.ts scripts/opencode-auth*.test.ts scripts/opencode-gateway.test.ts scripts/opencode-host.test.ts scripts/opencode-models.test.ts scripts/opencode-vault.test.ts setup/providers
cd container/agent-runner && bun test --isolate src/providers/opencode*.test.ts src/providers/mcp-to-opencode.test.ts

Build the local image with ./container/build.sh build. The new SDK dependency requires a full local build; a CLI-only overlay cannot supply it. This switches a published-image installation to locally built images.

./container/build.sh build

Authenticate and select a group

Run pnpm exec tsx setup/index.ts --step provider-auth opencode from the project root to install a missing payload and image, then choose authentication. If the provider is already installed, this command leaves its files and image alone; append --refresh only when intentionally replacing its payload and pins. Choose ChatGPT sign-in, a local OpenAI-compatible endpoint, OpenRouter, DeepSeek, or a supported native backend. Automatic API-key configuration supports OpenAI, OpenRouter, DeepSeek, Google, and Anthropic; other native authentication schemes require separate integration. The command stores credentials in the configured credential gateway selected by NANOCLAW_GATEWAY_PROVIDER and backend defaults in .env. The full setup wizard also offers this flow and selects OpenCode for new groups only after configuration succeeds. The standalone command leaves the instance default unchanged.

For ChatGPT, native OpenCode sign-in runs in a temporary container directory. OpenCode parses its own login file into the seam's chatgpt OAuth profile, hands it to the selected gateway, and removes the temporary native file. The gateway stores it in its own native format, and setup may wait for the gateway to confirm the login works; the gateway's skill describes both. The container initializes fixed nc-opencode-token-v1 placeholders before every OpenCode server start at $XDG_DATA_HOME/opencode/auth.json; tokens and account metadata stay in the gateway. API-key mode clears stale OAuth state. Refresh the payload and restart the host service and affected containers when updating from the earlier read-only-bind candidate; old containers retain their mounts until recreated.

Native model domains and the configured HTTPS model host belong to OpenCode’s provider contract. Your gateway's skill says which endpoints it accepts and whether a manual grant or a manual re-auth after expiry applies. Do not put a key in .env, command arguments, or the container environment.

After installing on a running NanoClaw host, restart its actual host service before waking any OpenCode group. This reloads the host provider registration and backend settings. On Linux use systemctl --user restart nanoclaw-v2-<install-slug>.service (or the installation's system service command); on macOS use its normal launchd restart workflow. Confirm the service is running, then select and restart the test group:

ncl groups config update --id <group-id> --provider opencode
ncl groups restart --id <group-id>

Send a message and verify a reply, then send a second message to check session continuation. The test requires a reachable backend and the correct gateway secret grant. No provider is switched by the install steps alone. If memory needs to move from another provider, follow /migrate-memory before switching.

Recover a ChatGPT login

OAuth refresh belongs to the credential gateway; your gateway's skill says whether re-auth after expiry is manual.

The container uses only a fixed sentinel. Do not implement token refresh in the provider or copy live credentials into a group. A saved credential is not proof that authentication still works.

If a request fails because the login expired or was revoked, run on the host:

pnpm exec tsx scripts/opencode-auth.ts --reauth
# For a browser on the host instead of device pairing:
pnpm exec tsx scripts/opencode-auth.ts --reauth --method browser

This pairs again and updates the existing gateway credential ID, preserving its grants and all backend/model defaults. If no credential exists, setup creates one and applies the gateway’s grant behavior described above. Retry the failed request.

An unavailable vault, duplicate name, or incompatible credential entry stops the operation before sign-in. Resolve the gateway/permissions or entry metadata in the selected gateway and retry; do not delete a credential to force setup to run. Failed pairing leaves the old entry intact; failed saves leave defaults unchanged. Temporary native credentials are removed after either success or failure.

API-key rotation keeps the same credential ID. Changing its exact host requires confirmation; whether the stored key can move with it is the gateway's decision, and a blank answer keeps a key only where the gateway allows. Setup never retrieves the stored key.

Change or refresh the default model

Run pnpm exec tsx scripts/opencode-models.ts to keep the current default or choose another model without signing in again. This changes only OPENCODE_MODEL; the small model, endpoint, credentials, and group overrides stay as configured. Restart the NanoClaw host and affected groups afterward.

pnpm exec tsx scripts/opencode-models.ts --list --refresh
pnpm exec tsx scripts/opencode-models.ts --model openai/<model-id>

Discovery runs the installed container's opencode models command and filters for text and tool support, including its ChatGPT-specific filter when selected. Only a disposable fixed sentinel is used for that filter; no credentials or host OpenCode files are mounted for discovery. --refresh fetches the runtime's current model catalog; it does not upgrade the CLI or SDK. Account access is checked by a real request, not by catalog membership. Standalone host OpenCode is never consulted. If discovery is unavailable, keep the existing model or enter an id manually. There is no static fallback list. A custom OpenAI-compatible endpoint is queried through its own /models endpoint; other custom endpoints use manual IDs. The configured backend must match the model prefix; changing backends still uses the authentication command. Exported defaults take precedence over .env, so conflicting exported values must be cleared before changing the saved model.

This separate command avoids rerunning authentication merely to change a model, and querying the container avoids disagreement with a separately upgraded host CLI. New models needing newer runtime support require a matched CLI/SDK update and image rebuild. Model changes do not automatically change context limits or modalities; adjust any custom overrides to match the new model.

Backend defaults

The host reads these values from exported environment variables, then .env. Put comments on separate lines. These settings affect only OpenCode containers.

  • OPENCODE_PROVIDER: OpenCode backend ID, such as openai or openrouter.
  • OPENCODE_MODEL: default full provider/model ID. The group's model wins.
  • OPENCODE_SMALL_MODEL: optional separate model for lighter work, using the same backend prefix as OPENCODE_PROVIDER.
  • OPENCODE_BASE_URL: backend URL, or native to use the native endpoint. For an openai backend with a custom URL, the runtime uses Chat Completions. An absent setting retains the historical ANTHROPIC_BASE_URL fallback for existing installs. The auth command writes this provider-owned setting and preserves Claude's endpoint.
  • OPENCODE_AUTH_MODE=chatgpt: initialize the container's non-secret ChatGPT stub. Leave unset for API-key and local endpoints; the auth command handles this when switching.
  • OPENCODE_MODEL_CONTEXT_LIMIT: positive token count for the main model.
  • OPENCODE_MODEL_OUTPUT_LIMIT: positive output limit, requiring a context limit.
  • OPENCODE_MODEL_INPUT_MODALITIES: optional comma-separated main-model input types from text,audio,image,video,pdf.
  • OPENCODE_NATIVE_ATTACHMENT_MAX_COUNT / OPENCODE_NATIVE_ATTACHMENT_MAX_BYTES: optional limits for already-staged structured attachments. Upstream channel attachment transport remains text-only until that separate feature lands.

Custom model limits and modalities apply only to the main model. NanoClaw supplies MCP configuration and container policy. See ARCHITECTURE.md for turn completion, memory snapshots, offline startup, cancellation, and MCP timeouts.

For reproducible native integration coverage, download the official OpenCode 1.18.25 binary and run from container/agent-runner:

OPENCODE_TEST_BINARY=/absolute/path/opencode bun test --isolate src/providers/opencode.native.test.ts

The test checks the binary version, starts a local model fixture, and exercises native tools, automatic and overflow compaction, cold resume, child memory, terminal errors, a 65-second MCP call, and cancellation. It writes its requests and server logs to the temporary evidence directory printed at completion. It takes about two minutes and requires no account credentials. The ordinary test suite skips this check unless OPENCODE_TEST_BINARY is set.

To remove the provider, follow REMOVE.md.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Equip NanoClaw agents to convert attached office documents into Markdown locally using Firecrawl AnyDoc. Agents can read Word, PowerPoint, Excel, and text-based PDF files without uploading them to an external parsing service.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Reading and summarizing attached office documents
  • Converting documents without uploading them to an external service
  • Extracting text from text-based PDFs
nanocoai/nanoclaw3.1만2026년 10월 18일 업데이트

Let a NanoClaw container agent call local models running in Atomic Chat. The skill adds an MCP server, a connection that exposes model listing and text generation as tools, while Claude continues to coordinate the work.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Delegate part of Claude's work to a local model
  • List models available in Atomic Chat
  • Generate an answer with a specified local model
nanocoai/nanoclaw3.1만2026년 10월 18일 업데이트

Add a read-only web dashboard for browsing NanoClaw agents, sessions, and other resources. It builds tables from command-line JSON output and includes message activity charts, recent logs, and a viewer for skills, profiles, and CLAUDE.md files.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Check agent and session status in a browser
  • Review message counts and daily activity
  • Read recent host logs
nanocoai/nanoclaw3.1만2026년 10월 18일 업데이트

add-codex

무료

Add Codex as the agent that plans tasks and coordinates tools in NanoClaw. Choose it for individual groups alongside Claude, with conversation history and session resume using a ChatGPT subscription or OpenAI API key.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Adding Codex as a NanoClaw agent provider
  • Choosing Claude or Codex for each group
  • Setting up ChatGPT or API key authentication
nanocoai/nanoclaw3.1만2026년 10월 18일 업데이트

Install a local NanoClaw dashboard to inspect agents, sessions, channels, messages, and users. It displays token usage, context usage, activity, and live logs using periodic data snapshots and a log forwarding module.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Checking agent and session status in one place
  • Reviewing token and context usage
  • Following live logs with level filters
nanocoai/nanoclaw3.1만2026년 10월 18일 업데이트

Connect NanoClaw agents to DeltaChat for email-based messaging with end-to-end encryption. Set up direct chats or small group conversations, exchange file attachments, and link each chat to the appropriate agent group.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Chatting with a personal assistant through DeltaChat
  • Using an agent in a small DeltaChat group
  • Exchanging files with an agent in chat
nanocoai/nanoclaw3.1만2026년 10월 18일 업데이트

nanocoai의 스킬 모두 보기

이 스킬의 문제 신고