Back to skills
SKILL.md
Setup
BSecurityFull Cal.com Commander setup wizard - Cal.com API, Telegram bot, Supabase DB, GCP project, launchd services. Discovers 1Password.
- 75 stars
- 0 votes
- 0 copies
- 0 views
- Added September 2, 2026
Works with
Security analysis
75/100- Modifies startup scripts or system services for persistence
- Modifies startup scripts or system services for persistence
Pro scans all 2 files and shows the line behind each finding
npx -y skills add terrylica/cc-skills --skill setup --agent claude-codeAre you the author of Setup?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/terrylica-setup-cc-skills)---
name: setup
description: Full Cal.com Commander setup wizard - Cal.com API, Telegram bot, Supabase DB, GCP project, launchd services. Discovers 1Password.
allowed-tools: Bash, Read, Write, AskUserQuestion, Edit
disable-model-invocation: false
---
# Cal.com Commander Setup
Complete setup wizard for Cal.com CLI access, Telegram bot, Supabase database, and launchd services.
> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
## Prerequisites Check
```bash
# Check required tools
command -v op && echo "OK 1Password CLI" || echo "MISSING: brew install 1password-cli"
command -v proto && echo "OK proto" || echo "MISSING: brew install proto"
command -v bun && echo "OK bun" || echo "MISSING: proto install bun"
command -v gcloud && echo "OK gcloud" || echo "OPTIONAL: brew install google-cloud-sdk"
command -v supabase && echo "OK supabase" || echo "OPTIONAL: brew install supabase/tap/supabase"
```
## Phase 1: Cal.com API Setup
### Step 1: Check if already configured
```bash
echo "CALCOM_OP_UUID: ${CALCOM_OP_UUID:-NOT_SET}"
```
If already set, use AskUserQuestion to ask if user wants to reconfigure.
### Step 2: Discover 1Password items
```bash
op item list --vault "Claude Automation" --format json | jq -r '.[] | select(.title | test("calcom|cal.com|calendar"; "i")) | "\(.id)\t\(.title)"'
```
### Step 3: Present options
Use AskUserQuestion with discovered items or guide new API key creation.
### Step 4: Write the daemon env file
`~/gh/vjspc/amonic/.env.launchd` (gitignored, hand-maintained) is the daemon env SSoT; the launcher scripts source it. For interactive use, `export CALCOM_OP_UUID=<selected-uuid>` in the current shell instead.
```bash
# Add to ~/gh/vjspc/amonic/.env.launchd (replace any existing CALCOM_OP_UUID line)
echo "export CALCOM_OP_UUID='<selected-uuid>'" >> ~/gh/vjspc/amonic/.env.launchd
```
### Step 5: Build Cal.com CLI
```bash
cd "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/calcom-cli" && bun install && bun run build
```
### Step 6: Test Cal.com access
```bash
"$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/calcom-cli/calcom" event-types list
```
## Phase 2: Telegram Bot Setup
### Step 1: Check Telegram config
```bash
echo "TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:+SET}"
echo "TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-NOT_SET}"
```
If NOT_SET, guide user through BotFather setup:
1. Message @BotFather on Telegram
2. Send `/newbot` and follow prompts
3. Copy the token
4. Get chat ID: message the bot, then check `https://api.telegram.org/bot<TOKEN>/getUpdates`
### Step 2: Add to the daemon env file
```bash
# Append bot config to ~/gh/vjspc/amonic/.env.launchd
cat >> ~/gh/vjspc/amonic/.env.launchd << 'EOF'
export TELEGRAM_BOT_TOKEN='<bot-token>'
export TELEGRAM_CHAT_ID='<chat-id>'
EOF
```
## Phase 3: GCP + Supabase Setup
### Step 1: Check GCP configuration
```bash
echo "CALCOM_GCP_PROJECT: ${CALCOM_GCP_PROJECT:-NOT_SET}"
echo "CALCOM_GCP_ACCOUNT: ${CALCOM_GCP_ACCOUNT:-NOT_SET}"
echo "SUPABASE_PROJECT_REF: ${SUPABASE_PROJECT_REF:-NOT_SET}"
```
If NOT_SET, guide user through:
1. GCP project creation: `gcloud projects create <project-id>`
2. Enable APIs: Cloud Run, Artifact Registry, Cloud Build
3. Link billing account
4. Supabase project creation via CLI or dashboard
5. Store all references as `export` lines in `~/gh/vjspc/amonic/.env.launchd` (see [env-setup.md](../calcom-access/references/env-setup.md))
### Step 2: Generate Cal.com secrets (if needed)
```bash
# Generate 3 secrets
NEXTAUTH_SECRET=$(openssl rand -base64 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
CRON_API_KEY=$(openssl rand -hex 32)
echo "NEXTAUTH_SECRET: $NEXTAUTH_SECRET"
echo "CALENDSO_ENCRYPTION_KEY: $ENCRYPTION_KEY"
echo "CRON_API_KEY: $CRON_API_KEY"
```
Store in 1Password Claude Automation vault.
## Phase 4: launchd Service Installation
### Step 1: Create launcher scripts
```bash
mkdir -p ~/gh/vjspc/amonic/bin ~/gh/vjspc/amonic/logs
# Bot launcher
cat > ~/gh/vjspc/amonic/bin/calcom-commander-bot << 'SCRIPT'
#!/bin/zsh
set -euo pipefail
# .env.launchd is hand-maintained and is the SSoT for daemon env.
source "$HOME/gh/vjspc/amonic/.env.launchd"
cd "$HOME/gh/vjspc/amonic"
exec "$HOME/.proto/shims/bun" run "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/bot.ts"
SCRIPT
chmod +x ~/gh/vjspc/amonic/bin/calcom-commander-bot
# Sync launcher
cat > ~/gh/vjspc/amonic/bin/calcom-commander-sync << 'SCRIPT'
#!/bin/zsh
set -euo pipefail
# .env.launchd is hand-maintained and is the SSoT for daemon env.
source "$HOME/gh/vjspc/amonic/.env.launchd"
cd "$HOME/gh/vjspc/amonic"
exec "$HOME/.proto/shims/bun" run "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/sync.ts"
SCRIPT
chmod +x ~/gh/vjspc/amonic/bin/calcom-commander-sync
```
### Step 2: Install launchd plists
Use AskUserQuestion to confirm before installing launchd services.
```bash
# Copy plist templates to LaunchAgents
# launchctl load ~/Library/LaunchAgents/com.terryli.calcom-commander-bot.plist
# launchctl load ~/Library/LaunchAgents/com.terryli.calcom-commander-sync.plist
```
## Phase 5: Verification
```bash
# Run health check
echo "=== Cal.com CLI ==="
"$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/calcom-cli/calcom" event-types list 2>&1 | head -5
echo ""
echo "=== Bot Process ==="
pgrep -fl calcom-commander || echo "Not running"
echo ""
echo "=== launchd ==="
launchctl list | grep calcom-commander || echo "Not registered"
echo ""
echo "=== Supabase ==="
DATABASE_URL=$(op read "$SUPABASE_DB_URL_REF" 2>/dev/null) && psql "$DATABASE_URL" -c "SELECT 1" 2>&1 | head -3 || echo "DB not configured"
```
## Success Criteria
1. `echo $CALCOM_OP_UUID` shows a UUID
2. Cal.com CLI returns event type data
3. `echo $TELEGRAM_BOT_TOKEN` is set
4. Bot responds to /help in Telegram
5. Supabase DB is accessible
6. launchd jobs are loaded (optional)
## No API Credentials?
Direct user to: [calcom-api-setup.md](../calcom-access/references/calcom-api-setup.md)
---
## Post-Execution Reflection
After this skill completes, reflect before closing the task:
0. **Locate yourself.** — Find this SKILL.md's canonical path (Glob for this skill's name) before editing. All corrections target THIS file and its sibling references/ — never other documentation.
1. **What failed?** — Fix the instruction that caused it. If it could recur, add it as an anti-pattern.
2. **What worked better than expected?** — Promote it to recommended practice. Document why.
3. **What drifted?** — Any script, reference, or external dependency that no longer matches reality gets fixed now.
4. **Log it.** — Every change gets an evolution-log entry with trigger, fix, and evidence.
Do NOT defer. The next invocation inherits whatever you leave behind.
Files in this skill
- SKILL.md
- references/evolution-log.md
Attribution
Comments
Loading comments…