basecamp/house-skills

basecamp-activity

Fetch Basecamp project or person activity into day-cached JSON atoms.

Voir la source
Document Skill original

Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.

Basecamp Activity Fetcher

Fetch Basecamp activity events into per-day cached JSON atoms. Supports two scopes:

  • Project-scoped (--project): all events in a Basecamp project
  • Person-scoped (--person): all activity by a specific user

Caches at ~/.cache/recap/basecamp-project/{id}/{YYYY-MM-DD}/activity.json or ~/.cache/recap/basecamp-person/{slug}/{YYYY-MM-DD}/activity.json.

Invocation

/recap:basecamp-activity --project 43483623 --since 2026-03-23
/recap:basecamp-activity --project 43483623 --since 2026-03-23 --until 2026-03-30 --reuse
/recap:basecamp-activity --person "Jeremy Daer" --since 2026-03-23

Contract

  • Idempotent: same input produces same output, safe to re-run
  • Day-cached: one JSON file per scope per day
  • `--reuse`: skip fetch if cache exists and is marked complete
  • Rate-limit aware: exponential backoff on 429 responses

Quick Run

bash
# 1. Validate auth
basecamp auth status | jq -e '.data.authenticated' || { echo "Run: basecamp auth login"; exit 1; }

# 2. Determine date range
SINCE=$(date -d "7 days ago" +%Y-%m-%d)
UNTIL=$(date +%Y-%m-%d)

# 3. Run the fetcher (project-scoped)
"$SKILL_DIR/scripts/basecamp-activity.sh" \
  --project 43483623 --since "$SINCE" --until "$UNTIL"

# 4. Verify cache
ls ~/.cache/recap/basecamp-project/43483623/
cat ~/.cache/recap/basecamp-project/43483623/$SINCE/activity.json | jq '.metadata'

Where $SKILL_DIR = directory containing this SKILL.md.

Output Format

Each activity.json contains:

json
{
  "scope": "project 43483623",
  "date": "2026-03-24",
  "events": [
    {
      "id": 123456,
      "kind": "message_created",
      "created_at": "2026-03-24T14:30:00Z",
      "creator": { "id": 789, "name": "Jeremy" },
      "title": "Weekly update",
      "url": "https://3.basecampapi.com/..."
    }
  ],
  "metadata": { "complete": true, "count": 5 }
}

Arguments

ArgumentRequiredDescription
--projectOne of project/personBasecamp project ID
--personOne of project/personPerson name or ID (passed to basecamp timeline --person)
--sinceYesStart date (YYYY-MM-DD)
--untilNoEnd date (default: today)
--reuseNoSkip fetch if cache exists and is complete

Cache Structure

~/.cache/recap/basecamp-project/
  43483623/
    2026-03-24/activity.json
    2026-03-25/activity.json

Prerequisites

  • basecamp CLI installed and authenticated (basecamp auth login)
  • jq for JSON parsing
  • curl for API calls

Failure Modes

SymptomCauseFix
"basecamp not authenticated"Token expiredbasecamp auth login
"account not configured"Missing configbasecamp config setup
Rate limitToo many API callsScript retries automatically with backoff
Empty activityNo events in rangeExpected — empty days are cached as complete
HTTP 404Wrong project IDVerify project ID in Basecamp URL
du même dépôt

Autres Skills

Tous les Skills