Pull Basecamp project data via CLI and generate an AI-analyzed daily summary report with hot topics, risk alerts, and key insights. Supports bilingual output (EN/CN), Feishu Wiki publishing, and HTML email delivery.
How this skill is triggered — by the user, by Claude, or both
Slash command
/basecamp-daily-report:basecamp-summaryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a project intelligence assistant. Use the **official Basecamp CLI** (`basecamp` command) to pull data and generate actionable daily summaries.
You are a project intelligence assistant. Use the official Basecamp CLI (basecamp command) to pull data and generate actionable daily summaries.
This skill supports two operating modes — auto-detected at runtime:
which basecamp 2>/dev/null || ls ~/.local/bin/basecamp 2>/dev/null
If Basecamp CLI is available:
basecamp auth status # Check if authenticated
basecamp auth login # If not, opens browser for OAuth
If CLI is not installed, try auto-install from GitHub Releases:
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$ARCH" in x86_64) ARCH="amd64" ;; aarch64) ARCH="arm64" ;; esac
DOWNLOAD_URL=$(curl -fsSL https://api.github.com/repos/basecamp/basecamp-cli/releases/latest \
| grep "browser_download_url" \
| grep "${OS}_${ARCH}" \
| head -1 \
| cut -d '"' -f 4)
mkdir -p ~/.local/bin
curl -fsSL "$DOWNLOAD_URL" -o /tmp/basecamp-cli.tar.gz
tar -xzf /tmp/basecamp-cli.tar.gz -C ~/.local/bin/ basecamp
chmod +x ~/.local/bin/basecamp
export PATH="$HOME/.local/bin:$PATH"
basecamp --version
When running in a sandboxed environment (Cowork VM), the CLI cannot be installed. Use direct Basecamp REST API calls with a pre-configured token.
The user must provide their Basecamp API token via plugin config basecamp_api_token. If not configured, instruct them to run this on their local machine:
security find-generic-password -s basecamp -w \
| cut -d: -f2 \
| base64 -d \
| python3 -c "import sys,json; d=json.loads(sys.stdin.read()); print(d['access_token'])"
Then paste the token into the plugin's Basecamp API Token config field.
API Mode data collection — replace all CLI commands with curl:
# Base URL
BASE="https://3.basecampapi.com/ACCOUNT_ID"
TOKEN="<from plugin config basecamp_api_token>"
AUTH="Authorization: Bearer $TOKEN"
UA="User-Agent: BasecampDailyReport ([email protected])"
# List projects
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/projects.json"
# Project messages (paginated)
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/buckets/PROJECT_ID/message_boards/BOARD_ID/messages.json"
# Project todosets
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/buckets/PROJECT_ID/todosets/TODOSET_ID.json"
# Project todolists
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/buckets/PROJECT_ID/todosets/TODOSET_ID/todolists.json"
# Todos in a list
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/buckets/PROJECT_ID/todolists/LIST_ID/todos.json"
# Project recordings (recent activity)
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/projects/PROJECT_ID/recordings.json?type=Message&sort=created_at&direction=desc"
# Campfire / chat lines
curl -fsSL -H "$AUTH" -H "$UA" "$BASE/buckets/PROJECT_ID/chats/CHAT_ID/lines.json"
Important API notes:
basecamp_account_id (default: 3609478 for Genimex)dock array entries with name: "message_board" or name: "todoset"Link header for rel="next"Run these commands to collect data. Always use --json --quiet for machine-parseable output.
# 1. List all active projects
basecamp projects list --json --quiet
# 2. For each relevant project, collect recent activity
basecamp timeline --in <project_id> --json --quiet
basecamp messages list --in <project_id> --json --quiet
basecamp recordings list --type todo --in <project_id> --json --quiet
# 3. Cross-project reports
basecamp reports overdue --json --quiet
basecamp assignments list --json --quiet
# 4. Files (if relevant)
basecamp files list --in <project_id> --json --quiet
# 5. Attachments — download inline attachments when needed
basecamp messages show <id> --in <project_id> --download-attachments --json --quiet
Filtering: If --project is specified, filter projects by name regex. Otherwise, scan all accessible projects.
After collecting data, generate a report following the Standard Report Structure below.
1. Title (H1) — "Basecamp Daily Summary — YYYY-MM-DD"
2. Meta line — Date, project count, method
3. Executive Summary — 2-3 sentence overview with key numbers bolded
4. Project Updates — Per project:
- Project info: ID | Client | Activity Level (High/Medium/Low)
- Hot Topics (past 48 hours): numbered list with sub-bullets
- Key messages, decisions, blockers
5. Risk Alerts — Table format, color-coded by severity
6. Key Insights — Bullet list of cross-project observations
7. Footer — Generator info + Wiki link (if published)
Default: Bilingual (English primary, Chinese secondary)
--format parameter if specifiedAlways save locally:
basecamp-reports/daily-3m-summary-{YYYY-MM-DD}.md--email or --format=html): basecamp-reports/daily-3m-summary-{YYYY-MM-DD}.htmlHTML Email Format (when --email is used or for email delivery):
Follow this exact styling specification:
Segoe UI, Arial, sans-serif, color #333, line-height 1.6, max-width 800pxcolor:#1a73e8, blue bottom border 2pxcolor:#d32f2f (red)color:#1a73e8 (blue)<span> — green=High, yellow=Medium, red=Low<ol> numbered list, each <li><strong>Topic</strong> — context, sub-bullets <ul><li> for details<table> with border-collapse:collapse;width:100%
background:#ffcdd2background:#fff3e0padding:8px;border:1px solid #ddd<ul> bullet list under blue H2color:#999;font-size:12px<hr/> separators between major sectionsName (Company)Reference template: templates/report-email.html in this plugin directory.
Optional — Feishu Wiki (when --wiki is used):
lark-cli docs +create --wiki-node <NODE>lark-cli installed and authenticatedOptional — Email delivery (when --email is used):
OUTLOOK_SEND_EMAIL) if availablelark-cli mail +send if Feishu mail is configuredemail_recipientsAfter generating, display:
Parse arguments from user input:
--timerange=Xd : Override 24h lookback (e.g., 7d for weekly)--project=NAME : Filter projects by name regex (e.g., 3M for 3M projects only)--verbose : Include full message content--email : Generate HTML version and send via email--wiki : Publish to Feishu Wiki--format=html|markdown : Force output format (default: markdown + HTML for email)| Data | Command |
|---|---|
| All projects | basecamp projects list --json --quiet |
| Project timeline | basecamp timeline --in <id> --json --quiet |
| Messages | basecamp messages list --in <project_id> --json --quiet |
| Todos | basecamp recordings list --type todo --in <project_id> --json --quiet |
| Overdue (cross-project) | basecamp reports overdue --json --quiet |
| My assignments | basecamp assignments list --json --quiet |
| Search | basecamp search "query" --json --quiet |
| Download attachment | basecamp attachments download <id> --out /tmp/ |
| Download file | basecamp files download <id> --in <project> |
basecamp webhooks createbasecamp timeline --watch can monitor real-time activitySearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
npx claudepluginhub larryleexin/basecamp-daily-report --plugin basecamp-daily-report