Skip to content

docs: add guide for running agents locally with released binaries - #665

Merged
waynesun09 merged 10 commits into
mainfrom
docs-running-agents-locally
May 21, 2026
Merged

docs: add guide for running agents locally with released binaries#665
waynesun09 merged 10 commits into
mainfrom
docs-running-agents-locally

Conversation

@waynesun09

Copy link
Copy Markdown
Member

Summary

  • New user guide (docs/guides/user/running-agents-locally.md) covering the full workflow for running fullsend agents on macOS and Linux using released binaries — no Go toolchain or source checkout needed
  • Covers: downloading the CLI from GitHub Releases, cloning the .fullsend config directory, creating env files with per-agent variables, running each agent type (triage, review, code, fix), cross-platform binary resolution, platform notes, and troubleshooting
  • Adds entry to docs/guides/README.md under User guides

Split out from #662 to keep the feature PR focused on the code change.

Test plan

  • Verified all internal links resolve (local-dev.md, GitHub Releases URL)
  • Verified docs/guides/README.md entry renders correctly
  • No code changes — docs only

@fullsend-ai-review

fullsend-ai-review Bot commented May 5, 2026

Copy link
Copy Markdown

Review

Findings

Low

  • [correctness] docs/guides/user/running-agents-locally.md:101 — The per-agent variables table lists REPO_FULL_NAME for "code, review, fix, retro" and GITHUB_ISSUE_URL for "triage, prioritize", while docs/guides/dev/local-dev.md lists REPO_FULL_NAME for "triage, code, review, fix" and GITHUB_ISSUE_URL for only "triage". The two guides now diverge on both variables — triage appears under REPO_FULL_NAME only in local-dev.md, retro only in the new guide, and prioritize under GITHUB_ISSUE_URL only in the new guide.
    Remediation: Align both tables. Verify against harness definitions which agents actually require REPO_FULL_NAME (specifically whether triage needs it or derives the repo from GITHUB_ISSUE_URL), then update local-dev.md to include retro and prioritize, or remove triage from its REPO_FULL_NAME row — whichever matches reality.
Previous run

Review

Findings

Low

  • [correctness] docs/guides/user/running-agents-locally.md:101 — The per-agent variables table lists REPO_FULL_NAME for "code, review, fix" agents, but docs/guides/dev/local-dev.md lists it for "triage, code, review, fix". If the triage agent derives the repo from GITHUB_ISSUE_URL, the new guide is correct and local-dev.md should be updated for consistency. If triage genuinely requires REPO_FULL_NAME, this guide's table should include it.
    Remediation: Verify which agents require REPO_FULL_NAME by checking harness definitions, then align both guides.
Previous run (2)

Review

Findings

Low

  • [correctness] docs/guides/user/running-agents-locally.md:101 — The per-agent variables table lists REPO_FULL_NAME for "code, review, fix" agents, but the existing local-dev.md guide lists it for "triage, code, review, fix". If triage genuinely requires REPO_FULL_NAME, this guide should match. If the triage agent derives the repo from GITHUB_ISSUE_URL, the new guide is correct and local-dev.md should be updated for consistency.
Previous run (3)

Review

Findings

Low

  • [documentation-drift] docs/guides/user/running-agents-locally.md — Significant content duplication with docs/guides/dev/local-dev.md (prerequisites table, env variables table, arm64 image override, cross-platform binary resolution, platform notes). The two guides serve different audiences (end-users vs developers), but the duplicated sections will need to be maintained in parallel. Consider extracting shared content into partials or adding cross-references to reduce future drift risk.

  • [documentation-consistency] docs/guides/user/running-agents-locally.md:12 — The prerequisites table lists OpenShell version 0.0.38, while docs/guides/dev/local-dev.md lists 0.0.37-dev+. If 0.0.38 is the current recommended version, local-dev.md should be updated to match. If both are valid, the discrepancy could confuse users who reference both guides.

Info

  • [pre-existing] docs/guides/README.mddocs/guides/user/customizing-agents.md exists on disk but is not listed in the README index. Pre-existing omission, not introduced by this PR.
Previous run (4)

Review: #665

Head SHA: 6783f21
Timestamp: 2026-05-05T00:00:00Z
Outcome: approve

Summary

Clean documentation-only PR adding a user guide for running fullsend agents locally with released binaries (no Go toolchain required). The new guide at docs/guides/user/running-agents-locally.md is well-structured, technically accurate, and appropriately distinct from the existing developer-oriented docs/guides/dev/local-dev.md. The README index entry follows the established pattern. No code changes, no security concerns, no injection patterns detected.

Findings

