Files
Jeremy Daer 0cd0a040bf Reposition as agent skills for all 37signals products (#6)
* Fix link to Basecamp CLI install guide

* Reposition as agent skills for all 37signals products

This repo publishes the agent skills of Basecamp, HEY, and Fizzy, but the
README, install guide, and AGENTS.md still described it as Basecamp-only.

README: name all three products, list every skill with the product and the
CLI repo it is published from, and say where the hey and fizzy skills are
until they land here (hey is absent because of the shared-manifest sync bug
in #5; fizzy-cli has no skills sync yet). Requirements per product use each
CLI's documented installer and auth command; the Homebrew cask is
basecamp/tap/basecamp-cli, not basecamp/tap/basecamp, which does not exist.

install.md: restructured per the install-md spec so an agent installs the
Basecamp CLI (required) and the HEY and Fizzy CLIs only for the products the
user has, with a verify step per product and a DONE WHEN that holds when only
one CLI is installed. Points at the lowercase basecamp-cli install.md.

AGENTS.md: describe the multi-source layout, the per-source manifests each
sync owns and the legacy .managed-skills tombstone, and the rule that skills
are edited upstream in each CLI's skills/ directory.

* Describe all 37signals products in the plugin manifest, version 0.2.0

The plugin and marketplace descriptions said Basecamp only. Name Basecamp,
HEY, and Fizzy, and bump the version. The plugin name stays basecamp-skills
so existing installs keep resolving.

* Test the authenticated flag, since auth status exits 0 when signed out

All three CLIs' auth status commands return their OK envelope whether or
not you are signed in (basecamp-cli app.OK, hey-cli writeOK, fizzy-cli
printDetail), so a bare `auth status` in the DONE WHEN and the verify
steps never failed. Test the JSON envelope's "authenticated": true
instead, with --json so the shape does not depend on a TTY. Each CLI
pretty-prints with a two-space indent, so that literal is exact.

* Point at the proposed fizzy-cli skills sync

* Make each product optional in install.md and install the absent skills from their CLIs

* Say which skills the plugin bundles today

The plugin description named Basecamp, HEY and Fizzy as though all three
were packaged, while skills/ holds only the Basecamp ones until the hey-cli
and fizzy-cli syncs publish here. Keep the 37signals scope and state what
installs now, in plugin.json and the matching marketplace plugin entry.

* Stop when the products you chose are signed in, not every CLI on PATH

The completion predicate required every product CLI found on PATH to be signed
in, so a machine with an unused, unauthenticated hey or fizzy binary could never
finish a Basecamp-only run — or worse, sent the agent to sign in to a product the
user did not choose. Completion now follows the TODO: each chosen product's
auth status must report authenticated, at least one, and a CLI for a product
that was not chosen is left alone.

* Install the hey and fizzy skills even when their CLIs were already installed

Steps 2 and 3 told the reader to skip the installer when the CLI was present,
but the only `skill install` command sat behind that installer in one && chain,
so a machine that already had the CLI could finish the run without the
selected product's skill. Each step is now three lines that stand alone: the
installer runs only when the CLI is missing, sign-in only when not already
signed in, and the skill install every time.

---------

Co-authored-by: Jeff <142809588+ksp-jjensen@users.noreply.github.com>
2026-09-13 22:43:42 -07:00

5.6 KiB

I want you to install Agent Skills for 37signals products for me. Execute all steps autonomously.

OBJECTIVE: Install the agent skills for the 37signals products you use — Basecamp, HEY, Fizzy, any or all — plus the CLI behind each, so your agent can work in those products.

DONE WHEN: every product you chose in the TODO reports signed in (<cli> auth status --json | grep -q '"authenticated": true' succeeds for each of basecamp, hey, fizzy that you chose — at least one, and only those; a CLI on this machine for a product you did not choose is left alone) and npx skills list shows the skills from this repo.

TODO

  • Install Basecamp CLI (only if you use Basecamp)
  • Authenticate with Basecamp (only if you use Basecamp)
  • Install and sign in to HEY CLI (only if you use HEY)
  • Install and sign in to Fizzy CLI (only if you use Fizzy)
  • Install skills

Step 0: Install Basecamp CLI

Only if you use Basecamp; otherwise mark this TODO done and continue. The basecamp skills need the Basecamp CLI. Skip the install if basecamp --version already succeeds. See the Basecamp CLI install guide for other install methods.

curl -fsSL https://basecamp.com/install-cli | bash

Verify:

basecamp --version
# Expected: basecamp version X.Y.Z

Step 1: Authenticate with Basecamp

Only if you use Basecamp; otherwise mark this TODO done and continue. Skip if basecamp auth status already reports authenticated (the installer runs setup on an interactive terminal). Otherwise this opens a browser for OAuth; grant access when prompted. Credentials are stored in the system keychain.

basecamp auth login

Verify:

basecamp auth status --json | grep -q '"authenticated": true' && echo OK
# Expected: OK. The status command exits 0 even when signed out, so test the flag.

Step 2: Install and sign in to HEY CLI

Only if you use HEY; otherwise mark this TODO done and continue. Run all three lines: the first installs the CLI only when hey is not already on PATH (see the HEY CLI install guide for other install methods), the second signs in only when not already signed in (it opens a browser), and the third installs the hey skill from the CLI itself, since it is temporarily missing from this repo (see the README) — it runs even when the CLI was already installed.

command -v hey >/dev/null || curl -fsSL https://hey.com/install-cli | bash
hey auth status --json | grep -q '"authenticated": true' || hey auth login
hey skill install

Verify:

hey version && hey auth status --json | grep -q '"authenticated": true' && echo OK
# Expected: a version line, then OK

Step 3: Install and sign in to Fizzy CLI

Only if you use Fizzy; otherwise mark this TODO done and continue. Run all three lines: the first installs the CLI only when fizzy is not already on PATH (see the Fizzy CLI README for other install methods), the second runs fizzy setup — which asks for a personal access token and an account — only when not already signed in, and the third installs the fizzy skill from the CLI itself, since it is not published in this repo yet (see the README) — it runs even when the CLI was already installed.

command -v fizzy >/dev/null || curl -fsSL https://raw.githubusercontent.com/basecamp/fizzy-cli/master/scripts/install.sh | bash
fizzy auth status --json | grep -q '"authenticated": true' || fizzy setup
fizzy skill install

Verify:

fizzy --version && fizzy auth status --json | grep -q '"authenticated": true' && echo OK
# Expected: fizzy version X.Y.Z, then OK

Step 4: Install skills

Run this whichever products you use. Installs every skill in this repo into your agent using the Agent Skills open standard. The installer auto-detects your agent (Claude Code, Cursor, Codex, VS Code, Gemini CLI, Goose, Amp, OpenCode, and others) and places skills in the right directory. Add -a claude-code to target one agent, or -g to install globally.

npx skills add basecamp/skills

Verify:

npx skills list
# Expected: basecamp and basecamp-doctor listed (hey too, once it is published here)

Restart your agent session to pick up the new skills.

EXECUTE NOW: Start with Step 0. Mark TODO items complete as you go. Stop when every product you chose in the TODO reports signed in (<cli> auth status --json | grep -q '"authenticated": true' succeeds for each of basecamp, hey, fizzy that you chose — at least one, and only those; a CLI on this machine for a product you did not choose is left alone) and npx skills list shows the skills from this repo.


Optional: Homebrew installs

Do not execute this section unless explicitly requested.

brew install --cask basecamp/tap/basecamp-cli
brew install --cask basecamp/tap/hey
brew install --cask basecamp/tap/fizzy

Optional: Manual installation

Do not execute this section unless explicitly requested.

Clone this repo and symlink skills into your agent's skill directory manually:

git clone https://github.com/basecamp/skills ~/.37signals-skills
mkdir -p ~/.claude/skills
for skill in ~/.37signals-skills/skills/*/; do
  ln -sfn "$skill" ~/.claude/skills/"$(basename "$skill")"
done

For per-project installation:

mkdir -p .claude/skills
ln -sfn ~/.37signals-skills/skills/basecamp .claude/skills/basecamp

Update with cd ~/.37signals-skills && git pull. Symlinks pick up changes immediately.