
Gstack
Keep the gstack Bun/TypeScript repo healthy on mixed OS checkouts with correct LF line endings, env templates, and CI runner labels.
Overview
gstack is an agent skill most often used in Ship (also Build, Operate) that documents gstack repo DevOps conventions—LF gitattributes, Bun eval env, and CI runner labels—for reliable cross-platform builds.
Install
npx skills add https://github.com/garrytan/gstack --skill gstackWhat is this skill?
- Documents ANTHROPIC_API_KEY in .env for bun run test:eval LLM-as-judge flows
- Git attributes enforce LF on markdown, YAML, JSON, shell, and extensionless bin/* scripts
- Ubicloud self-hosted runner labels (standard-2, standard-8) for CI matrix sizing
- Windows CRLF guardrails for frontmatter regex tests and shebang execution on Linux
- Explicit eol=lf rules for .md, .tmpl, .yml, .sh, setup, and bin/* paths
Adoption & trust: 13.6k installs on skills.sh; 108k GitHub stars; 0/3 security scanners passed (skills.sh audits).
What problem does it solve?
You cloned gstack on Windows or macOS and tests fail on regex frontmatter, shell shebangs, or eval runs because CRLF and env defaults were never standardized.
Who is it for?
Contributors or indie teams maintaining the gstack Bun/TS agent stack with self-hosted or ubicloud CI.
Skip if: Builders who only want a one-shot SaaS feature skill with no gstack repo checkout or CI ownership.
When should I use this skill?
Working in the gstack repo, fixing CRLF-related test failures, or configuring CI runners and eval environment variables.
What do I get? / Deliverables
After applying gstack’s documented .env, .gitattributes, and runner settings, local and Linux CI runs agree and extensionless scripts execute cleanly.
- Corrected .gitattributes and .env templates aligned with gstack conventions
- CI jobs that pass frontmatter and shell tests on Linux runners
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Shipping and maintaining the gstack toolchain is where LF/gitattributes and runner config mistakes surface as broken tests and failed Linux runs. Launch-prep hygiene in the repo—text eol rules, setup scripts, and eval env—prevents green-local/red-CI failures right before release.
Where it fits
Configure Bun eval tests without dotenv surprises when ANTHROPIC_API_KEY lives in .env.
Normalize LF on SKILL.md.tmpl before tagging or publishing skill packages from gstack.
Pick ubicloud-standard-8 runners for heavier agent regression suites on self-hosted CI.
How it compares
Repo maintainer conventions for a specific toolchain—not a generic “deploy to Vercel” integration skill.
Common Questions / FAQ
Who is gstack for?
Solo and small-team developers working inside the garrytan/gstack repository who need Bun tests, eval keys, and LF-safe scripts on every OS.
When should I use gstack?
Use it during Build when wiring agent tooling, during Ship when fixing CI or launch-prep test failures, and during Operate when runner labels or git eol regressions break pipelines.
Is gstack safe to install?
Review the Security Audits panel on this Prism page before trusting third-party skill content; the skill references API keys in .env and CI infrastructure labels you should scope to your own secrets and runners.
SKILL.md
READMESKILL.md - Gstack
# Copy to .env and fill in values # bun auto-loads .env — no dotenv needed # Required for LLM-as-judge evals (bun run test:eval) ANTHROPIC_API_KEY=sk-ant-your-key-here self-hosted-runner: labels: - ubicloud-standard-2 - ubicloud-standard-8 # Force LF on text files we parse with `\n`-anchored regexes (frontmatter, # YAML, markdown structure tests). Without this, Windows checkouts with # core.autocrlf=true convert these to CRLF and break tests that match # /^---\n...\n---/ against SKILL.md.tmpl frontmatter, etc. *.md text eol=lf *.tmpl text eol=lf *.yml text eol=lf *.yaml text eol=lf *.json text eol=lf *.toml text eol=lf # Bash scripts must always use LF — CRLF in bash scripts produces bizarre # "Bad interpreter" / "command not found" errors on Linux runners. *.sh text eol=lf *.bash text eol=lf # Extensionless executables (top-level setup script + bin/gstack-* helpers). # These are bash scripts checked into git without a `.sh` suffix. Without # explicit eol=lf, Windows checkout with core.autocrlf=true converts them # to CRLF and breaks both `\n`-anchored regex tests (test/setup-codesign.test.ts) # and shebang resolution if the script is ever executed on Linux. setup text eol=lf bin/* text eol=lf **/scripts/* text eol=lf # TypeScript/JavaScript: LF for portability across the bun toolchain. *.ts text eol=lf *.tsx text eol=lf *.js text eol=lf *.mjs text eol=lf *.cjs text eol=lf # Binary files — never touch. *.png binary *.jpg binary *.jpeg binary *.gif binary *.ico binary *.pdf binary name: Build CI Image on: # Rebuild weekly (Monday 6am UTC) to pick up CLI updates schedule: - cron: '0 6 * * 1' # Rebuild on Dockerfile or lockfile changes push: branches: [main] paths: - '.github/docker/Dockerfile.ci' - 'package.json' - 'bun.lock' # Manual trigger workflow_dispatch: jobs: build: runs-on: ubicloud-standard-8 permissions: contents: read packages: write steps: - uses: actions/checkout@v4 # Copy lockfile + package.json into Docker build context - run: cp package.json bun.lock .github/docker/ - uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - uses: docker/build-push-action@v6 with: context: .github/docker file: .github/docker/Dockerfile.ci push: true tags: | ghcr.io/${{ github.repository }}/ci:latest ghcr.io/${{ github.repository }}/ci:${{ github.sha }} name: Periodic Evals on: schedule: - cron: '0 6 * * 1' # Monday 6 AM UTC workflow_dispatch: concurrency: group: evals-periodic cancel-in-progress: true env: IMAGE: ghcr.io/${{ github.repository }}/ci EVALS_TIER: periodic EVALS_ALL: 1 # Ignore diff — run all periodic tests jobs: build-image: runs-on: ubicloud-standard-8 permissions: contents: read packages: write outputs: image-tag: ${{ steps.meta.outputs.tag }} steps: - uses: actions/checkout@v4 - id: meta run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'package.json', 'bun.lock') }}" >> "$GITHUB_OUTPUT" - uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Check if image exists id: check run: | if docker manifest inspect ${{ steps.meta.outputs.tag }} > /dev/null 2>&1; then echo "exists=true" >> "$GITHUB_OUTPUT" else echo "exists=false" >> "$GITHUB_OUTPUT" fi - if: steps.check.outputs.exists == 'false' run: cp package.json bun.lock .github/docker/ - if: steps.check.outp