Reorganize setup-trigger-service skill to be self-contained:
- Move trigger-server.ts, improve.sh, refactor.sh into skill directory
- Update SKILL.md to reference skill directory paths
- Update .gitignore to ignore start-*.sh wrapper scripts in skill dir
- Add guidance for creating new service scripts in the skill directory
This makes the skill fully self-contained and establishes a clear
pattern for adding new automation services.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The hook configuration had two issues:
- Invalid "dangerouslySkipPermissions" setting (not supported)
- Wrong PostToolUse hook format (missing "hooks" array with "type" field)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Reusable skill (/setup-trigger-service) that guides setting up:
- Bun-based HTTP trigger server on a Sprite
- GitHub Actions workflow for cron/event/manual triggers
- Secret generation and GitHub secrets configuration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Root causes:
- `clear` command fails with exit 1 when TERM is not set (test env has
no terminal), crashing the script due to set -e. Guard with || true.
- Test patterns for Claude settings/state uploads used old temp file
naming convention (/tmp/claude_settings, /tmp/claude_global) that no
longer matches the paths generated by upload_config_file +
upload_file_sprite (/tmp/*settings.json, /tmp/*.claude.json).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PRs created by autonomous loops must always be either merged or
closed with a comment explaining why. Updates improve.sh, refactor.sh,
and CLAUDE.md to enforce this consistently.
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The upstream OpenCode installer pipes `curl -# -L | tar xz` which fails
in container exec environments (Sprite, E2B, Modal, Daytona) where the
binary stream gets corrupted through the exec layer, producing
"gzip: stdin: not in gzip format" errors.
Added opencode_install_cmd() to shared/common.sh that downloads the
binary to a file first, then extracts it. Updated all 17 opencode.sh
scripts to use this robust method instead of the upstream installer.
The previous fix (#44) only addressed Sprite with a hardcoded
linux-x86_64 architecture. This fix detects OS/arch dynamically and
applies to all cloud providers.
Fixes#42
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement 5 Genesis Cloud agent deployment scripts:
- amazonq.sh: Amazon Q CLI with OpenRouter integration
- cline.sh: Cline with OpenRouter integration
- gptme.sh: gptme with model selection and OpenRouter integration
- opencode.sh: OpenCode with OpenRouter integration
- plandex.sh: Plandex with installation verification and OpenRouter integration
Also adds Genesis Cloud README.md and updates manifest.json
to mark all 5 entries as implemented.
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement Genesis Cloud deployment scripts for NanoClaw, Goose, Codex CLI,
Open Interpreter, and Gemini CLI. Each script follows the standard pattern:
authenticate, provision instance, install agent, inject OpenRouter credentials,
and launch interactive session.
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The upstream install script (curl|bash) fails inside Sprite sandboxes
because the nested curl|tar pipeline receives non-gzip content. Replace
with direct binary download from GitHub releases which is more reliable
in sandboxed/piped execution contexts.
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Fix BinaryLane manifest: mark 10 existing agent scripts as implemented
The scripts for openclaw, nanoclaw, aider, codex, interpreter, gemini,
amazonq, cline, gptme, and opencode already exist but were marked as
"missing" in manifest.json. Updated to "implemented" and moved them
to the Implemented section in README.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Remove run-improve.sh wrapper script
No longer needed — improve.sh handles pulling latest main itself.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Issue triager now follows strict: branch -> fix -> PR -> merge -> close
- PRs must reference issue with "Fixes #NUMBER"
- Issues are closed with comment linking to merged PR
- No dangling issues or unmerged PRs allowed
- Prompt written to temp file to avoid shell escaping issues
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add refactor.sh: Continuous service that spawns Claude Code agent teams
- Team roles: security-auditor, ux-engineer, complexity-hunter, test-engineer, issue-triager
- Focus on security, UX, complexity reduction, testing, and GitHub issue response
- Add GitHub issue template for bug reports (focused on error logs)
- Auto-triages and responds to issues within 1 hour
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The team prompt now includes a mandatory step to regenerate the
matrix table in README.md after each PR, with a python3 one-liner
that reads manifest.json and outputs the markdown table.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Plandex is an open source AI coding agent for complex tasks (15k+ GitHub
stars, multiple HN frontpage posts). It natively supports OpenRouter via
OPENROUTER_API_KEY environment variable and installs via a single curl
command. Go-based CLI with sandbox and version control for AI changes.
Implemented on all 14 clouds: sprite, hetzner, digitalocean, vultr,
linode, lambda, aws-lightsail, gcp, e2b, modal, fly, civo, scaleway,
daytona.
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove testing documentation file per documentation policy
- Add rule to CLAUDE.md: docs must go in .docs/ directory (git-ignored)
- Only README.md, CLAUDE.md, and cloud READMEs allowed in repo
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Team prompt now requires: branch → PR → merge → delete for every change
- cleanup_between_cycles() runs between loops: deletes merged branches, syncs main
- Every cycle starts with git checkout main && git pull to avoid stale data
- Explicit NEVER rules: no direct main pushes, no hanging branches
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: extract shared test helpers and utilities
Created centralized test-helpers.ts module to eliminate duplication across test files:
**Extracted Helpers:**
- createMockManifest() - Reusable mock manifest data
- createEmptyManifest() - Empty manifest for edge cases
- createConsoleMocks() - Console spy setup
- createProcessExitMock() - Process exit mock
- restoreMocks() - Mock cleanup utility
- mockSuccessfulFetch() - Simplified successful fetch mock
- mockFailedFetch() - Simplified failed fetch mock
- mockFetchWithStatus() - Fetch mock with custom status
- setupTestEnvironment() - Test directory and env setup
- teardownTestEnvironment() - Cleanup utility
**Deduplication Impact:**
- commands.test.ts: Removed 50+ lines of duplicate mock setup
- manifest.test.ts: Removed 80+ lines of duplicate manifest data and setup code
- integration.test.ts: Removed 40+ lines of duplicate setup/teardown
**Benefits:**
- Single source of truth for test fixtures
- Consistent mock patterns across all tests
- Easier maintenance - changes to test setup in one place
- Improved test readability
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* refactor: Add non-interactive mode for agent execution
Implements --prompt and --prompt-file flags to enable non-interactive
agent execution. This allows users to:
- Execute agents with a prompt and exit automatically
- Use spawn in CI/CD pipelines and automation scripts
- Pass prompts via command line or file
Changes:
- TypeScript CLI: Parse --prompt/-p and --prompt-file flags
- Security: Add validatePrompt() to prevent command injection
- Commands: Pass prompt via SPAWN_PROMPT env var to bash scripts
- Bash scripts: Detect SPAWN_PROMPT and fork interactive/non-interactive
- Help text: Document new flags with examples
Implementation:
- claude.sh: Use 'claude -p' for non-interactive execution
- aider.sh: Use 'aider -m' for non-interactive execution
- shared/common.sh: Add execute_agent_non_interactive() helper
Security:
- Validates prompts for command injection patterns
- Length limit: 10KB max
- Blocks $(), backticks, piping to bash/sh
- Uses printf %q for proper shell escaping
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* docs: Add testing guide for non-interactive mode
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
The matrix table was missing 3 clouds (Civo, Scaleway, Daytona) and
1 agent (OpenCode) that are all fully implemented across the board.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove tests for deleted nc_listen and create_oauth_response_html
functions. Replace echo -e with printf for macOS bash 3.x compat.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The refactor in f9dd9a7 hardcoded /root/ as the upload destination for
Claude Code and OpenClaw config files, breaking all non-root providers
(Lambda, AWS Lightsail, GCP, Sprite, E2B, Modal, Fly). Upload to /tmp/
first then mv to ~/ via run_callback so the remote shell expands ~ to
the correct home directory.
Also add OPENROUTER_API_KEY env var check to sprite scripts (claude,
openclaw, nanoclaw) so the OAuth flow is skipped when the key is already
set, and fix echo -e to printf for macOS bash 3.x compat.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Civo is a cloud-native provider with fast provisioning (~45s), REST API,
hourly billing, free data transfer, and NVMe storage. Implements claude,
aider, and codex agent scripts using the same SSH-based patterns as
Vultr/Hetzner/DigitalOcean.
- civo/lib/common.sh: Provider library with auth, SSH key management,
instance creation/destruction, network/image auto-discovery
- civo/claude.sh, aider.sh, codex.sh: Agent deployment scripts
- manifest.json: Added civo cloud entry + matrix entries
- civo/README.md: Usage instructions and env var docs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Scaleway is a European cloud provider with REST API, SSH access,
and pay-per-hour pricing. Implements all agents: claude, openclaw,
nanoclaw, aider, goose, codex, interpreter, gemini, amazonq, cline,
gptme, and opencode.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
OpenCode is a Go-based AI coding agent with a terminal TUI (Bubble Tea).
It natively supports OpenRouter as a built-in provider via OPENROUTER_API_KEY.
- Add opencode agent to manifest.json with env config
- Implement sprite/opencode.sh for Sprite cloud
- Implement hetzner/opencode.sh for Hetzner Cloud
- Add matrix entries (implemented: sprite, hetzner; missing: rest)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Added back `mock`, `join`, `tmpdir`, `mkdirSync`, and `rmSync` imports
that were accidentally removed during test deduplication refactoring.
Tests now pass (39 pass, 11 skip, 1 fail - same pre-existing failure).
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>