Skill: audsmith28/invoice-chaser (version 1.1.0)

--- name: invoice-chaser description: Automated invoice follow-up sequences that escalate from friendly to firm. Track unpaid invoices, send timed reminder emails with escalating tone, log payment interactions, and generate AR aging reports. Your agent handles the awkward conversations so you don't have to — preserving cash flow and client relationships while you focus on actual work. Configure invoice tracking, email templates per stage (friendly → firm → final notice), timing rules, and let your agent chase payments 24/7. Use when adding invoices, running payment chases, checking status, or generating accounts receivable reports. metadata: clawdbot: emoji: "💸" requires: skills: - gog env: - GOG_DEFAULT_ACCOUNT --- # Invoice Chaser — Stop Chasing, Start Getting Paid **You do the work. Your agent gets you paid.** Every freelancer, consultant, and small business owner knows the pain: you did the work, sent the invoice, and now... crickets. Following up is awkward. Waiting kills cash flow. Chasing payments wastes time you could spend on billable work. Invoice Chaser automates the entire follow-up sequence. It sends reminder emails on schedule, escalates tone from friendly to firm, tracks payment status, logs every interaction, and alerts you when invoices need human attention. Think of it as a persistent, diplomatic collections agent that never forgets and never feels awkward. **What makes it different:** This isn't just "send reminder in 7 days." Invoice Chaser runs a full AR pipeline with state management, escalation logic, and tone progression. It knows when to be friendly ("just a heads up"), when to be firm ("payment is 30 days overdue"), and when to alert you for manual escalation. Multi-stage sequences handle the complexity of real-world payment cycles. ## Setup 1. Run `scripts/setup.sh` to initialize config and data directories 2. Edit `~/.config/invoice-chaser/config.json` with email templates, timing, and escalation rules 3. Ensure `gog` skill is installed (for Gmail sending) 4. Set `GOG_DEFAULT_ACCOUNT` in `~/.clawdbot/secrets.env` (e.g., `[REDACTED_SECRET]`) 5. Test with: `scripts/add-invoice.sh --test` ## Config Config lives at `~/.config/invoice-chaser/config.json`. See `config.example.json` for full schema. Key sections: - **business** — Your company name, contact info, payment terms - **stages** — Email templates for each escalation stage (reminder, overdue, firm, final) - **timing** — When to send each stage (days after invoice date or previous stage) - **escalation** — Auto-escalation rules, human intervention thresholds - **payment_methods** — Include payment links/instructions in reminders - **reporting** — Channel, frequency, AR aging groupings Email templates support variables: `{client_name}`, `{invoice_number}`, `{amount}`, `{due_date}`, `{days_overdue}`, `{payment_link}`. ## Scripts | Script | Purpose | |--------|---------| | `scripts/setup.sh` | Initialize config and data directories | | `scripts/add-invoice.sh` | Add new invoice to tracking system | | `scripts/chase.sh` | Run payment chase cycle (check status, send reminders, escalate) | | `scripts/status.sh` | Show invoice status and AR aging summary | | `scripts/report.sh` | Generate detailed AR aging report | All scripts support `--dry-run` for testing without sending emails. ## Adding Invoices ```bash # Add invoice manually scripts/add-invoice.sh \ --number "INV-2025-042" \ --client "Acme Corp" \ --email "[REDACTED_SECRET]" \ --amount 2500.00 \ --date "2025-01-15" \ --due "2025-02-14" \ --net 30 # Quick add (assumes net-30 terms) scripts/add-invoice.sh --number "INV-042" --client "Acme Corp" --email "[REDACTED_SECRET]" --amount 2500 # Mark as paid scripts/status.sh INV-042 --paid --date "2025-02-10" ``` ## Chase Cycle Run `scripts/chase.sh` on schedule (cron daily recommended). The chase cycle: 1. Loads all unpaid invoices from tracking database 2. Calculates days since invoice date and days overdue (past due date) 3. Determines current stage for each invoice based on timing rules 4. Sends appropriate reminder emails (stage-based templates with escalating tone) 5. Logs all sent emails and stage progressions 6. Escalates to human when threshold reached (e.g., 60 days overdue) 7. Generates status report ## Escalation Stages ``` SENT → REMINDER (friendly) → OVERDUE (professional) → FIRM (insistent) → FINAL (urgent) → ESCALATED ↓ ↓ day 3 ↓ day 7+ ↓ day 30 ↓ day 45 ↓ day 60 PAID (any time) ✅ ``` **Default timeline:** - **Day 3**: Friendly reminder ("Your invoice is due soon...") - **Day 7+**: Due date reminder ("Payment was due on [date]...") - **Day 30**: First overdue notice ("Your account is now 30 days past due...") - **Day 45**: Firm notice ("We must receive payment immediately...") - **Day 60**: Final notice ("Final notice before we escalate to collections...") - **Day 75+**: Human escalation alert All timing is configurable in `config.json`. ## Email Tone Progression **Stage 1 — Friendly Reminder (Day 3):** > Hi [Client], > > Just a friendly reminder that invoice #[number] for $[amount] is due on [due date]. Let me know if you have any questions! **Stage 2 — Professional Overdue (Day 14):** > Hi [Client], > > I wanted to follow up on invoice #[number] for $[amount], which was due on [due date]. If you've already sent payment, please disregard this message. Otherwise, please let me know if there are any issues preventing payment. **Stage 3 — Firm Notice (Day 30):** > Dear [Client], > > Your account is now 30 days past due. Invoice #[number] for $[amount] was due on [due date]. Immediate payment is required to avoid service interruption and late fees. **Stage 4 — Final Notice (Day 45):** > Dear [Client], > > FINAL NOTICE: Invoice #[number] for $[amount] is now 45 days overdue. If we do not receive payment within 7 days, we will be forced to escalate this matter to collections. All templates fully customizable in config. ## Payment Tracking ```bash # Mark invoice as paid status.sh INV-042 --paid --date "2025-02-10" # Add payment note status.sh INV-042 --note "Client called, payment sent via check" # Pause reminders (client asked for extension) status.sh INV-042 --pause --until "2025-03-01" # Archive without payment (write-off) status.sh INV-042 --archive --reason "Bad debt write-off" ``` ## AR Aging Report ```bash # Show summary scripts/report.sh # Output: # 📊 Accounts Receivable Aging Report # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Current (0-30 days): $12,500 (5 invoices) # 31-60 days: $3,200 (2 invoices) ⚠️ # 61-90 days: $1,800 (1 invoice) 🚨 # 90+ days: $500 (1 invoice) 💀 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Total Outstanding: $18,000 (9 invoices) # Detail view scripts/report.sh --detail # Export to CSV scripts/report.sh --export ar-aging-2025-01-28.csv ``` ## Data Files ``` ~/.config/invoice-chaser/ ├── config.json # User configuration ├── invoices.json # Invoice database (state machine) ├── chase-log.json # Email send history ├── last-chase-report.json # Latest chase run data └── archives/ └── YYYY-MM/ # Archived paid/written-off invoices ``` ## Automation Set up daily chase runs via cron: ```bash # Run every morning at 9 AM 0 9 * * * cd ~/clawd/skills/invoice-chaser && scripts/chase.sh >> ~/.config/invoice-chaser/chase.log 2>&1 # Weekly AR report to Telegram (Mondays at 8 AM) 0 8 * * 1 cd ~/clawd/skills/invoice-chaser && scripts/report.sh --channel telegram ``` Or use Clawdbot's cron integration: ```bash clawdbot cron add \ --schedule "0 9 * * *" \ --command "cd ~/clawd/skills/invoice-chaser && scripts/chase.sh" \ --label "invoice-chaser-daily" ``` ## Invoice States ``` DRAFT → SENT → REMINDED → OVERDUE → FIRM → FINAL → ESCALATED ↓ (human intervention) Any state → PAID ✅ Any state → PAUSED ⏸ (temporary hold) Any state → ARCHIVED 📁 (written off or canceled) ``` ## Integration with Accounting Invoice Chaser tracks payment status. For full accounting integration: - Export invoices with `--export` flag - Import into QuickBooks, FreshBooks, etc. - Or build custom adapter (see `references/accounting-adapters.md`) ## Safety Features - **Dry-run mode**: Test templates without sending emails - **Pause invoices**: Stop reminders for clients with special circumstances - **Manual override**: Block auto-escalation for sensitive clients - **Email preview**: Review email before first send to new client - **Rate limiting**: Max emails per day to avoid spam flags - **Unsubscribe handling**: Respect opt-outs (manual removal from tracking) ## Best Practices 1. **Be consistent**: Run chase cycle daily — consistency trains clients to pay on time 2. **Personalize templates**: Use client names, reference specific work in stage 1-2 emails 3. **Include payment links**: Make it easy to pay (Stripe, PayPal, bank details) 4. **Escalate gradually**: Don't skip stages — tone progression maintains relationships 5. **Know when to pause**: Client communication issues? Pause and follow up manually 6. **Archive regularly**: Move paid invoices to archives monthly to keep DB clean 7. **Monitor aging**: Weekly AR report reveals patterns (chronic late payers, systemic issues) ## Example Workflow **Initial setup:** ```bash scripts/setup.sh # Edit ~/.config/invoice-chaser/config.json with your details ``` **When you send an invoice:** ```bash scripts/add-invoice.sh --number "INV-042" --client "Acme Corp" --email "[REDACTED_SECRET]" --amount 2500 --date "2025-01-15" --due "2025-02-14" ``` **Daily automated chase** (via cron): ```bash scripts/chase.sh # Runs every morning, sends reminders based on timing rules ``` **When payment arrives:** ```bash scripts/status.sh INV-042 --paid --date "2025-02-12" ``` **Weekly review:** ```bash scripts/report.sh # Check AR aging, identify problem invoices ``` ## Troubleshooting **Emails not sending:** - Check `gog` skill is installed: `gog gmail whoami` - Verify `GOG_DEFAULT_ACCOUNT` in `~/.clawdbot/secrets.env` - Test with `--dry-run` flag to see email preview **Wrong escalation stage:** - Check `timing` section in config.json - Verify invoice `date` and `due_date` fields - Use `status.sh INV-XXX` to see current days calculation **Client keeps getting emails after payment:** - Run `status.sh INV-XXX --paid` to mark as paid - Check `invoices.json` to confirm status updated ## Philosophy You did the work. You earned the money. You shouldn't have to beg for it. Invoice Chaser handles the uncomfortable part of freelancing — following up on unpaid invoices — with persistence and escalating firmness. It preserves your professional relationships by being diplomatic in early stages, but doesn't let clients take advantage of you by being firm when necessary. Cash flow is the lifeblood of small businesses. Late payments kill businesses. Invoice Chaser keeps the blood flowing so you can focus on what you do best: your actual work. --- **Stop chasing payments. Your agent sends the awkward emails so you don't have to.**

