Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .surface
Original file line number Diff line number Diff line change
Expand Up @@ -12838,6 +12838,7 @@ FLAG basecamp setup agents --no-stats type=bool
FLAG basecamp setup agents --profile type=string
FLAG basecamp setup agents --project type=string
FLAG basecamp setup agents --quiet type=bool
FLAG basecamp setup agents --remove type=bool
FLAG basecamp setup agents --stats type=bool
FLAG basecamp setup agents --styled type=bool
FLAG basecamp setup agents --todolist type=string
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,15 @@ To pick up a newer plugin version later, refresh the marketplace with

**Other agents:** Point your agent at [`skills/basecamp/SKILL.md`](skills/basecamp/SKILL.md) for Basecamp workflow coverage.

To remove the Basecamp-managed shared skill and coding-agent plugins without
removing Basecamp authentication, configuration, or data, run:

```bash
basecamp setup agents --remove
```

The command leaves user-authored skill directories and additional files alone.

**Agent discovery:** Every command supports `--help --agent` for structured JSON output (flags, gotchas, subcommands). Use `basecamp commands --json` for the full catalog.

See [install.md](install.md) for step-by-step setup instructions.
Expand Down
5 changes: 5 additions & 0 deletions internal/appctx/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package appctx

import (
"context"
"errors"
"fmt"
"net/http"
"os"
Expand Down Expand Up @@ -258,6 +259,10 @@ func (a *App) OK(data any, opts ...output.ResponseOption) error {
func (a *App) Err(err error) error {
// Determine if we should include stats
var opts []output.ErrorResponseOption
var carrier output.ErrorMetaProvider
if errors.As(err, &carrier) {
opts = append(opts, output.WithErrorMeta(carrier.ErrorMetadata()))
}
if a.shouldIncludeStatsInError() {
stats := a.Collector.Summary()
opts = append(opts, output.WithErrorStats(&stats))
Expand Down
Loading