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

2.5 KiB

37signals Skills Repo

Publish target for the agent skills of 37signals products: Basecamp, HEY, and Fizzy. Each product's CLI mirrors its skills/ tree into skills/ here on release, via that CLI's scripts/sync-skills.sh. Nothing under skills/ is written by hand.

For installation, see install.md.

Sources

Source Skills Publishes here
basecamp-cli basecamp, basecamp-doctor On each stable release
hey-cli hey On each stable release. Absent right now: see #5
fizzy-cli fizzy Not yet; a release sync is proposed in fizzy-cli#214

Key constraints

  • Do not edit skills here. Edit them in the CLI repo that owns them (basecamp-cli/skills/, hey-cli/skills/, fizzy-cli/skills/) and let the next release publish them. Manual edits here are overwritten by that release.
  • Manifests are per source, and owned by the sync scripts. .managed-skills.basecamp-cli and .managed-skills.hey-cli (and .managed-skills.fizzy-cli once Fizzy publishes) each list the skill directories that source's sync owns. A sync only ever deletes directories listed in its own file, so one product's release cannot remove another's skills. The legacy shared .managed-skills is kept as a comment-only tombstone so a CLI still running the old script deletes nothing. Don't edit any of these manually.
  • Safe to edit directly: README.md, AGENTS.md, install.md, and .claude-plugin/. The sync only touches skills/ and its own manifest.

Repo structure

.claude-plugin/                  # Plugin manifest for marketplace install
skills/
  basecamp/SKILL.md              # Synced from basecamp-cli
  basecamp-doctor/SKILL.md       # Synced from basecamp-cli
  hey/SKILL.md                   # Synced from hey-cli (absent until its next release, see #5)
.managed-skills.basecamp-cli     # Skill directories owned by basecamp-cli's sync
.managed-skills.hey-cli          # Skill directories owned by hey-cli's sync
.managed-skills                  # Legacy shared manifest, comment-only tombstone

The per-source manifests and the tombstone appear with the first release of each CLI after its sync fix ships; until then the legacy .managed-skills is the only manifest present.