Medium

  • [style/conventions] docs/guides/user/running-agents-locally.md — Substantial content overlap with docs/guides/dev/local-dev.md in the prerequisites table, per-agent env vars table, arm64 image override section, and platform notes. Consider extracting shared content into a partial or linking to a single source of truth to reduce maintenance burden as these sections evolve.
    Remediation: Optional — could extract shared sections (env vars table, platform notes) into a shared include or reference one guide from the other. Acceptable as-is given the different target audiences.

Footer

Outcome: approve
This review applies to SHA 6783f2192b74b29a10b18c6368b308c951fde189. Any push to the PR head clears this review and requires a new evaluation.

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

@waynesun09
waynesun09 requested a review from rh-hemartin May 5, 2026 18:17

@ralphbean ralphbean left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for writing this guide — local agent execution is a key gap and this addresses it well. Two items need changes before merging, plus a couple of notes for follow-up.

Also note: this PR should merge after #662 lands, since it documents behavior (cross-platform binary resolution, FULLSEND_SANDBOX_ARCH) that only exists on that branch. Consider linking issue #457 in the PR description — it directly describes this use case.


## Platform notes

### macOS

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[important] The prerequisites say Podman is required with OpenShell 0.0.37-dev+, but this section casually references Docker as if it works ("if using Docker instead of Podman..."). This sends mixed signals — a user with only Docker would think it's supported based on this note, but the prerequisites say otherwise.

Please either:

  1. Remove the Docker reference and state explicitly that Podman is the only supported runtime, or
  2. If Docker genuinely works, list it as an alternative in the prerequisites table.

Also, the guide never explains why OpenShell 0.0.37-dev+ is required (it's the version that adds Podman support). A sentence explaining this would help users understand whether they can use an older version with Docker.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed — the Docker reference was removed in an earlier update. The guide now exclusively references Podman as the container runtime (prerequisites table, gateway setup, platform notes, troubleshooting). No Docker mentions remain.


> For building fullsend from source or contributing to the CLI, see [Local development](../dev/local-dev.md).

## Prerequisites

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[moderate] OpenShell is listed as a prerequisite but the guide never explains what it is, where to get it, or how to install it. The troubleshooting section mentions openshell version but a new user encountering OpenShell for the first time would be stuck. Please add a brief install step or link to OpenShell's installation docs.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed — added a dedicated "Step 2: Install OpenShell" section with uv tool install instructions, version verification, and gateway binary download from GitHub releases with a direct link.


```bash
gh repo clone <org>/.fullsend /tmp/fullsend-dot
```

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[moderate — deferred] Nit: /tmp/fullsend.env is world-readable on most systems, which means tokens and credential paths are accessible to any local user. Consider suggesting ~/.config/fullsend/env as the example path and adding a chmod 600 note. Not blocking, but worth addressing in a follow-up.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — will address in a follow-up. The sa-key.json already has a chmod 600 step, but the env file path could be improved.

@@ -0,0 +1,197 @@
# Running agents locally

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor — deferred] This guide documents FULLSEND_SANDBOX_ARCH and cross-platform binary resolution behavior that only exists in PR #662's branch. This creates a merge ordering dependency — please merge after #662 lands. Also consider linking issue #457 ("Support local execution of individual agents for pre-adoption evaluation") in the PR description since it directly describes this use case.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — this PR should merge after #662 lands. The cross-platform binary resolution and FULLSEND_SANDBOX_ARCH are documented based on that PR's implementation.


```bash
tar xzf fullsend_0.4.0_darwin_arm64.tar.gz
sudo mv fullsend_0.4.0_darwin_arm64/fullsend /usr/local/bin/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move it to $HOME/.local/bin instead.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — updated to $HOME/.local/bin/ for both the fullsend binary and the openshell-gateway binary. No sudo needed.

--no-post-script
```

The agent runs normally inside the sandbox, but the post-script is skipped. This means `PUSH_TOKEN` and `REVIEW_TOKEN` are not needed in your env file — only the core variables (`GH_TOKEN`, GCP credentials) are required.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this really true?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes — verified against the code. PUSH_TOKEN and REVIEW_TOKEN are in the harness runner_env, which is only consumed by the post-script runner. With --no-post-script, the post-script is skipped entirely, so those variables are never read. Only GH_TOKEN (used by sandbox env files for repo cloning) and GCP credentials are needed.

Comment thread docs/guides/user/running-agents-locally.md Outdated
@ben-alkov

Copy link
Copy Markdown
Member

Need details on

  • How to create a valid SA for GOOGLE_APPLICATION_CREDENTIALS
  • Specifically what kind of token, with which permissions, for GH_TOKEN

@ralphbean ralphbean left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

This is a well-structured documentation PR that addresses issue #457. The guide is comprehensive and follows good documentation practices.

