feat(pool): add Pool CLI module - #1033
Merged
Merged
Conversation
Collaborator
|
Thank you for the contribution @ausbru87 If you could take a look at the failing CI and resolve I will review once its passing. |
Contributor
Module Scorecard Check
|
| Presentation & Onboarding | Agent Integration | Credential Hygiene | Restricted-Environment Readiness | Engineering Quality | Overall |
|---|---|---|---|---|---|
| 25 / 25 | 25 / 25 | 20 / 20 | 20 / 20 | 10 / 10 | 100 / 100 |
Drilldown
Presentation & Onboarding — 25 / 25
| Criterion | Max | Score | Notes |
|---|---|---|---|
| Configuration-mode examples | 12 | 12 | Multiple documented examples: basic install with API key, AI Gateway mode, OpenAI-compatible endpoint mode, air-gapped/mirrored mode, bring-your-own-binary mode. Each has sensible defaults and clear use cases. |
| Coder-context framing | 8 | 8 | Opening paragraph explicitly names both Coder and Pool, explains the module "wires Pool's authentication and endpoints to Coder so developers get a ready-to-use agent without pasting credentials by hand," and shows Coder's role in the flow. |
| Visual preview | 5 | 5 | README includes  and the image file exists (177.0 KB verified). |
Agent Integration — 25 / 25
| Criterion | Max | Score | Notes |
|---|---|---|---|
| AI governance | 10 | 10 | Both AI Gateway and Agent Firewall documented. AI Gateway section shows enable_ai_gateway = true with full explanation of centralized auth/routing. Agent Firewall section shows integration with the agent-firewall module and wrapper usage. |
| Dashboard entry point | 5 | 5 | coder_app example provided with slug, display_name, icon, open_in, and command launching Pool interactively. |
| Session continuity | 5 | 5 | Dedicated "Session continuity" section documents running Pool in a persistent tmux session with coder_script starting the session and coder_app attaching to it across reconnects. |
| Managed configuration | 5 | 5 | Module manages Pool configuration through environment variables (POOLSIDE_API_KEY, POOLSIDE_API_URL, POOLSIDE_STANDALONE_BASE_URL, POOLSIDE_STANDALONE_MODEL) via coder_env resources, documented in multiple sections including AI Gateway and OpenAI-compatible endpoints. |
Credential Hygiene — 20 / 20
| Criterion | Max | Score | Notes |
|---|---|---|---|
| Secrets marked sensitive | 16 | 16 | poolside_api_key input marked sensitive = true in main.tf. README examples consistently use var.poolside_api_key and var.gateway_api_key rather than inline literals. NOTE block explicitly instructs: "Pass secrets such as poolside_api_key through a sensitive Terraform variable...rather than inline literals, so keys never land in template source or state diffs." |
| Non-hardcoded auth path | 4 | 4 | AI Gateway mode (enable_ai_gateway = true) documented as a path that avoids pasting raw keys: "developers never handle a provider key" because the module uses the workspace owner's session token automatically. |
Restricted-Environment Readiness — 20 / 20
| Criterion | Max | Score | Notes |
|---|---|---|---|
| Mirrorable artifact source | 10 | 10 | install_url variable (default https://downloads.poolside.ai/pool/install.sh) overrides the installer download URL. README documents: "Override to install from an internal mirror or artifact store in restricted or air-gapped environments" with example setting it to https://artifacts.internal.example.com/pool/install.sh. |
| Bring-your-own binary | 5 | 5 | install_pool = false documented under "Existing installations" section: "Set install_pool = false when Pool CLI is already present in your workspace image." Also mentions pool_binary_path for non-default locations. |
| Egress transparency | 3 | 3 | Dedicated "Network access and air-gapped environments" section with a table enumerating all external endpoints: install-time (https://downloads.poolside.ai/pool/install.sh + binaries), runtime (Poolside hosted API, Coder AI Gateway, standalone_base_url), with "When" and "How to override" columns. Includes guidance for restricted/air-gapped scenarios. |
| Runs without sudo | 2 | 2 | Install script (scripts/install.sh.tftpl) never invokes sudo. Uses curl, mkdir -p, ln -s, shell profile edits—all unprivileged operations. Installer exports POOL_INSTALL_* environment variables and pipes to sh without privilege escalation. |
Engineering Quality — 10 / 10
| Criterion | Max | Score | Notes |
|---|---|---|---|
| Input quality | 6 | 6 | All inputs have clear descriptions. Sensible defaults: install_pool = true, pool_binary_path = "$HOME/.local/bin", install_url points to official source. Validation blocks enforce URL formats for install_url, poolside_api_url, standalone_base_url, and mutual exclusivity between enable_ai_gateway and conflicting options. |
| Test coverage | 4 | 4 | main.tftest.hcl includes 10 test runs covering defaults, URL overrides, invalid URL rejection, API key handling, standalone endpoint configuration, AI Gateway mode, mutual exclusivity validations, and scripts output. Tests cover business logic (validations, conditional resource creation). |
Overall — 100 / 100
Scored against SCORECARD.md with claude-sonnet-4-5. Language-model scores are advisory.
…rmatting - Fix CI: reformat misaligned Terraform block in README (prettier). - Add install_url variable to mirror the Pool installer for restricted/air-gapped setups. - Add URL validation for install_url, poolside_api_url, standalone_base_url. - Document coder_app launcher, Agent Firewall governance, and a network/egress section. - Add a preview image and cover new inputs with Terraform tests.
…ontinuity example
Contributor
Author
|
@DevelopmentCats I pushed some updates to resolve the pipeline issues. please re-review. |
Prefix assignments on a pipeline apply only to the first command (curl), so POOL_INSTALL_ACCEPT_EULA, POOL_INSTALL_DIR and POOL_INSTALL_UPDATE_PATH never reached the `sh` interpreting the installer. Without the EULA variable the installer fell through to its interactive prompt, found no /dev/tty under coder_script, and exited 1 -- so install_pool = true never installed Pool. POOL_INSTALL_DIR being dropped also silently ignored pool_binary_path. Exporting them puts the values in the environment both curl and sh inherit, matching the pattern used by coder-labs/nextflow.
DevelopmentCats
approved these changes
Aug 25, 2026
DevelopmentCats
left a comment
Collaborator
There was a problem hiding this comment.
Other than my last change here everything looks good and I tested it from my end.
Member
|
Wowza. 100/100 on the scorecard! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
coder-labs/poolmodule to install and configure Poolside's Pool CLIValidation
terraform fmt -check -diff registry/coder-labs/modules/poolterraform test -no-color(7 passed)Implementation plan
POOLSIDE_STANDALONE_BASE_URLto Coder's OpenAI-compatible gateway endpoint andPOOLSIDE_API_KEYto the workspace owner's session token; reject conflicting direct endpoint/key inputs at plan time.Generated by Coder Agents.