path: config.example.json
content: {
  "business": {
    "name": "Your Business Name",
    "contact_name": "Your Name",
    "email": "[REDACTED_SECRET]",
    "phone": "+1-555-0100",
    "website": "https://yourbusiness.com",
    "default_payment_terms": "net-30",
    "currency": "USD"
  },
  "payment_methods": {
    "include_in_reminders": true,
    "methods": [
      {
        "type": "bank_transfer",
        "details": "Bank: Example Bank\nAccount: 123456789\nRouting: 987654321"
      },
      {
        "type": "stripe",
        "link": "https://pay.yourbusiness.com/invoice/{invoice_number}"
      },
      {
        "type": "paypal",
        "email": "[REDACTED_SECRET]"
      },
      {
        "type": "check",
        "details": "Make checks payable to: Your Business Name\nMail to: 123 Main St, City, ST 12345"
      }
    ]
  },
  "stages": [
    {
      "name": "pre-due-reminder",
      "enabled": true,
      "trigger_days": 3,
      "trigger_from": "invoice_date",
      "subject": "Friendly reminder: Invoice {invoice_number} due soon",
      "body": "Hi {client_name},\n\nJust a friendly reminder that invoice #{invoice_number} for {amount} is due on {due_date}.\n\nIf you have any questions about the invoice or need any clarification, please don't hesitate to reach out.\n\n{payment_instructions}\n\nThanks for your business!\n\n{contact_name}\n{business_name}",
      "tone": "friendly"
    },
    {
      "name": "due-date-reminder",
      "enabled": true,
      "trigger_days": 0,
      "trigger_from": "due_date",
      "subject": "Payment due today: Invoice {invoice_number}",
      "body": "Hi {client_name},\n\nThis is a reminder that payment for invoice #{invoice_number} ({amount}) is due today ({due_date}).\n\nIf you've already sent payment, thank you! Please disregard this message.\n\n{payment_instructions}\n\nPlease let me know if you have any questions.\n\nBest regards,\n{contact_name}\n{business_name}",
      "tone": "professional"
    },
    {
      "name": "first-overdue",
      "enabled": true,
      "trigger_days": 14,
      "trigger_from": "due_date",
      "subject": "Overdue invoice: {invoice_number} ({days_overdue} days past due)",
      "body": "Hi {client_name},\n\nI wanted to follow up on invoice #{invoice_number} for {amount}, which was due on {due_date} and is now {days_overdue} days past due.\n\nIf you've already sent payment, please disregard this message and accept my thanks. Otherwise, I'd appreciate if you could let me know when I can expect payment, or if there are any issues preventing payment that I should be aware of.\n\n{payment_instructions}\n\nThank you for your attention to this matter.\n\nBest regards,\n{contact_name}\n{business_name}\n{phone}",
      "tone": "professional"
    },
    {
      "name": "firm-notice",
      "enabled": true,
      "trigger_days": 30,
      "trigger_from": "due_date",
      "subject": "URGENT: Invoice {invoice_number} is 30 days overdue",
      "body": "Dear {client_name},\n\nYour account is now 30 days past due. Invoice #{invoice_number} for {amount} was due on {due_date}.\n\nImmediate payment is required. If payment is not received within 7 days, we may need to suspend services and assess late fees per our payment terms.\n\n{payment_instructions}\n\nIf there is a reason for the delay that I'm not aware of, please contact me immediately at {phone} or {email}.\n\nRegards,\n{contact_name}\n{business_name}",
      "tone": "firm"
    },
    {
      "name": "final-notice",
      "enabled": true,
      "trigger_days": 45,
      "trigger_from": "due_date",
      "subject": "FINAL NOTICE: Invoice {invoice_number} - Action Required",
      "body": "Dear {client_name},\n\nFINAL NOTICE\n\nInvoice #{invoice_number} for {amount} is now {days_overdue} days overdue (due date: {due_date}).\n\nIf we do not receive payment within 7 days, we will be forced to escalate this matter to a collections agency, which will negatively impact your credit rating and may result in additional fees.\n\n{payment_instructions}\n\nPlease contact me immediately at {phone} or {email} if you need to arrange a payment plan or discuss this matter.\n\nThis is your final notice before escalation.\n\n{contact_name}\n{business_name}\n{phone}\n{email}",
      "tone": "final"
    }
  ],
  "timing": {
    "check_frequency_hours": 24,
    "max_emails_per_day": 5,
    "min_hours_between_stages": 12,
    "business_hours_only": true,
    "business_hours": {
      "start": "09:00",
      "end": "17:00",
      "timezone": "America/New_York"
    },
    "skip_weekends": true,
    "skip_holidays": true,
    "holidays": [
      "2025-01-01",
      "2025-07-04",
      "2025-12-25"
    ]
  },
  "escalation": {
    "auto_escalate": true,
    "human_intervention_days": 60,
    "human_intervention_amount": 5000,
    "collections_threshold_days": 90,
    "late_fee": {
      "enabled": false,
      "percentage": 1.5,
      "start_after_days": 30,
      "max_percentage": 10
    },
    "manual_override_clients": []
  },
  "notifications": {
    "channel": "telegram",
    "notify_on": [
      "payment_received",
      "escalation_required",
      "stage_progression",
      "email_bounce"
    ],
    "daily_summary": true,
    "weekly_ar_report": true,
    "weekly_report_day": "monday"
  },
  "reporting": {
    "aging_buckets": [
      {"label": "Current", "days": 0, "max_days": 30, "emoji": "✅"},
      {"label": "31-60 days", "days": 31, "max_days": 60, "emoji": "⚠️"},
      {"label": "61-90 days", "days": 61, "max_days": 90, "emoji": "🚨"},
      {"label": "90+ days", "days": 91, "max_days": 999, "emoji": "💀"}
    ],
    "include_notes": true,
    "include_contact_history": true
  },
  "email": {
    "from_name": "{contact_name} - {business_name}",
    "reply_to": "{email}",
    "cc": [],
    "bcc": ["{email}"],
    "signature": "\n\n--\n{contact_name}\n{business_name}\n{email}\n{phone}\n{website}"
  },
  "testing": {
    "dry_run_default": false,
    "test_email": "[REDACTED_SECRET]"
  }
}