Strategic assessment: ✅ Good direction. The change fits the project scope and directly addresses a documented user need.

Existing discussion: The PR already has thorough review comments from @ralphbean and @rh-hemartin covering the most important issues:

  • Docker/Podman support clarity (important)
  • OpenShell installation instructions (moderate)
  • Security concerns with /tmp/ paths (moderate, deferred)
  • Merge ordering dependency on #662 (minor, deferred)
  • Install path preferences and example improvements

I'm adding two minor notes below for future consideration. Approving since the documentation is solid and the existing comments cover the substantive issues.


Dependencies: This PR documents features from #662, so it should merge after #662 lands (already noted by @ralphbean).

| Linux (x86_64) | `fullsend_{version}_linux_amd64.tar.gz` |
| Linux (arm64) | `fullsend_{version}_linux_arm64.tar.gz` |

Extract and move to a directory in your PATH:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[moderate — deferred] Consider adding a step to verify the downloaded binary checksum or signature. This is a security best practice for software distribution. GoReleaser can generate checksums files automatically — if the release includes a checksums.txt, add a verification step:

# Verify the checksum (optional but recommended)
shasum -a 256 -c checksums.txt 2>&1 | grep fullsend_0.4.0_darwin_arm64.tar.gz

Not blocking for this PR, but worth considering for a future update.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — will add checksum verification in a follow-up once we confirm GoReleaser is generating checksums.txt in the release artifacts.

- The default `:latest` tag is amd64-only. Add `FULLSEND_SANDBOX_IMAGE=ghcr.io/fullsend-ai/fullsend-sandbox:dev` to your env file

**`unable to replace "host-gateway"` on macOS**
- Set `host_containers_internal_ip = "192.168.127.254"` under `[containers]` in `~/.config/containers/containers.conf` and restart the Podman machine

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[minor — deferred] Consider adding a "Cleanup" or "Maintenance" section covering:

  • How to remove stopped sandbox containers (podman ps -a, podman rm)
  • When/how to update the local .fullsend config directory clone
  • How to clean up temporary artifacts

Users following this guide might accumulate containers or wonder about keeping their config up-to-date. Not urgent, but would round out the guide.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — cleanup/maintenance section is a good addition for a follow-up. OpenShell may already handle container cleanup, but documenting podman ps -a / podman rm and config repo updates would help.

New user guide covering the full workflow without a Go toolchain:
download CLI from GitHub Releases, configure env, run agents on
macOS (Podman Desktop) and Linux (Podman).

Signed-off-by: Wayne Sun <gsun@redhat.com>
Explain how to run agent inference without post-script side effects
(PR comments, branch pushes). Notes that PUSH_TOKEN/REVIEW_TOKEN
are not needed when using this flag.

Signed-off-by: Wayne Sun <gsun@redhat.com>
Align with PR #919 (migrate to Podman driver):
- Bump OpenShell version from 0.0.37-dev+ to 0.0.38
- Add step 2: install OpenShell CLI and gateway binary
- Add step 5: manually start and register the gateway
- Remove Docker reference, add rootless Podman setup
- Fix openshell version command and add gateway check

Signed-off-by: Wayne Sun <gsun@redhat.com>
@github-actions

github-actions Bot commented May 20, 2026

Copy link
Copy Markdown

Site preview

Preview: https://0230803a-site.fullsend-ai.workers.dev

Commit: 10061d7bbd4a9bde63f86e42ac1ba62102aef2b4

