versatile plan for creating a package that turns any PC or VM into a Jules-controllable endpoint, while being:
- ✅ Simple to deploy
- ✅ Language/runtime agnostic
- ✅ Secure
- ✅ Compatible with shell-based agents like Jules
- ✅ Easily extensible
To expose a machine (PC/VM) as a remotely accessible agent endpoint via Cloudflare Tunnel, allowing Jules (or any CLI agent) to:
- Execute custom commands
- Run project tests from any public repo
- Get back stdout/stderr
- Authenticate requests
- Work via simple CLI like
curlorwget
| Component | Purpose |
|---|---|
cloudflared |
Tunnel software for public access |
shell2http |
Bash over HTTP interface |
runner.sh |
Custom script to clone repo and run tests |
auth layer |
Optional: basic auth, token, IP filtering |
config.yml |
Cloudflare tunnel config |
install.sh |
One-click installer |
caddy (optional) |
Reverse proxy + HTTPS + Basic Auth |
curl https://endpoint.example.com/run-test \
-u jules:secret \
-d "repo=https://github.com/user/repo.git&branch=main&test_cmd=npm test"- Clones repo
- Checks out branch
- Executes the given test command
- Streams output (or returns as JSON)
- Clean
stdout - Return code
- Optional JSON payload
- Logs for debugging
jules-endpoint-agent/
│
├── install.sh # Automated setup script
├── runner.sh # Repo/test runner script
├── shell2http.service # systemd service file
├── config/
│ ├── cloudflared/ # Cloudflare config files
│ └── caddy/ # Optional: HTTPS + auth reverse proxy
├── docs/
│ └── usage.md # How Jules can interact
└── README.md
#!/bin/bash
REPO_URL="$1"
BRANCH="$2"
TEST_CMD="$3"
set -e
TMP_DIR="/tmp/jules-test-$(date +%s)"
mkdir -p $TMP_DIR && cd $TMP_DIR
echo "[INFO] Cloning $REPO_URL (branch: $BRANCH)"
git clone --depth 1 -b "$BRANCH" "$REPO_URL" app
cd app
echo "[INFO] Running test: $TEST_CMD"
eval "$TEST_CMD"- Basic Auth (
shell2http -c jules:secret) - IP allowlist (e.g. only allow GitHub IPs or Jules agent IP)
- Caddy reverse proxy with rate-limiting & HTTPS
- Token-based auth (e.g. check
?token=XYZ123)
Cloudflare config.yml:
tunnel: jules-agent
credentials-file: /home/agent/.cloudflared/agent.json
ingress:
- hostname: endpoint.example.com
service: http://localhost:8080
- service: http_status:404| Feature | Included | Notes |
|---|---|---|
| Git clone support | ✅ | Any public repo |
| Command injection | ✅ | Full control via runner.sh |
| Cloudflare tunnel ready | ✅ | Secure remote access |
| Token or basic auth | ✅ | Pluggable security |
| Logs + return code | ✅ | Parse-friendly |
| Language agnostic | ✅ | Works for Python, JS, Go, etc. |
| JSON output support | 🟡 | Optional, easy to add |
| Docker sandboxing | 🟡 | Optional module |
| Retry/backoff logic | ❌ | Delegate to Jules logic |
| File upload API | ❌ | Could be added via /upload route |
From any bash shell, Jules runs:
curl -X POST https://endpoint.example.com/run-test \
-u jules:secret \
-d "repo=https://github.com/user/repo.git" \
-d "branch=main" \
-d "test_cmd=pytest"Output:
[INFO] Cloning...
[INFO] Running test...
================ test session starts ================
...
3 passed in 0.45s
Jules parses the output and decides success/failure.
| Item | Description |
|---|---|
install.sh |
Full automated setup (cloudflared, shell2http, runner) |
runner.sh |
Repo + test executor |
cloudflared/config |
Ready-to-use tunnel config |
README.md |
How to use from Jules or manually |
Optional: Caddyfile |
Secure reverse proxy + HTTPS + auth |