path: scripts/add-invoice.sh
content: #!/bin/bash
# invoice-chaser/scripts/add-invoice.sh — Add a new invoice to the tracking system

set -euo pipefail

CHASER_DIR="${CHASER_DIR:-$HOME/.config/invoice-chaser}"
INVOICES_FILE="$CHASER_DIR/invoices.json"
CONFIG_FILE="$CHASER_DIR/config.json"

# --- HELPERS ---
function usage() {
  echo "Usage: $0 --number <inv_num> --client <name> --email <addr> --amount <num> [options]"
  echo ""
  echo "Adds a new invoice to the tracking system."
  echo ""
  echo "Required arguments:"
  echo "  --number      string    Invoice number (unique ID)"
  echo "  --client      string    Client's name"
  echo "  --email       string    Client's billing email address"
  echo "  --amount      float     Invoice total amount"
  echo ""
  echo "Optional arguments:"
  echo "  --date        string    Invoice date (YYYY-MM-DD, default: today)"
  echo "  --due         string    Due date (YYYY-MM-DD, default: net terms from config)"
  echo "  --net         integer   Payment terms in days (e.g., 30)"
  echo "  --project     string    Project name or description"
  echo "  --notes       string    Internal notes about the invoice"
  echo "  --test                    Add a test invoice with pre-filled data"
  echo "  -h, --help                Show this help message"
  exit 1
}

# --- ARGUMENT PARSING ---
INV_NUMBER=""
CLIENT_NAME=""
CLIENT_EMAIL=""
AMOUNT=0
INV_DATE=$(date +%Y-%m-%d)
DUE_DATE=""
NET_TERMS=""
PROJECT=""
NOTES=""

# Test mode flag
if [[ " $* " == *" --test "* ]]; then
  echo "🧪 Adding a test invoice..."
  INV_NUMBER="TEST-$(date +%s)"
  CLIENT_NAME="Test Client Inc."
  CLIENT_EMAIL="[REDACTED_SECRET]"
  AMOUNT="1250.50"
  PROJECT="Test Project"
  NOTES="This is a test invoice created by add-invoice.sh --test"
else
  while [[ $# -gt 0 ]]; do
    case $1 in
      --number) INV_NUMBER="$2"; shift 2 ;;
      --client) CLIENT_NAME="$2"; shift 2 ;;
      --email) CLIENT_EMAIL="$2"; shift 2 ;;
      --amount) AMOUNT="$2"; shift 2 ;;
      --date) INV_DATE="$2"; shift 2 ;;
      --due) DUE_DATE="$2"; shift 2 ;;
      --net) NET_TERMS="$2"; shift 2 ;;
      --project) PROJECT="$2"; shift 2 ;;
      --notes) NOTES="$2"; shift 2 ;;
      -h|--help) usage ;;
      *) echo "Unknown option: $1"; usage ;;
    esac
  done