| Requirement | macOS | Linux |
|-------------|-------|-------|
| Container runtime | Podman Desktop with a running machine | Podman |
| [OpenShell](https://github.com/NVIDIA/OpenShell) | 0.0.38 | 0.0.38 |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] documentation-consistency

OpenShell version listed as 0.0.38, while docs/guides/dev/local-dev.md lists 0.0.37-dev+. Version discrepancy between the two guides could confuse users.

Suggested fix: Align both guides to the current recommended OpenShell version.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This guide targets OpenShell 0.0.38 (the version PR #919 migrates to). The local-dev.md reference to 0.0.37-dev+ is stale and should be updated separately when #919 merges.

@fullsend-ai-review fullsend-ai-review Bot added the ready-for-merge All reviewers approved — ready to merge label May 20, 2026
- Fix health check port: 8081 (not 8080, which is the API port)
- Add required env vars: OPENSHELL_SSH_HANDSHAKE_SECRET and
  OPENSHELL_SUPERVISOR_IMAGE (pinned to v0.0.38 SHA)
- Add --health-port 8081 flag to gateway startup
- Fix per-agent env vars: remove REPO_FULL_NAME from triage,
  add REVIEW_BODY_FILE for fix agent
- Add gateway-specific troubleshooting entry

Signed-off-by: Wayne Sun <gsun@redhat.com>
| `REVIEW_BODY_FILE` | fix | Path to a file containing the review body to fix |

See the harness definitions in `harness/*.yaml` within your `.fullsend` config directory for the complete list per agent.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] correctness

REPO_FULL_NAME agent list (code, review, fix) differs from local-dev.md (triage, code, review, fix). Verify whether triage requires this variable and align the two guides.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This guide is correct — verified against the harness definitions. Triage's runner_env does NOT include REPO_FULL_NAME; it only has GITHUB_ISSUE_URL and GH_TOKEN. The repo is derived from the issue URL. local-dev.md should be updated to match.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge and removed ready-for-merge All reviewers approved — ready to merge labels May 20, 2026
- Split "Core variables" into dedicated GCP credentials and GitHub
  tokens sections with context on CI vs local differences
- Add GOOGLE_CLOUD_PROJECT (now required by gcp-vertex.env)
- Explain that a single PAT with repo scope covers GH_TOKEN,
  PUSH_TOKEN, and REVIEW_TOKEN locally
- Add gcloud command to create service account key
- Note WIF/OIDC is CI-only; SA keys need no refresh locally
- Move PUSH_TOKEN and REVIEW_TOKEN out of per-agent table into
  the GitHub tokens section where they belong

Signed-off-by: Wayne Sun <gsun@redhat.com>
- Add GCP project prerequisite: Agent Platform API + Claude models
  in Model Garden
- Expand GCP credentials section with full SA creation commands
  (create account, grant roles/aiplatform.user, create key)
- Link to official GCP docs: Vertex AI Claude models, SA key
  creation, WIF
- Expand GitHub tokens section with classic PAT creation link and
  explain why fine-grained PATs are not supported
- Link to official GitHub docs for both PAT types

Signed-off-by: Wayne Sun <gsun@redhat.com>
# Create and download the key file
gcloud iam service-accounts keys create sa-key.json \
--iam-account=fullsend-local@<project-id>.iam.gserviceaccount.com
chmod 600 sa-key.json

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] correctness

The per-agent variables table lists REPO_FULL_NAME for "code, review, fix" agents, but docs/guides/dev/local-dev.md lists it for "triage, code, review, fix". One of the two guides has the wrong agent list for this variable.

Suggested fix: Verify which agents require REPO_FULL_NAME by checking harness definitions, then align both guides.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above — this guide's listing (code, review, fix) is correct per the harness definitions. Triage does not require REPO_FULL_NAME.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge and removed ready-for-merge All reviewers approved — ready to merge labels May 20, 2026
Signed-off-by: Wayne Sun <gsun@redhat.com>
Address review feedback:
- Move install path from /usr/local/bin to $HOME/.local/bin
- Restructure agent examples to show required env vars per agent
  instead of repeating identical commands

Signed-off-by: Wayne Sun <gsun@redhat.com>
Signed-off-by: Wayne Sun <gsun@redhat.com>
- Add section on running customized agents locally with manual
  overlay of org-level and per-repo customized/ directories
- Add prioritize and retro agent examples with env vars
- Update per-agent variables table for all 6 built-in agents

Signed-off-by: Wayne Sun <gsun@redhat.com>
--role="roles/aiplatform.user"

# Create and download the key file
gcloud iam service-accounts keys create sa-key.json \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] correctness

The per-agent variables table lists REPO_FULL_NAME for "code, review, fix, retro" and GITHUB_ISSUE_URL for "triage, prioritize", while docs/guides/dev/local-dev.md lists REPO_FULL_NAME for "triage, code, review, fix" and GITHUB_ISSUE_URL for only "triage". The two guides now diverge on both variables.

Suggested fix: Align both tables by verifying against harness definitions which agents actually require REPO_FULL_NAME, then update local-dev.md to match.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This guide is correct — verified against the harness definitions on main:

  • REPO_FULL_NAME: code, review, fix, retro (all four have it in runner_env)
  • GITHUB_ISSUE_URL: triage, prioritize (both have it in runner_env)
  • Triage does NOT have REPO_FULL_NAME — it derives the repo from the issue URL

local-dev.md is the one that's stale and should be updated separately.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge and removed ready-for-merge All reviewers approved — ready to merge labels May 21, 2026
@waynesun09
waynesun09 added this pull request to the merge queue May 21, 2026
Merged via the queue into main with commit ce207ca May 21, 2026
10 checks passed
@waynesun09
waynesun09 deleted the docs-running-agents-locally branch May 21, 2026 00:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-merge All reviewers approved — ready to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants