@susu-eng/tender
v0.7.3
Published
Interactive tender CLI launcher
Maintainers
Readme
tender
tender is an interactive CLI/TUI for managing autonomous OpenCode runs in GitHub
Actions.
Tender keeps state in workflow files only. No sidecar metadata files.
Run
No install required:
pnpm dlx @susu-eng/tender@latest
# or: npx @susu-eng/tender@latestRun subcommands the same way:
pnpm dlx @susu-eng/tender@latest ls
pnpm dlx @susu-eng/tender@latest run my-tender
# or: npx @susu-eng/tender@latest lsQuick Start
- Ensure repo secrets are configured for your OpenCode provider.
- Run
pnpm dlx @susu-eng/tender@latest(ornpx @susu-eng/tender@latest). - Choose
Add tender. - Enter a name.
- Pick agent and schedule.
- Commit and push the generated workflow under
.github/workflows/.
Requirements
- GitHub repository with Actions enabled.
- OpenCode config in the repo (
opencode.jsonand/or.opencode/) or defaults available to OpenCode. - GitHub CLI (
gh) authenticated for local dispatches (tender run). - Provider API key secrets for OpenCode (for example
OPENAI_API_KEY,ANTHROPIC_API_KEY) configured in your repository.
Authentication
Tender uses two auth flows.
1. Local auth (tender run)
tender run <name>shells out togh workflow run ....- You must be logged into GitHub CLI for the target repo (
gh auth login).
2. GitHub Actions auth (workflow execution)
Generated workflows do this in the Run OpenCode step:
- Install OpenCode on the runner.
- Pass provider credentials from repo secrets:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
- Set config paths when present:
OPENCODE_CONFIG=$GITHUB_WORKSPACE/opencode.jsonOPENCODE_CONFIG_DIR=$GITHUB_WORKSPACE/.opencode
Generated workflows also set permissions: contents: write, which allows the job
token to push commits back to main.
Commands
Use these as:
pnpm dlx @susu-eng/tender@latest <command>
# or: npx @susu-eng/tender@latest <command>tenderlaunches the interactive TUI.tender initensures.github/workflowsexists.tender add [--name <name>] --agent <agent> [--prompt "..."] [--cron "..."] [--manual true|false] [--push true|false] [--timeout-minutes <minutes>] [<name>]creates a tender non-interactively (for coding agents/automation).tender update <name> [--name <new-name>] [--agent <agent>] [--prompt "..."] [--cron "..."] [--clear-cron] [--manual true|false] [--push true|false] [--timeout-minutes <minutes>]updates an existing tender non-interactively.tender lslists managed tenders.tender run [--prompt "..."] <name>triggers a tender immediately viaworkflow_dispatch.tender rm [--yes] <name>removes a managed tender.tender --helplists commands.tender help [command](ortender <command> --help) shows command-specific usage.
Example non-interactive flow:
pnpm dlx @susu-eng/tender@latest add --name nightly --agent Build --cron "0 9 * * 1" --timeout-minutes 30
pnpm dlx @susu-eng/tender@latest update nightly --agent TendTests --push true --manual false --clear-cron --timeout-minutes 45How It Works
- Uses GitHub Actions workflow files as the source of truth.
- Detects OpenCode agents via
opencode agent list. - Generates workflows that run
opencode run --agent .... - Supports on-demand and scheduled runs.
- Uses plain-English trigger display in the CLI.
- Pushes changes directly to
mainfrom workflow runs. - Uses shared concurrency group
tender-main.
Contributing
Contributor/developer docs are in CONTRIBUTING.md.
Maintainer Release
make publish VERSION=0.2.0What it does:
- Runs
check-fastand npm pack smoke checks. - Bumps
package.jsonversion. - Commits
release: vX.Y.Z. - Tags
vX.Y.Zlocally. - Builds cross-platform binaries and uploads them to GitHub release
vX.Y.Z. - Publishes
@susu-eng/tenderto npm.
Repository secret required for npm publishing:
NPM_TOKEN