fi


# --- VALIDATION ---
if [[ -z "$INV_NUMBER" || -z "$CLIENT_NAME" || -z "$CLIENT_EMAIL" || "$AMOUNT" == "0" ]]; then
  echo "Error: Missing required arguments."
  usage
fi

if ! command -v jq &> /dev/null; then
    echo "Error: 'jq' is not installed. Please install it to continue."
    exit 1
fi

if [ ! -f "$CONFIG_FILE" ]; then
    echo "Error: Config file not found at $CONFIG_FILE"
    echo "Run setup.sh first."
    exit 1
fi

if [ ! -f "$INVOICES_FILE" ]; then
    echo "Error: Invoices file not found at $INVOICES_FILE"
    echo "Run setup.sh first."
    exit 1
fi

# Check if invoice number already exists
if jq -e ".invoices[\"$INV_NUMBER\"]" "$INVOICES_FILE" > /dev/null; then
  echo "Error: Invoice number '$INV_NUMBER' already exists."
  exit 1
fi

# --- DATE CALCULATION ---
if [[ -z "$DUE_DATE" ]]; then
  if [[ -z "$NET_TERMS" ]]; then
    NET_TERMS=$(jq -r '.business.default_payment_terms' "$CONFIG_FILE" | sed 's/net-//')
  fi
  # Simple date addition; for production, a more robust date tool might be needed
  DUE_DATE=$(date -j -v+${NET_TERMS}d -f "%Y-%m-%d" "$INV_DATE" "+%Y-%m-%d")
fi

