How to run the experiment
Two-repo model
This experiment uses a two-repo setup that mirrors the production layout:
.fullsendrepo (test-fullsend/.fullsend): Contains the harness definition, agents, skills, env files, policies, scripts, and the GitHub Actions workflow. This is where the workflow runs.- Target repo (
test-fullsend/test-repo): The codebase the agent analyzes. Checked out by the workflow and passed to the CLI via--target-repo.
The run-experiment.sh script syncs the .fullsend/ directory and workflow to the .fullsend repo, then triggers the workflow with the target repo as an input.
Requirements
Local (to run the experiment)
- Go toolchain (1.23+)
- gh CLI authenticated with access to the fullsend fork and both repos in the target org
- podman (for building and pushing the container image)
- rsync
- A local clone of the
.fullsendrepo (see below)
Repos
The default setup uses the test-fullsend org with two repos:
test-fullsend/.fullsend— harness and workflow (secrets configured here)test-fullsend/test-repo— target codebase for the agent
The .fullsend repo needs GitHub secrets configured (see Setting up GCP secrets below) and a GitHub release on your fullsend fork (used to distribute the binary to the runner).
Setting up GCP secrets
The experiment uses Claude Code via Vertex AI, which requires a GCP project with the Vertex AI API enabled and a service account key.
If you already use Claude Code via Vertex AI locally (i.e. ANTHROPIC_VERTEX_PROJECT_ID and CLOUD_ML_REGION are set in your environment), you already have a GCP project with the Vertex AI API enabled — skip step 1 and reuse your project ID and region for the secrets in step 4:
gh secret set GCP_PROJECT --repo your-org/.fullsend --body "${ANTHROPIC_VERTEX_PROJECT_ID}"
gh secret set GCP_REGION --repo your-org/.fullsend --body "${CLOUD_ML_REGION}"You still need a service account key for CI (steps 2-4), since the workflow can't use interactive authentication like gcloud auth application-default login.
If you need to set up Vertex AI from scratch, follow all steps below:
Create or select a GCP project with the Vertex AI API enabled.
Create a service account with the
Vertex AI Userrole:bashgcloud iam service-accounts create fullsend-runner \ --display-name="Fullsend Runner" \ --project=${ANTHROPIC_VERTEX_PROJECT_ID} gcloud projects add-iam-policy-binding ${ANTHROPIC_VERTEX_PROJECT_ID} \ --member="serviceAccount:fullsend-runner@${ANTHROPIC_VERTEX_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/aiplatform.user" \ --condition=NoneCreate and download a JSON key:
bashgcloud iam service-accounts keys create /tmp/sa-key.json \ --iam-account=fullsend-runner@${ANTHROPIC_VERTEX_PROJECT_ID}.iam.gserviceaccount.comSet the secrets on the
.fullsendrepo (where the workflow runs):bashgh secret set GCP_SA_KEY --repo your-org/.fullsend < /tmp/sa-key.json gh secret set GCP_PROJECT --repo your-org/.fullsend --body "${ANTHROPIC_VERTEX_PROJECT_ID}" gh secret set GCP_REGION --repo your-org/.fullsend --body "${CLOUD_ML_REGION}"Delete the local key file (it's now stored as a GitHub secret):
bashrm /tmp/sa-key.json
Available regions for Claude on Vertex AI include us-east5, europe-west1, and asia-southeast1. Check the Vertex AI documentation for the latest list.
GitHub Actions runner
The workflow installs these automatically:
- fullsend binary (from a GitHub release)
- OpenShell CLI
Claude Code and experiment tool binaries are pre-installed in the container image (quay.io/manonru/fullsend-exp), which the sandbox is created from via --from.
Quick start (using defaults)
# Clone the .fullsend repo (one-time setup)
git clone git@github.com:test-fullsend/.fullsend.git /tmp/dot-fullsend
# Run the experiment (builds image, pushes to quay.io, syncs, triggers workflow)
./experiments/runner-hello-world/experiment/run-experiment.shThe script will print the workflow run URL. You can watch it with:
gh run watch <RUN_ID> --repo test-fullsend/.fullsendUsing a different org
To run against your own org, edit the variables at the top of experiment/run-experiment.sh:
FULLSEND_REPO="/tmp/your-dot-fullsend" # Local clone of your .fullsend repo
RELEASE_REPO="your-user/fullsend" # Where to upload the fullsend binary
RELEASE_TAG="runner-hello-world-dev" # Release tag name
WORKFLOW_REPO="your-org/.fullsend" # Where to trigger the workflow
WORKFLOW_FILE="hello-world.yml" # Workflow file name
TARGET_REPO="your-org/your-target-repo" # Target repo for the agent
IMAGE_REPO="quay.io/your-user/your-image" # Container image registryThen update the workflow file (experiment/workflow/hello-world.yml) to point the fullsend install step at your release:
- name: Install fullsend
run: |
curl -LsSf https://github.com/your-user/fullsend/releases/download/runner-hello-world-dev/fullsend_dev_linux_amd64.tar.gz -o /tmp/fullsend.tar.gz
sudo tar xzf /tmp/fullsend.tar.gz -C /usr/local/bin/Steps:
- Create two repos in your org:
.fullsendand a target repo with some content - Create a GitHub release on your fullsend fork:
gh release create runner-hello-world-dev --repo your-user/fullsend --title "Dev" --notes "Dev build" - Set the required secrets on the
.fullsendrepo (see Setting up GCP secrets) - Clone the
.fullsendrepo locally:git clone git@github.com:your-org/.fullsend.git /tmp/your-dot-fullsend - Run
./experiments/runner-hello-world/experiment/run-experiment.sh
