GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — docs: add Agent Relay setup and operations guides by coder[bot] · Pull Request #31281 · coder/coder Conversation
|
Docs previewCheck off each page once it's been reviewed. If a page changes in a later push, its checkbox clears automatically so it gets a fresh look. Pages not yet wired into the docs navigation aren't listed here. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| > [!IMPORTANT] | ||
| > Steps 1 and 2 require an Owner of your Anthropic organization. | ||
|
|
||
| ### 1. Allow self-hosted environments |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
| ### 1. Allow self-hosted environments | |
| ### Step 1: Allow self-hosted environments |
Make this change globally. I'm not sure if what you committed here works with beta-docs, but I know the format in Get Started works, so use that for now.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| You need: | ||
|
|
||
| - A licensed Coder deployment on version 2.37 or later. | ||
| Agent Relay refuses to start against an older version. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
| Agent Relay refuses to start against an older version. | |
| Agent Relay refuses to start against versions earlier than v2.37. |
I avoid using the word "old" or any of its derivatives, as it can be considered ageist.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
If this error is explicit enough we do not need to mention this as we already mention minimum required coder version at top.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Done in 14037c4. I removed the line, and the requirement at the top (now v2.39) stays.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| ### 1. Allow self-hosted machines | ||
|
|
||
| A Cursor team admin must turn on **Allow Self-Hosted Machines** in the Cursor Cloud Agents dashboard. | ||
| This setting lets developers send cloud agents to self-hosted workers. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
| This setting lets developers send cloud agents to self-hosted workers. | |
| With this setting turned on, developers can send cloud agents to self-hosted workers. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
c8c7042 to
69cd406
Compare
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Partial review.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| - [Agent Relay](./index.md) | ||
| - [Architecture](../../install/plan/architecture.md) | ||
| - [Set up Agent Relay](./setup.md) | ||
| - [Use Agent Relay from Slack](./slack.md) |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I think the end user won't need to know that they are using Agent Relay. So we should repurpose this for Admins on how they can configure Slack to work with Agent Relay managed pools/environments.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Agreed. In 106dd12 the page is retitled "Configure Slack for Agent Relay" everywhere (frontmatter, manifest, and links), and the intro says it's for admins and that developers don't need to know Agent Relay is involved. I kept the lifecycle bullets because they describe how many workspaces get created, which admins need for sizing. Let me know if you'd cut more.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| | Who clones | The template, before the worker starts | Your image, hooks, or the agent after the claim | | ||
| | Git egress | Required | Required if sessions clone or push | | ||
|
|
||
| For a repository-scoped pool: |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@dluman IIrC we have not tested or validated repo scoped pools yet.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@matifali @dluman Since repository-scoped pools haven't been validated, my proposal for beta is to remove the repository-scoped guidance from cursor.md (the pool-type table, the repository-scoped list, and the two related troubleshooting rows) and the repo_url table in slack.md. In configuration.md, repo_url would either get a "not yet validated" note or be removed. Does that work for you, or would you rather keep it with a caution callout? I'll hold this change until you weigh in.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@nickvigilante — given our lack of validation here and the messaging that gives, I'm in favor of removing it.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Removed in 14037c4, per this thread. Repository-scoped guidance is gone from cursor.md and slack.md, and repo_url is out of configuration.md. The reserved parameter name agent_relay_cursor_repo_url stays listed, since Agent Relay still reserves it.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
|
||
| - Set a Git identity in the image. | ||
| Commits fail without one. | ||
| - Prefer short-lived, least-scoped credentials. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Should we link to External auth docs and how to configure the GitHub External auth here?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Added in 106dd12 to the Cursor credentials list and the Claude Code source control section. One detail from the code: since #26314 (v2.35), coderd refuses to create a workspace when the owner hasn't linked a required external auth provider, and that includes API-created workspaces. So the docs say a non-optional provider blocks Agent Relay from serving that developer's session. Claude Tag channel sessions still need credentials from the template.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| For Docker, set `logFormat: json` in `config.yaml`. | ||
| For a short diagnostic window, set `logLevel: debug`. | ||
|
|
||
| A startup failure that occurs before the logger is ready prints as a plain `agent-relay: ...` line, not JSON. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Does it matter for jq commands that this is true? Do we need to provide guidance that something like jq -Rsc 'sub("^[^{]*"; "") | fromjson | ...' to work around all startup failures?
Or, and I am open to this, does it not matter?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Good catch, and it was worse than this: the JSON sink nests fields under fields, so the old example never matched anything. In 106dd12 the example uses jq -R with fromjson?, which skips non-JSON startup lines without the slurp-and-strip workaround, and the page now explains the record shape.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
|
||
| ```shell | ||
| kubectl logs -n coder deploy/coder-agent-relay --since=1h \ | ||
| | jq -c 'select(.session_id == "<session-id>")' |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Just session_id might miss failures. Should we trace by session_uuid?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yes. The poller logs both session_id and session_uuid, but the reaper's failure path logs only session_uuid (serviceclaudecoderunners/reap.go:79). In 106dd12 the example matches either one, and the correlation section and symptom table call out session_uuid for Claude Code.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| | Builds stay `pending` | No online provisioner matches the template's tags. Compare `coder provisioner list` with the template's tags. | | ||
| | The agent fails to start with an unclear CLI error | The Claude Code CLI in the image is out of date. Rebuild the image, or set `install_cli = true`. | | ||
| | A workspace is never deleted | The template renamed or omitted `agent_relay_status`, or the runner reports `orphaned`. | | ||
| | A pool stops claiming sessions | The environment key expired or was rotated. Look for poll errors on that pool, then update the secret. | |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Add a restart step? The Relay needs to be restarted.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Agreed. Pool secrets reach the pod as environment variables and aren't reloaded. In 106dd12 the row now says to restart Agent Relay (kubectl rollout restart or restart the container), and both provider pages' Step 3 says that secrets are read only at startup.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| | One pool is degraded and the others are fine | The service account lacks `read` or `use` on the template, the template lacks `allow_user_cancel_workspace_jobs`, or the template doesn't include the module's parameters. | | ||
| | Sessions fail and no workspace is created | Identity resolution failed. Find the attested email in the logs and confirm an active member of the pool's organization has it. | | ||
| | A session sits queued in Claude Code | Dispatch failed and Agent Relay returned the session for redelivery. Read the Agent Relay logs for the session's nack reason. | | ||
| | A workspace is created and then deleted | The build failed. Quota exhaustion is the most common cause. Read the workspace's build log in Coder. | |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
job_error in the Agent Relay log (independent of the workspace's build log via coderd) also provides detail.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Agreed. Agent Relay deletes the workspace after a failed build, so job_error on the workspace build failed line is the easier place to start (workspacedispatcher/dispatcher.go:675). In 106dd12 this row in both provider pages and the monitoring.md checklist now point there first.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| } | ||
| ``` | ||
|
|
||
| The Tag environment appears in every Claude environment picker, so people can select it for their own sessions. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Because these sessions might happen at a higher velocity -- if we're retooling this for admins -- adding Terraform guidance about keeping this template away from build quota (daily_cost) would make this issue more visible.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Added in 106dd12 as a setup step: every channel session's workspace belongs to the one claude_tag_channel_user, so they all draw on a single quota budget. The step says to leave daily_cost off the Tag template, or to give that user a group allowance that covers the expected concurrency.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| # claude_tag_channel_user: <user-uuid> | ||
| ``` | ||
|
|
||
| Set `CLAUDE_ENVIRONMENT_SECRET` in the container's environment. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@matifali -- will this fail without passing the service account's session token?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Will defer to @Emyrk
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It would fail at startup. The session token is a required option, and Agent Relay checks it against coderd before it serves anything (servicecoderd/coderd.go). The docker run in setup Step 5 passes it, but the snippet didn't say so. In 106dd12 both provider pages now say to pass the pool secret alongside CODER_AGENT_RELAY_CODERD_SESSION_TOKEN and link to the Docker install.
While checking this, I found that the code also accepts a coderSessionToken YAML key, though it discourages it. So 106dd12 drops our "no YAML key" claim and just says to use the environment variable.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
First pass. Will review again after these are addressed.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| ## Requirements | ||
|
|
||
| ## Supported providers | ||
| - A Coder deployment with a Premium license, on version 2.37 or later. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
make it 2.39
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Done in 14037c4. The index and setup requirements now say v2.39 or later.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| ## Supported providers | ||
| - A Coder deployment with a Premium license, on version 2.37 or later. | ||
| - A Coder service account with a long-lived token. | ||
| - A workspace template for each pool that includes the provider's Agent Relay module. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
link to this page https://registry.coder.com/modules?search=tag%3Aagent-relay
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Done in 14037c4. The module requirement now links to the registry's agent-relay tag search.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| - A Coder service account with a long-lived token. | ||
| - A workspace template for each pool that includes the provider's Agent Relay module. | ||
| - Provisioner capacity for Agent Relay builds. | ||
| - A Kubernetes cluster for the Helm chart, or another runtime that can run a container. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Help chart is just a method to install we should not say that Kubernetes cluster is needed because of helm chart. The comment is about choice of words here.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Reworded in 14037c4 to "Somewhere to run the Agent Relay container, such as a Kubernetes cluster or a Docker host" (same idea in setup's prerequisites), so Helm reads as an install method, not a requirement.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| - [Set up Agent Relay](./setup.md) | ||
| - [Agent Relay for Claude Code](./claude-code.md) | ||
| - [Agent Relay for Cursor](./cursor.md) | ||
| - [Configure Slack for Agent Relay](./slack.md) |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Should we separate Slack instructions for each provider?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
The page already has one H2 per provider ("Claude Tag channel sessions" and "Cursor in Slack"), each with its own setup and lifecycle sections. Only the intro ownership table and the troubleshooting table are shared. Options: keep one page as is, split it into two Slack pages, or move each section into its provider page. I'd keep one page, since the intro table is the main thing admins compare, but holding this until we agree on a direction.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| - **Run one relay per set of pools.** | ||
| Two relays that serve the same pools both claim the same sessions and contend over the same workspaces. | ||
| - **Run one relay per organization to isolate organizations.** | ||
| Give each relay its own service account and its own provider pools. | ||
| For example, a deployment with three organizations runs three relays. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Are we proposing these as alternatives? pools is not a coder native term.
We should say one relay per deployment or one relay per organization.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Rewritten in 14037c4 as two layouts: one relay per deployment, or one relay per organization (each with its own service account and provider credentials). The hard rule, never give two relays the same provider credentials, is now a separate sentence and doesn't use "pools".
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| Source control for a session has two independent sides, and you must configure both: | ||
|
|
||
| 1. **Claude Code must see the repository.** | ||
| Claude Code only offers repositories that the Claude GitHub app or your GitHub Enterprise Server integration can reach. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
have we verified the GitHub Enterprise server part? @dluman?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@dluman can you confirm? I couldn't verify GitHub Enterprise Server support from the code. If it hasn't been tested with Agent Relay, we can keep Anthropic's requirement but say our testing covered github.com only.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
We haven't; the Coder implementation testing this rests only on the Github app. We might remove enterprise reference here, as that doesn't necessarily have an effect on repository visibility if an admin has the ability to manage Github org. permissions from the app.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Thanks. In 699c041 I removed GitHub Enterprise Server from the requirements, the network list, and this line, so the page covers only the Claude GitHub app.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| 1. **The workspace must be able to clone and push.** | ||
| The runner clones the selected repository with the Git credentials in the workspace. | ||
| Coder and Agent Relay don't supply them. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
isn't it wrong to say Coder does not provide them? We should say Coder supplies them but a template admin needs to configure the template to inject those credentials.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Agreed. Reworded in 14037c4 in claude-code.md, cursor.md, and setup.md: Coder can supply each developer's credentials through external authentication, but a template admin must configure the template to provide them.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| Set runner options as environment variables on the `coder_agent` resource: | ||
|
|
||
| ```tf | ||
| resource "coder_agent" "main" { | ||
| # ... | ||
| env = { | ||
| SELF_HOSTED_RUNNER_CONFIGURE_GIT = "1" | ||
| SELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASE = "1" | ||
| } | ||
| } | ||
| ``` |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
instead use additional-args input of the module and pass --configure-git --push-outcome-on-release
Please verify flag names.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Done in 14037c4. I checked the names against Anthropic's self-hosted environments reference: --configure-git (SELF_HOSTED_RUNNER_CONFIGURE_GIT) and --push-outcome-on-release (SELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASE). The module input is additional_args, a list with one element per argument. The Slack Tag lifecycle table uses the same pattern, and I added Anthropic's advice to restrict pushes to claude/* before turning on push-on-release.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| - Set a system-wide Git identity. | ||
| Without one, `git commit` fails and the session can't progress. | ||
| - Prefer short-lived, least-scoped credentials. | ||
| A credential baked into the image is available to every session. | ||
| - Make sure Git works without a prompt. | ||
| The runner sets `GIT_TERMINAL_PROMPT=0` and runs SSH in batch mode, so pre-populate `known_hosts`. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Where are we talking about the per user credentials that are injected via Coder external auth and GIT_ASKPASS
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Added in 14037c4. Coder external authentication is now the first row of the Git access table, and the paragraph below it explains that declaring the provider with data "coder_external_auth" makes the agent set GIT_ASKPASS, so Git over HTTPS uses the session owner's linked token with no credential in the image. cursor.md uses the same wording.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| ## Troubleshoot | ||
|
|
||
| ## Get started | ||
| | Symptom | Likely cause | | ||
| |----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ||
| | Agent Relay exits at startup | An unlicensed deployment, a Coder version earlier than v2.37, an invalid token, or missing organization permissions. Also check for two pools with the same `name`, a pool missing `organization` or `template`, an unset `secret_env` variable, or a reserved `template_parameters` name. | | ||
| | One pool is degraded and the others are fine | The service account lacks `read` or `use` on the template, the template lacks `allow_user_cancel_workspace_jobs`, or the template doesn't include the module's parameters. | | ||
| | Sessions fail and no workspace is created | Identity resolution failed. Find the attested email in the logs and confirm an active member of the pool's organization has it. | | ||
| | A session sits queued in Claude Code | Dispatch failed and Agent Relay returned the session for redelivery. Read the Agent Relay logs for the session's nack reason. | | ||
| | A workspace is created and then deleted | The build failed. Quota exhaustion is the most common cause. Find the `workspace build failed` line in the Agent Relay logs and read its `job_error` field. The workspace's build log in Coder has the full output. | | ||
| | Builds time out | The build plus provisioner queue time exceeded the 300-second budget. Speed up the template or add provisioners. | | ||
| | Builds stay `pending` | No online provisioner matches the template's tags. Compare `coder provisioner list` with the template's tags. | | ||
| | The agent fails to start with an unclear CLI error | The Claude Code CLI in the image is out of date. Rebuild the image, or set `install_cli = true`. | | ||
| | A workspace is never deleted | The template renamed or omitted `agent_relay_status`, or the runner reports `orphaned`. | | ||
| | A pool stops claiming sessions | The environment key expired or was rotated. Look for poll errors on that pool, update the secret, then restart Agent Relay with `kubectl rollout restart deploy/coder-agent-relay`, or restart the container. | | ||
| | Anthropic authentication fails | The Agent Relay or workspace clock is more than 5 minutes off. Synchronize clocks. | | ||
| | A session stalls while preparing the repository | The Claude GitHub app can't access the selected repository. | | ||
| | `Please tell me who you are` | The image has no Git identity, and runner-managed Git config is off. | | ||
|
|
||
| Talk to your [Coder account team](https://coder.com/contact) or email [[email protected]](mailto:[email protected]) to get access to Agent Relay for Claude Code. | ||
| For logs and metrics, refer to [Monitor Agent Relay](./monitoring.md). |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
should this be all separate subheading we can link to instead of a table? or an FAQ?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Converted in 14037c4. The troubleshooting tables in claude-code.md and cursor.md are now one H3 per symptom, so each is linkable. slack.md and monitoring.md still use tables. Happy to convert those too if this format works.
Posted by Superblink on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
We should have a docs rule on when we should use Tables over headings.
cc: @nickvigilante
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Use Step N headings, drop the status page (debug-only), label Premium, and avoid age-related wording.
Copies the option, pool field, and Helm value reference from coder/agent-relay by hand for the beta. DOCS-1426 tracks automating the sync. Also drops a leftover status page mention from the monitoring page description.
Fix the session-tracing jq example to read nested fields, skip non-JSON lines, and match session_uuid. Add restart, job_error, external auth, and Tag-user quota guidance, retitle the Slack page for admins, and stop claiming the session token has no YAML key.
Require Coder v2.39, link the registry modules, bump modules to agent-relay-claude-code 0.5.1 and agent-relay-cursor 0.8.1, pass runner flags through additional_args, document external auth through GIT_ASKPASS, recommend quotas, describe one relay per deployment or per organization, turn provider troubleshooting tables into linkable headings, and remove unvalidated repository-scoped Cursor pool guidance.
Agent Relay hands off a workspace when its build succeeds, so the provider worker can start before template startup scripts finish (RELAY-67). Document ordering the provider module after setup scripts with coder_script_order, and add a troubleshooting entry to both provider pages.
Document credential delivery as ephemeral workspace build secrets (Coder 2.39, Agent Relay v0.14.0, modules 1.0.0), the workspace_secret permission, idle_release_timeout as a pool duration for both providers, template_version pinning, /readyz and agent_relay_pool_healthy, the reaper stuck verdict, the coderSessionToken YAML key, and corrected reserved parameter names.
…sion Verified against coder/agent-relay 0edcb2c: dispatch results include skipped_serving and skipped_deleting, agent_relay_pool_healthy carries a provider label, and suggested alerts now use full metric names. Adds the startup error for a service account missing workspace_secret create.
a92b85e to
d8031b8
Compare
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Looking good. We might need to update it as we merge more chnages in coder/agent-relay before the release.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Ports the SIEM-specific content from the internal Claude Code and Cursor log ingestion guides: log levels, record shape, provider-specific and failure fields, example records, ID prefixes, parsing, scoping, matching rules, log-based alerts, and retention and privacy. Log messages and fields are checked against agent-relay main (3bf4e0e), which renamed several messages since the guides were written. The status page reference is dropped because it is debug-only.
dca3e1b to
8f7c6ad
Compare
…mission Agent Relay v0.14.0 (agent-relay#131) checks for workspace:update at startup and extends autostop for workspaces whose template publishes agent_relay_session_attached. Add the permission, replace the "autostop isn't extended" limitation with keepalive setup, and add the two reap-keepalive options to the configuration reference. Also fix a stale 0.5.1 module pin and widen the logger_names description.
Claude Code and Cursor repeated about half of their troubleshooting entries, and monitoring and Slack kept their own tables. Collect all of it on one Troubleshoot Agent Relay page, merged where the symptom is the same and labeled by provider where it isn't, and point each page to it. Also apply Nick's pending review comments on configuration.md and claude-code.md, fix the stale Slack idle-release default, and clarify the Cursor idle_release_timeout comment.
Fill in the steps that couldn't be completed from the page: the provisioner key secret and values file, Docker log and secret commands, and the exact log lines that show a pool is ready. Move the permission reasons below the service account steps, add a note on each provider page that its steps are setup Step 4, collect the early access upgrade notes into one section, and replace the duplicated requirements and artifact list on the overview page with a link.
The SIEM section was about two-thirds of the monitoring page, and most admins only need logs and metrics. Move it unchanged to monitoring/siem.md as a child of Monitor, per Atif. The monitoring page moves to monitoring/index.md, so its URL doesn't change. Also replace the link to the retired install/cli.md page with the downloads page that main now redirects it to.
| ## Upgrade from early access | ||
|
|
||
| Agent Relay v0.14.0 and module version 1.0.0 deliver provider credentials as workspace build secrets, which need Coder 2.39 or later. | ||
| Templates on an early access module version, `agent-relay-claude-code` 0.4.0 or earlier or `agent-relay-cursor` 0.7.0 or earlier, keep working until you move them. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I don't know that the upgrade path will allow these modules to work without the --dangerous... build parameter set. I'm in favor of mandating a full cut-over to modules 1.0.0 here in the same window.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
The take-away for me is that 2.39's secrets are a must run for us on this feature.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Agreed. In 699c041 this is now a single cut-over: upgrade Coder to 2.39, grant the new permissions, convert Cursor idle_release_timeout values, upgrade Agent Relay, and update every template to 1.0.0 in the same maintenance window. I removed the "keep working until you move them" and rollback sentences, didn't document --dangerous-allow-parameter-credential-transport (it has no effect on 2.39 anyway), and pointed early access customers to Coder for help.
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| Agent Relay v0.14.0 doesn't start without them. | ||
| The `organization-admin` role already includes both. | ||
|
|
||
| 1. Convert each Cursor pool's `idle_release_timeout` from seconds to a duration, such as `10m` for `600`. |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Should we mention that 0 indicates "never release?"
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yes, added in 699c041: "0 still turns off idle release."
Generated by Coder Agents on behalf of @nickvigilante.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
There are a few open smaller questions around 2.39. Some of it will require quick validation, which we can quickly vet. Others have to do with our expectation that customers adopting Beta will largely not come from Early Access. This assumption implies that those accounts coming from EA will have some additional support to migrate toward GA if they should need it.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…te access Make the early access upgrade a single cut-over to module 1.0.0 and drop the unverified claim that early access templates keep working, per Doug. Note that 0 still turns off idle release, remove GitHub Enterprise Server references that weren't tested, and explain that the template Everyone group grants read and use by default.
main now fails lint on empty table header cells (#30879). Use the Property and Value headers that the CLI reference generator uses.
Approved on slack with room for iterative changes
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.