Skip to main content

ai-assist

This skill should be used when the user wants AI-powered deployment debugging on Dokploy — wiring up an LLM provider (OpenAI, Anthropic, Gemini, Ollama, OpenRouter, etc.), summarising build logs with AI, or asking Dokploy for a next-step suggestion. Triggers: "analyze my failed deploy with AI", "ai analyze logs dokploy", "set up dokploy ai", "configure ai provider in dokploy", "why is dokploy not suggesting fixes", "dokploy ai-analyzeLogs", "dokploy ai-suggest".

Source facts

Repository
Agents-Store/opencode-plugins
Last source activity
October 3, 2026 at 23:16
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ai-assist
description
This skill should be used when the user wants AI-powered deployment debugging on Dokploy — wiring up an LLM provider (OpenAI, Anthropic, Gemini, Ollama, OpenRouter, etc.), summarising build logs with AI, or asking Dokploy for a next-step suggestion. Triggers: "analyze my failed deploy with AI", "ai analyze logs dokploy", "set up dokploy ai", "configure ai provider in dokploy", "why is dokploy not suggesting fixes", "dokploy ai-analyzeLogs", "dokploy ai-suggest".
# Dokploy AI Assistant Integration Dokploy v0.29 introduced an **AI router** that lets the server call out to an LLM provider to (a) analyse a failed deployment's build log and (b) suggest next steps. The `ai-*` MCP tools are how plugins drive that integration. This skill teaches: which providers Dokploy supports, how to wire one up, how to invoke the two flagship endpoints (`analyzeLogs` and `suggest`), and what to do when AI is **not** configured. > The AI router calls run **on the Dokploy server**, not locally — Dokploy holds the provider credentials. The MCP tools just orchestrate. --- ## Tool inventory | Tool | Purpose | |---|---| | `mcp__plugin_dokploy-dev_dokploy__ai-getEnabledProviders` | List provider integrations that are *both* configured and enabled. If empty, no AI is available | | `mcp__plugin_dokploy-dev_dokploy__ai-getModels` | List models a candidate endpoint advertises. Takes `{ apiUrl, apiKey }` (NOT `aiId`) | | `mcp__plugin_dokploy-dev_dokploy__ai-getAll` | List all configured providers (enabled or not) | | `mcp__plugin_dokploy-dev_dokploy__ai-get` / `mcp__plugin_dokploy-dev_dokploy__ai-one` | Read one provider's config | | `mcp__plugin_dokploy-dev_dokploy__ai-create` | Add a new provider (API key + model + endpoint) | | `mcp__plugin_dokploy-dev_dokploy__ai-update` | Update an existing provider's config | | `mcp__plugin_dokploy-dev_dokploy__ai-delete` | Remove a provider | | `mcp__plugin_dokploy-dev_dokploy__ai-testConnection` | Validate a candidate payload BEFORE saving. Takes `{ apiUrl, apiKey, model }` (NOT `aiId`) | | `mcp__plugin_dokploy-dev_dokploy__ai-getCustomProviders` | List org-defined custom provider presets (v0.29.13+) | | `mcp__plugin_dokploy-dev_dokploy__ai-saveCustomProviders` | Save org custom provider presets: `{ providers }` | | `mcp__plugin_dokploy-dev_dokploy__ai-deploy` | (Dokploy admin) deploy the AI orchestrator side-service | | `mcp__plugin_dokploy-dev_dokploy__ai-analyzeLogs` | **Headline feature:** summarise log **text you pass in** with the configured LLM, return root-cause + suggested fix. Signature: `{ aiId, logs, context: "build"\|"runtime" }` — NOT `{ deploymentId }` | | `mcp__plugin_dokploy-dev_dokploy__ai-suggest` | Ask the LLM for next-step recommendations. Signature: `{ aiId, input, serverId? }` — `input` is the question/state text | --- ## Step 1 — Check whether AI is already configured Always do this first. If a provider already exists and is enabled, skip ahead to Step 3. ``` mcp__plugin_dokploy-dev_dokploy__ai-getEnabledProviders ``` | Response | Meaning | |---|---| | Non-empty array | At least one provider is live — record the `aiId` of the one you'll use | | Empty array | No provider is enabled — either no provider exists, or all are disabled. Continue to Step 2 | Cross-check with `ai-getAll` if the enabled list is empty — there may be providers configured but turned off (`isEnabled: false`). --- ## Step 2 — Configure a provider (only if none enabled) Dokploy's AI router is provider-agnostic — anything that speaks the OpenAI chat-completions API works. Common choices: | Provider | `apiUrl` value | Notes | |---|---|---| | OpenAI | `https://api.openai.com/v1` | Use models like `gpt-4o-mini` for cost/speed | | Anthropic (via proxy) | `https://api.anthropic.com/v1` | Many users front Claude with an OpenAI-compatible proxy | | Google Gemini | `https://generativelanguage.googleapis.com/v1beta/openai` | OpenAI-compatible endpoint exposed by Google | | OpenRouter | `https://openrouter.ai/api/v1` | Single key, many models — convenient for mixing | | Groq | `https://api.groq.com/openai/v1` | Cheap & fast for log triage | | Ollama (self-hosted) | `http://<host>:11434/v1` | No API key required; model must be pulled on the server | | Self-hosted (vLLM, LM Studio, etc.) | provider-specific | Same shape — OpenAI-compatible | ### Test, then create the provider `ai-testConnection` and `ai-getModels` take the **candidate payload** (`apiUrl` + `apiKey`), not an `aiId` — so test BEFORE saving: ``` 1. mcp__plugin_dokploy-dev_dokploy__ai-testConnection → { apiUrl: "https://api.openai.com/v1", apiKey: "<secret>", model: "gpt-4o-mini" } → returns { ok: true/false, error?: string } 2. mcp__plugin_dokploy-dev_dokploy__ai-create # only after the test passes → { name: "openai-prod", apiKey: "<secret>", apiUrl: "https://api.openai.com/v1", model: "gpt-4o-mini", isEnabled: true } → returns { aiId } 3. (optional) mcp__plugin_dokploy-dev_dokploy__ai-getModels → { apiUrl: "https://api.openai.com/v1", apiKey: "<secret>" } # NOT aiId → returns the endpoint's model list; useful if you want to switch the chosen model ``` If `testConnection` returns `ok: false`, do not move on. Common causes: - Wrong `apiUrl` (forgot `/v1`, used the wrong path). - Invalid / expired API key. - Self-hosted endpoint not reachable from the Dokploy server's network namespace. Disable rather than delete a misconfigured provider with `ai-update` `{ aiId, isEnabled: false }` — that way audit history is preserved. --- ## Step 3 — Analyse a failed deployment This is the canonical workflow used by the [`debug-deploy`](../debug-deploy/SKILL.md) skill and the `/dokploy-dev:analyze` command. **`ai-analyzeLogs` does not fetch logs for you — you fetch the text first** (via the [`read-logs`](../read-logs/SKILL.md) skill) and pass it in. ``` 1. Pick an enabled provider aiId = first entry from mcp__plugin_dokploy-dev_dokploy__ai-getEnabledProviders 2. Fetch the log text (read-logs skill) build failure → mcp__plugin_dokploy-dev_dokploy__deployment-readLogs { deploymentId, tail: 1000 } → context: "build" app runtime → mcp__plugin_dokploy-dev_dokploy__application-readLogs { applicationId, tail: 500 } → context: "runtime" compose runtime → loop compose-readLogs per container, concatenate → context: "runtime" 3. Analyse mcp__plugin_dokploy-dev_dokploy__ai-analyzeLogs → { aiId, logs: "<the text from step 2>", context: "build" | "runtime" } → returns a root-cause summary + suggested fix 4. Apply the suggested fix → Update env vars / build type / Dockerfile / domain config, then `application-redeploy` / `compose-redeploy` ``` The response is a free-form LLM summary. Read it critically — the LLM doesn't *know* your codebase, only the log text you sent. If the suggestion contradicts what the log clearly shows, trust the log. ### Cost / latency note You control how much log goes to the LLM via the `tail` parameter when you fetch it. A stuck container restarting for hours can produce huge logs — keep `tail` modest (e.g. 500–1000) or use `search` to pre-filter to error lines before passing the text to `ai-analyzeLogs`, so you don't blow past the provider's context window. --- ## Step 4 — Open-ended suggestions When there's no specific failure but you want guidance ("what should I tighten on this app before going to production?"): ``` mcp__plugin_dokploy-dev_dokploy__ai-suggest → { aiId: "<enabled provider>", input: "<the question / state description text>", serverId?: "<optional>" } → returns suggestions ``` `ai-suggest` differs from `ai-analyzeLogs` in that `input` is a free-form question or state description you compose (there is no `applicationId`/`prompt` form) — describe the app's config, env, and recent history in the `input` text. Use it for: - "Is my health-check configured correctly?" - "Should I switch this from Nixpacks to Dockerfile?" - "Recommend env vars I might be missing for Next.js production." - "Anything dangerous about my Traefik labels?" --- ## Fallback: when AI is not available If you cannot enable a provider (offline server, no budget, policy), the debugging workflow still works without AI — it just falls back to the manual log-grep patterns in [`debug-deploy`](../debug-deploy/SKILL.md) Step 2. Communicate this to the user explicitly: > "Dokploy AI is not configured. I'll work through the build log manually. To enable AI-summarised analysis later, configure a provider via `ai-create` (see the `ai-assist` skill)." Do not block on AI. The plugin must remain useful without it. --- ## Security / privacy considerations - **Provider sends build logs externally** — build logs can contain env var values from `RUN echo $SECRET >> build.log`-style mistakes. Audit before sending sensitive logs to a third-party LLM. - **Self-hosted Ollama / vLLM** is the most privacy-preserving option for regulated workloads. - **API keys live in Dokploy** — `ai-getAll` returns them masked. Rotate via `ai-update` if you suspect leakage. - **Audit log** — every `ai-analyzeLogs` / `ai-suggest` call is recorded in `auditLog-all`. Useful for cost attribution. --- ## Troubleshooting | Symptom | Likely cause | Fix | |---|---|---| | `ai-getEnabledProviders` empty after `ai-create` | Provider created with `isEnabled: false` | `ai-update { aiId, isEnabled: true }` | | `ai-testConnection` ok but `ai-analyzeLogs` times out | Log too large for provider context window | Switch to a larger-context model via `ai-update`, or truncate the log | | `ai-analyzeLogs` returns generic advice | Log was empty or only contained Dokploy framing | Confirm the deployment actually produced output — check `deployment-all`'s `logPath` | | 401 / 403 from `analyzeLogs` only | Provider key revoked or org rate-limited | Re-test with `ai-testConnection`; rotate key | | Tool not found (`mcp__plugin_dokploy-dev_dokploy__ai-…`) | `DOKPLOY_ENABLED_TAGS` or a `DOKPLOY_TOOL_PRESET` is filtering it out — **no preset includes `ai`** | Add `ai` to `DOKPLOY_ENABLED_TAGS` (it overrides the preset) in `.mcp.json` `env`, or use the default preset `all` | | Dokploy is older than v0.29 | AI router not yet present | Upgrade Dokploy server; the official `@dokploy/mcp` requires v0.29+ for the `ai` router. Custom provider presets (`ai-getCustomProviders`/`ai-saveCustomProviders`) need >= v0.29.13 | --- ## See also - [`debug-deploy`](../debug-deploy/SKILL.md) — chains `ai-analyzeLogs` into the broader failure workflow - [`api-reference/references/ai-and-debugging.md`](../api-reference/references/ai-and-debugging.md) — REST API surface for the `ai` router - `/dokploy-dev:analyze` command — one-shot wrapper around `ai-analyzeLogs` for the most recent failed deploy
View on GitHub