# --- CREATE INVOICE OBJECT ---
invoice_json=$(jq -n \
  --arg number "$INV_NUMBER" \
  --arg client "$CLIENT_NAME" \
  --arg email "$CLIENT_EMAIL" \
  --arg amount "$AMOUNT" \
  --arg date "$INV_DATE" \
  --arg due "$DUE_DATE" \
  --arg project "$PROJECT" \
  --arg notes "$NOTES" \
  '{
    "client_name": $client,
    "client_email": $email,
    "amount": ($amount | tonumber),
    "date": $date,
    "due_date": $due,
    "project": $project,
    "status": "sent",
    "last_chase_stage": null,
    "last_chase_date": null,
    "payment_date": null,
    "is_paused": false,
    "pause_until": null,
    "notes": [$notes],
    "history": [
      {
        "timestamp": "\(now | strftime("%Y-%m-%dT%H:%M:%SZ"))",
        "action": "created",
        "details": "Invoice added to tracking system."
      }
    ]
  }')

# --- SAVE TO FILE ---
temp_file=$(mktemp)
jq ".invoices[\"$INV_NUMBER\"] = $invoice_json" "$INVOICES_FILE" > "$temp_file" && mv "$temp_file" "$INVOICES_FILE"

# --- CONFIRMATION ---
echo "✅ Invoice '$INV_NUMBER' added successfully."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "  Client:   $CLIENT_NAME"
echo "  Amount:   \$${AMOUNT}"
echo "  Date:     $INV_DATE"
echo "  Due:      $DUE_DATE"
echo "  Status:   sent"
echo ""
echo "The chase cycle will pick this up on its next run."


path: scripts/setup.sh
content: #!/bin/bash
# invoice-chaser/scripts/setup.sh — Initialize Invoice Chaser config and data directories

set -euo pipefail

CHASER_DIR="${CHASER_DIR:-$HOME/.config/invoice-chaser}"
SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"

echo "💸 Invoice Chaser Setup"
echo "━━━━━━━━━━━━━━━━━━━━━━"

# Create config directory
mkdir -p "$CHASER_DIR"
mkdir -p "$CHASER_DIR/archives"
echo "✓ Created $CHASER_DIR"

# Copy example config if none exists
if [ ! -f "$CHASER_DIR/config.json" ]; then
  cp "$SKILL_DIR/config.example.json" "$CHASER_DIR/config.json"
  echo "✓ Created config.json (from example — edit with your business details and templates)"
else
  echo "• config.json already exists (skipped)"
fi

# Initialize data files
for file in invoices.json chase-log.json; do
  if [ ! -f "$CHASER_DIR/$file" ]; then
    if [ "$file" = "invoices.json" ]; then
      echo '{"invoices":{}}' > "$CHASER_DIR/$file"
    elif [ "$file" = "chase-log.json" ]; then
      echo '{"log":[]}' > "$CHASER_DIR/$file"
    fi
    echo "✓ Created $file"
  else
    echo "• $file already exists (skipped)"
  fi
done

# Check for gog skill and GOG_DEFAULT_ACCOUNT
if command -v gog &> /dev/null; then
    echo "✓ 'gog' skill found"
else
    echo "⚠ 'gog' skill not found. Please install it to send emails."
fi

if [ -f "$HOME/.clawdbot/secrets.env" ]; then
  if grep -q "GOG_DEFAULT_ACCOUNT" "$HOME/.clawdbot/secrets.env" 2>/dev/null; then
    echo "✓ GOG_DEFAULT_ACCOUNT found in secrets.env"
  else
    echo "⚠ GOG_DEFAULT_ACCOUNT not found in secrets.env"
    echo "  Add: GOG_DEFAULT_ACCOUNT=[REDACTED_SECRET] to ~/.clawdbot/secrets.env"
  fi
else
  echo "⚠ ~/.clawdbot/secrets.env not found"
  echo "  Create it and add: GOG_DEFAULT_ACCOUNT=[REDACTED_SECRET]"
fi

echo ""
echo "Next steps:"
echo "  1. Edit $CHASER_DIR/config.json with your business details"
echo "  2. Ensure GOG_DEFAULT_ACCOUNT is set correctly for sending emails"
echo "  3. Add your first invoice: $(dirname "$0")/add-invoice.sh --help"
echo ""
echo "💰 Ready to get paid."


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (MEDIUM)