From Monk DevOps Agent
Deploy and operate applications with Monk through the local monk-agent MCP companion. Use when the user wants to install Monk, sign in, analyze a project, deploy locally or to cloud, inspect workloads, provide secrets securely, or troubleshoot Monk-managed infrastructure. MVP hosts are Claude Code, Codex, and Cursor.
How this skill is triggered — by the user, by Claude, or both
Slash command
/monk:monkThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Monk is operated through a local companion named `monk-agent`. The companion
Monk is operated through a local companion named monk-agent. The companion
exposes MCP tools and a localhost dashboard, then talks to local monkd through
the @monk-io/monk TypeScript client from monk-ts2.
Target hosts for the MVP are Claude Code, Codex, and Cursor. Other Agent Skills clients are best-effort until tested.
Before deploying:
monk-agent. Verify with ONE cheap probe — call
monk.runtime.status or read monk://agent/status — before any other
work. If the monk.* tools are missing from your tool list or the probe
fails with a connection/transport error, STOP immediately: tell the user
the Monk MCP server is not connected to this session and how to reconnect,
then wait. Plugin updates restart monk-agent, so an existing session can
hold a stale MCP connection — that is the expected cause right after an
update. Do not delegate to subagents, inspect MCP config files, or probe
repeatedly to diagnose it; one failed probe is the answer.
monk.auth.start./mcp.codex mcp login monk.monk server.scripts/start-monk-agent.sh on macOS/Linux or
scripts/start-monk-agent.ps1 on Windows so the local MCP server is
installed and started. Do not fall back to direct monk CLI operations.monk-agent learns the active workspace from the MCP
roots capability when the host advertises it (Claude Code does;
capability-aware Codex/Cursor builds do too). When roots are present, no
explicit setup is required and you should not call monk.session.init
defensively. Call monk.session.init only when:
roots capability during initialize, orworkspaceRoot.
monk-agent never falls back to its own working directory.monk.auth.start.monk-agent requires Monk CLI and monkd locally.
If missing or broken, use monk.install.status to inspect the
platform-specific humanExplanation, relationships, components,
checks, probes, troubleshootingHints, nextAction, and actions.
Explain the current platform's install graph before running remediation.
monk.install.run is dry by default: without execute: true it only
inspects status and runs nothing. Use execute: true to run remediation.
Installation, upgrade, and repair actions also require approved: true
after explicit user or dashboard approval.Prefer monk-agent MCP tools and resources:
monk.agent.clear_state (only when the user explicitly asks to clear local Monk Agent state)monk.auth.statusmonk.auth.startmonk.install.statusmonk.install.runmonk.runtime.statusmonk.session.initmonk.scope.statusmonk.scope.bindmonk.org.usagemonk.org.billing_alerts.getmonk.org.billing_alerts.setmonk.project.analyzemonk.project.configuremonk.project.deploymonk.environment.listmonk.environment.selectmonk.capsule.setupmonk.capsule.listmonk.capsule.secrets.updatemonk.capsule.schedule.getmonk.capsule.schedule.updatemonk.cicd.setupmonk.cluster.statusmonk.cluster.peersmonk.cluster.providersmonk.cluster.listmonk.cluster.createmonk.cluster.growmonk.cluster.shrinkmonk.cluster.peer.removemonk.cluster.peer.tagmonk.cluster.deletemonk.cluster.exitmonk.cluster.provider.ensuremonk.cluster.pricemonk.cluster.estimatemonk.cluster.registry.statusmonk.cluster.registry.ensuremonk.cluster.registry.resetmonk.cluster.forgetmonk.cluster.switchmonk.cluster.join (portable saved-cluster store not implemented yet)monk.secret.requestmonk.credentials.requestmonk.workload.statusmonk.workload.logsmonk.workload.stopmonk.workload.deletemonk.workload.purgemonk.workload.unloadmonk.analyzer.diagnosemonk.docs.searchmonk.package.listmonk.package.searchmonk.package.infomonk.package.dumpmonk.dump (compatibility alias for package/template dump)monk.arrowscript.operator.groupsmonk.arrowscript.operator.listmonk.arrowscript.operator.searchmonk.arrowscript.operator.docmonk.feedback.submitmonk://agent/statusmonk://workspace/manifestmonk://workspace/workloadsmonk://workspace/deploysmonk://workspace/clustersmonk://workspace/cluster-contextmonk://workspace/scopemonk://workspace/feedmonk://workspace/eventsmonk://workspace/secretsmonk://workspace/diagnosticsmonk://account/scopesIf the host has not exposed these exact names yet, use the available Monk MCP
tooling only if it is backed by Monk or monk-agent. Do not operate live
Monk-managed infrastructure through shell commands.
Use monk://workspace/feed as the durable task and prompt ledger for the bound
workspace. Read it after host-side MCP timeouts, interrupted approval flows,
agent restarts, or uncertainty about whether a long-running operation is still
pending, approved, failed, or completed. It contains durable action and request
items with dashboard URLs; inspect it before retrying approval-backed or
cost-bearing operations so repeated calls do not create duplicate work.
When an action fails, read the error details from monk://workspace/feed and
quote them in chat — do not ask the user to fetch error text from the
dashboard. Dashboard URLs returned by tools (/?item= or /?action=) are
deep links: share them as-is when pointing the user at an approval or a
running action; if the user already has the dashboard open, their existing
tab reveals the linked item automatically.
Use monk://workspace/cluster-context to know the current execution target.
Cluster targeting is logical per workspace/session: mode: "local" means tools
and Monk RPC use the local daemon, while mode: "cluster" means they target the
selected saved cluster through monkcode. monk.cluster.create automatically
selects the newly created cluster on success and says so in its result. Use
monk.cluster.switch to select another saved cluster, monk://workspace/clusters
or monk.cluster.list to inspect available choices, and monk.cluster.exit to
clear selection and return to local mode without deleting cloud infrastructure.
Cluster and platform operations run inside a Monk scope: an owner (the user's personal account or an org), an optional project, and an optional environment. A workspace must be bound to one owner/project before scope-gated cluster operations (create, grow, shrink, peer changes, registry, switch, delete) will run.
monk.scope.status (or read monk://workspace/scope) before
cluster work, and resolve these states first:
missing_workspace: call monk.session.init with the absolute workspace
root.not_bootstrapped: the Monk account is not initialized on the platform yet;
finish auth/onboarding.unbound: bind the workspace with monk.scope.bind. If more than one
owner scope is available (personal + orgs), list the options and ask the
user which one to use — never pick an organization on the user's behalf.
Pass confirmedByUser: true only after they chose.ambiguous: the workspace is linked in more than one owner/project; rebind
to one canonical scope with monk.scope.bind and confirmMove: true.resolved: proceed.monk://account/scopes. Bind with
monk.scope.bind: ownerKind: "personal", or ownerKind: "org" with
orgSlug; optionally projectSlug, createProject: true to create a missing
project, and confirmMove: true to move an already-bound workspace. Do not
move a bound workspace to a different owner/project without the user's intent.
A first-time bind on a multi-scope account is rejected unless
confirmedByUser: true — that flag asserts the user explicitly chose the
owner scope in conversation, so always ask before passing it.monk.environment.list and
monk.environment.select. A resolved environment determines the default
cluster and the monk.project.deploy target, so once scope and environment
are set, deploy needs no manual monk.cluster.switch.monk.scope.status may report
stale: true (served from cache) with pendingPlatformOps > 0 (platform
writes queued for retry). Keep working; queued writes flush when the control
plane returns. An auth error ("not signed in" or token rejected) is NOT
transient — re-run monk.auth.start (or the host MCP auth flow) before
retrying.Approvals are owned by privileged monk-agent tools. Do not request approval as
a standalone agent action; call the tool that performs the operation and let it
open the required approval flow when needed.
monk.credentials.request so the user gets one
typed feed form for all required values. Use monk.secret.request only for a
single ad hoc secret that has no known provider mapping.monk, cloud CLIs, Terraform, Kubernetes, Docker, or Podman to
bypass Monk-managed runtime state.monk-editor subagent for MANIFEST or MonkScript edits instead of editing
them directly in the main agent.monk-agent.load makes templates available;
run starts a not-yet-running workload; update changes a running workload;
stop takes it offline while preserving state; delete/purge removes
runnable/container state; unload removes the loaded template definition.
Use monk.workload.stop, monk.workload.delete/purge, and
monk.workload.unload; they open feed approvals themselves. Never target
Monk-managed system/* workloads.monk.workload.logs for bounded log tails or short bounded follow
windows. Logs can contain application secrets or user data; summarize the
relevant lines instead of pasting large raw log blocks.monk.cluster.* tools. The tools
open the feed approval prompt when approval is required; do not run the
equivalent monk cluster ... command in a shell.monk.scope.status is unbound
and owner scopes are available, bind with monk.scope.bind first; if the
account has NO owner scopes (no subscription/trial/tokens, no team), do not
bind, re-authenticate, or bootstrap — proceed directly, the operations run
unscoped. Only ambiguous must be resolved before continuing.monk.cluster.create succeeds, treat the new cluster as the active
context for subsequent Monk operations. Confirm with
monk://workspace/cluster-context when needed. Do not call a shell-level
cluster switch; use monk.cluster.switch or monk.cluster.exit for logical
context changes.monk.cluster.create fails AFTER nodes were provisioned, re-run it with
the SAME parameters (same name, provider, region, count) — the create
resumes finalization on the existing nodes. Never retry under a new name:
that orphans the paid nodes and the new create can fail on leftover state.
To abandon the failed cluster instead, monk.cluster.switch to it and
destroy it with monk.cluster.delete.monk.agent.clear_state with confirm:true. This deletes local events,
prompts, actions, credentials, stored auth tokens, sessions, and related
state. Do not call it for troubleshooting unless the user explicitly requests
a reset/clear.monk-agent hashes or redacts sensitive fields before sending
PostHog events.monk.feedback.submit files reports directly to the Monk team's backlog. Use it
two ways:
type: "bug"); the user needs an integration with no Monk
package (type: "integration", set integration); or you hit a missing Monk
capability (type: "feature"). File once per distinct issue.The Monk team does not see this conversation, so write a clear, self-contained
message (for bugs: what was attempted, the exact error, and repro steps). If
you are unsure whether to file proactively, ask the user first.
Before answering questions about what Monk can or cannot do, whether a
particular integration is supported, or how long a task should take with Monk,
check official docs at https://docs.monk.io and use monk.docs.search when
available. Do not guess from memory.
Before planning MANIFEST, MonkScript, or infrastructure changes, discover what
Monk can already provide. Query available packages with monk.package.list or
monk.package.search, compare candidates with monk.package.info, and inspect
the chosen package with monk.package.dump / monk.dump before recommending or
configuring it. Do not guess package names, invent unsupported integrations, or
hand-write common databases, caches, queues, auth providers, tunnels, hosting
targets, cloud resources, or SaaS integrations when a Monk package exists. If
the user needs an integration that genuinely has no Monk package, file an
integration request with monk.feedback.submit (see "Reporting feedback")
instead of hand-rolling unsupported infrastructure.
Based on the current credential definitions, Monk can provision and wire
provider-backed services for Netlify, Auth0, Redis Cloud, MongoDB Atlas,
GitHub, Vercel, Slack, Stripe, Cloudflare, Neon, and DigitalOcean Spaces when
the relevant package/template requests those credentials. This list is a
credential surface, not an exhaustive package catalog: use monk.package.list,
monk.package.search, monk.package.info, monk.package.dump, and
monk.docs.search to find additional packages, integrations, examples, and the
exact variables/secrets each one needs.
Treat package dumps as the source of truth for how integrations are wired
together: variables, services, connections, depends, entity state,
generated secret references, and examples. Many values are computed by Monk or
the control plane at deploy time, such as hostnames, ports, URLs, IDs,
password-secret names, access endpoints, and status values. Read those values
through connections, entity state, package outputs, or generated secret
references; do not ask the user to provide them manually.
Secrets have three distinct roles:
SECRET and collect them through monk.credentials.request or, for one
ad hoc value, monk.secret.request.SECRET
and do not ask the user for them. Consumers should read them by reference,
usually by obtaining the secret reference from a connection target or entity
state, then passing that reference to secret(...) where the package schema
expects it.permitted-secrets or the package-specific equivalent.
Add permissions only for the secret references that component actually needs.When planning credentials, derive the minimal request list from the verified package plan and current secret status. Cloud-provider credentials for provisioning are handled by Monk as provider credentials; do not turn ambient provider state or generated resource values into application secrets.
For a first deploy:
monk.project.configure with the absolute workspace root. This is the Monk
configuration step that generates or updates MANIFEST and Monk templates.
Do not call it just to rebuild container images for a normal redeploy. If
the result has deferred: true and nextAction: "delegate_to_monk_editor", delegate handoff.task to the monk-editor
subagent, then rerun analyze/deploy after the editor creates the files.monk.project.deploy.Monk usually deploys projects in 20-40 minutes. Set that expectation when starting a deploy, while still reporting concrete progress and any project- or provider-specific blockers as Monk surfaces them.
For MonkScript, MANIFEST, template diagnostics, or schema/example questions, use
the editor workflow. In Claude Code, delegate hands-on MANIFEST and template
edits to the monk-editor subagent. The editor should read
monk://workspace/manifest, call monk.analyzer.diagnose, query Chroma-backed
docs/examples with monk.docs.search, browse Monk packages with
monk.package.list / monk.package.search / monk.package.info, and inspect
package schemas with monk.package.dump / monk.dump before changing files.
For ArrowScript expressions, the editor should use
monk.arrowscript.operator.* tools to verify operators, stack effects,
arguments, aliases, runtime-only behavior, and deprecations. If those tools
report that analyzer, Chroma, dump, or operator support is not wired yet, state
that clearly and fall back to local files plus official docs.
For an existing Monk-built project:
monk://workspace/feed before retrying; the underlying action or approval may
still be active in monk-agent.Use official docs when unsure:
The task is done only when Monk reports success and the deployed app or workload has been verified from outside the deploy operation. Use browser automation when available, otherwise use HTTP checks against the returned endpoint.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
npx claudepluginhub monk-io/monk-plugin --plugin monk