Skip to content

Reposition as agent skills for all 37signals products - #6

Merged
jeremy merged 9 commits into
mainfrom
reposition-37signals
Sep 14, 2026
Merged

jeremy merged 9 commits into
mainfrom
reposition-37signals

Conversation

@jeremy

@jeremy jeremy commented Sep 13, 2026

Copy link
Copy Markdown
Member

This repo publishes the agent skills for Basecamp, HEY, and Fizzy, but its README, install guide, AGENTS.md, and plugin manifest still described it as "AI agent skills for Basecamp". This PR repositions it as the skills repo for all 37signals products.

Fixes #1.

What changed

README.md

  • Title and intro name Basecamp, HEY, and Fizzy; quick start stays npx skills add basecamp/skills.
  • Skills table with Skill | Product | Published from | Description, one row per skill (basecamp, basecamp-doctor, hey, fizzy), descriptions taken from each SKILL.md's frontmatter, with hey and fizzy marked as not currently in skills/ and pointed at their upstream directories.
  • Requirements per product, using each CLI's documented installer and auth command. The Homebrew cask for Basecamp is basecamp/tap/basecamp-cli; the basecamp/tap/basecamp the old install.md used does not exist in the tap.
  • Contributing section pointing at each CLI's skills/ directory, and an About paragraph explaining that this repo is a publish target written by each CLI's release sync.

install.md

  • Restructured per the install-md spec: install the Basecamp CLI (required for the basecamp skills), then the HEY and Fizzy CLIs only for the products the user has, with a verify step per product and one npx skills add basecamp/skills step. The DONE WHEN holds when only one product's CLI is installed. Keeps the "Optional: Manual installation" section, and adds optional Homebrew and CLI-side (hey skill install, fizzy skill install) sections.
  • Carries ksp-jjensen's commit from Fix link to Basecamp CLI install guide #2 (the lowercase install.md link; the uppercase one 404s).

AGENTS.md

  • Retitled; describes the multi-source layout, the per-source manifests (.managed-skills.basecamp-cli, .managed-skills.hey-cli, .managed-skills.fizzy-cli once Fizzy publishes) that each sync owns and only ever deletes from, the legacy .managed-skills kept as a comment-only tombstone so a CLI still on the old script deletes nothing, the "do not edit skills here" rule with each upstream path, and the safe-to-edit file list.

.claude-plugin/

  • Both description fields and the marketplace metadata.description name all three products; version bumped to 0.2.0. The name fields stay basecamp-skills so existing plugin installs keep resolving.

Why HEY's skill is absent

The hey skill is missing from skills/ because of the sync bug in #5: the basecamp-cli and hey-cli release syncs shared a single .managed-skills manifest, so each product's release deleted the other product's skills. Fixes are in flight in both CLIs. The README says the skill returns automatically on the first hey-cli release after that fix ships, and until then points at https://github.com/basecamp/hey-cli/tree/main/skills/hey. Nothing is hand-copied into skills/ here.

Merge order

This branch includes #2's commit with its author intact, so either merge #2 first and this rebases clean, or merge this alone and #2 closes.

Checks

No CI here, so locally: both JSON files pass python3 -m json.tool; every http(s) URL in the changed files returns 200 (the one exception is the pre-existing $schema URL in marketplace.json, untouched); git diff --check is clean; install.md passes the install-md eval checks.


The sync ownership fixes the README refers to: basecamp/basecamp-cli#708, basecamp/hey-cli#434, and the seed template basecamp/cli#78.

ksp-jjensen and others added 3 commits September 12, 2026 16:57
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.
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.
Copilot AI balanced review requested due to automatic review settings September 13, 2026 00:03
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 13, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-14T05:35:58.956455Z 8217f55 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

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.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Critical synchronization and multiple installation and verification issues remain unresolved.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Repositions the repository as the shared 37signals agent-skills publish target for Basecamp, HEY, and Fizzy.

Changes:

  • Updates README, installation guidance, and contributor documentation.
  • Documents product-specific CLI setup and skill sources.
  • Defines multi-source synchronization rules.
  • Updates plugin metadata and version to 0.2.0.
File summaries
File Summary
README.md Multi-product overview, skills catalog, requirements, and contribution guidance; installer PATH and sync-state documentation need correction.
install.md Product-specific CLI installation and verification flow; PATH handling and verification commands need correction.
AGENTS.md Repository ownership and synchronization rules; documented manifest behavior is inconsistent with the current implementation.
.claude-plugin/plugin.json Updated product descriptions and version metadata.
.claude-plugin/marketplace.json Updated marketplace descriptions and version metadata.
Review details

Suppressed comments (10)

README.md:54

  • The curl-based HEY installer persists its PATH change for future shells but does not update the current one, so hey auth login can immediately fail with command not found when neither default bin directory was already on PATH. Add a current-shell PATH update or require sourcing/restarting before login.
curl -fsSL https://hey.com/install-cli | bash   # or: brew install --cask basecamp/tap/hey
hey auth login

README.md:46

  • The curl-based Basecamp installer only writes its PATH change to a startup file, so the following basecamp auth login can fail in the same shell when the install directory was not already on PATH. The README's copy-paste setup should export the default install directories or tell the user to source/restart the shell before login.
curl -fsSL https://basecamp.com/install-cli | bash   # or: brew install --cask basecamp/tap/basecamp-cli
basecamp auth login

README.md:62

  • The Fizzy installer defaults to ~/.local/bin and only records the PATH change in shell startup configuration. In a fresh shell without that directory on PATH, the immediately following fizzy setup is not found. Export the install directory or use the installed binary's full path before setup.
curl -fsSL https://raw.githubusercontent.com/basecamp/fizzy-cli/master/scripts/install.sh | bash   # or: brew install --cask basecamp/tap/fizzy
fizzy setup   # personal access token, account, default board

README.md:83

  • The About section currently says each CLI records its own managed directories, but this checkout still has only the shared .managed-skills manifest with Basecamp entries, and the current upstream sync scripts use that shared file. Until the coordinated sync fixes ship, releases can still delete another product's skills, so this should be stated as future behavior or as conditional on those releases.
This repo is a publish target. On each release, a CLI's `scripts/sync-skills.sh`
copies its `skills/` tree into `skills/` here, records the directories it owns
in a manifest, and commits straight to `main`. Only the README, install.md,
AGENTS.md, and `.claude-plugin/` are written by hand.

install.md:40

  • basecamp auth status does not emit JSON by default; the Basecamp CLI install guide documents a human-readable Authenticated line (optionally Authenticated (scope: read)). This expected result is therefore incorrect and can make a successful verification look like a failure. Update it to match the CLI's actual output.
# Expected: OK. The status command exits 0 even when signed out, so test the flag.

install.md:5

  • This gate treats any hey or fizzy executable on PATH as a product the user selected, so a machine with an already-installed but unused/unauthenticated optional CLI cannot satisfy DONE WHEN even though the Basecamp-only setup is complete. Make the optional checks conditional on the products the user chose, rather than on command -v.
DONE WHEN: `basecamp --version && basecamp auth status --json | grep -q '"authenticated": true' && (for cli in hey fizzy; do ! command -v "$cli" >/dev/null || "$cli" auth status --json | grep -q '"authenticated": true' || exit 1; done)` succeeds and `npx skills list` shows the basecamp skill.

install.md:20

  • The Basecamp installer only persists its chosen bin directory in a shell startup file; it does not update the current shell's PATH. On a fresh machine where neither ~/bin nor ~/.local/bin is already on PATH, the subsequent basecamp --version and auth commands fail with command not found. Export the installer directories (or source the updated startup file) before verification.
curl -fsSL https://basecamp.com/install-cli | bash

install.md:48

  • The HEY installer writes a PATH change to the user's shell startup file but does not update this shell, so chaining hey auth login can resolve to command not found when the default install directory was not already on PATH. Add the default bin directories to PATH (or require sourcing/restarting the shell) before invoking the freshly installed CLI.
curl -fsSL https://hey.com/install-cli | bash && hey auth login

install.md:62

  • The Fizzy installer installs to ~/.local/bin by default and only prints instructions to add it to PATH; it does not update the current shell. Therefore the chained fizzy setup fails with command not found for a fresh user whose PATH lacks that directory. Export the install directory (or invoke the binary by its full path) before setup.
curl -fsSL https://raw.githubusercontent.com/basecamp/fizzy-cli/master/scripts/install.sh | bash && fizzy setup

install.md:68

  • The Fizzy setup flow above uses fizzy setup, but this verification invokes fizzy auth status (and the same check is embedded in both DONE WHEN expressions). Fizzy's documented CLI flow does not provide this Basecamp/HEY-style auth-status command, so a correctly configured Fizzy CLI will fail the prescribed verification and prevent the guide from completing. Use the documented Fizzy authentication/read-only verification command consistently here and in the DONE WHEN expressions.
fizzy --version && fizzy auth status --json | grep -q '"authenticated": true' && echo OK
# Expected: fizzy version X.Y.Z, then OK
  • Files reviewed: 5/5 changed files
  • Comments generated: 1
  • Review effort level: Lite (auto)

Note

Copilot is running an experiment and ran this review at Lite.


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread AGENTS.md

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9ee30e1ea1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread install.md Outdated
Comment thread install.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 64fea1712d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread install.md

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e38071263

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .claude-plugin/plugin.json Outdated
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.
@jeremy

jeremy commented Sep 14, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 18ad514cec

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread install.md Outdated
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.
@jeremy

jeremy commented Sep 14, 2026

Copy link
Copy Markdown
Member Author

Review threads: 1 resolved (1 fixed, 0 declined).

@jeremy

jeremy commented Sep 14, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9ccefba684

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread install.md Outdated
…stalled

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.
@jeremy

jeremy commented Sep 14, 2026

Copy link
Copy Markdown
Member Author

Review threads: 1 more resolved (1 fixed, 0 declined) — 7 of 7 resolved.

Bots on 8217f55: Codex reviewed it with no findings. Copilot reviewed only the opening commit 9ee30e1; this repository does not re-review on push, and a re-review cannot be requested by API.

@jeremy
jeremy merged commit 0cd0a04 into main Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

url to basecamp cli guide on this page is 404

3 participants