create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Detect buying signals across TAM companies and watchlist personas. Three-phase architecture: (1) free diff-based signals from existing data (headcount growth, tech stack changes, funding rounds), (2) Apify-powered signals (job postings, LinkedIn content analysis, profile
$ npx -y skills add gooseworks-ai/goose-skills --skill signal-scanner --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/signal-scannerContext preview
The summary Claude sees to decide when to auto-load this skill.
Detect buying signals across TAM companies and watchlist personas. Three-phase architecture: (1) free diff-based signals from existing data (headcount growth, tech stack changes, funding rounds), (2) Apify-powered signals (job postings, LinkedIn content analysis, profile
name: signal-scanner description: > Detect buying signals across TAM companies and watchlist personas. Three-phase architecture: (1) free diff-based signals from existing data (headcount growth, tech stack changes, funding rounds), (2) Apify-powered signals (job postings, LinkedIn content analysis, profile changes), and (3) post-processing with dedup, scoring, and lead status updates. Writes signals to Supabase signals table for downstream activation. tags: [lead-generation]
Scheduled scanner that detects buying signals on TAM companies and watchlist personas, writes them to the `signals` table, and sets up downstream activation.
| Priority | Signal | Level | Source | Cost | |----------|--------|-------|--------|------| | P0 | Headcount growth (>10% in 90d) | Company | Data diffs | Free | | P0 | Tech stack changes | Company | Data diffs | Free | | P0 | Funding round | Company | Data diffs | Free | | P0 | Job posting for relevant roles | Company | Apify linkedin-job-search | ~$0.001/job | | P1 | Leadership job change | Person | Apify linkedin-profile-scraper | ~$3/1k | | P1 | LinkedIn content analysis | Person | Apify linkedin-profile-posts + LLM | ~$2/1k + LLM | | P1 | LinkedIn profile updates | Person | Apify linkedin-profile-scraper | ~$3/1k | | P2 | New C-suite hire | Company | Derived from person scans | Free |
See `configs/example.json` for full schema. Key sections:
**CRITICAL: Never write signals or update lead statuses without explicit user approval.**
The signal scanner writes to multiple tables: `signals` (insert), `enrichment_log` (insert), `companies` (patch snapshots), and `people` (patch lead_status). These writes affect downstream outreach decisions — bad signals lead to bad outreach timing.
**Required flow:** 1. **Always run `--dry-run` first** to detect signals without writing to the database 2. Present the dry-run results to the user: signal count, types, top signals, affected companies/people 3. **Get explicit user approval** before running without `--dry-run` 4. Only then run the actual scan that writes to the database
**Why this matters:**
**The agent must NEVER pass `--yes` on a first run.** The `--yes` flag is only for pre-approved scheduled scans where the user has already validated the signal detection logic.
# Dry run first (ALWAYS DO THIS) — detect signals without writing to DB python skills/capabilities/signal-scanner/scripts/signal_scanner.py \ --config skills/capabilities/signal-scanner/configs/my-client.json --dry-run # Full scan (only after user reviews dry-run results and approves) python skills/capabilities/signal-scanner/scripts/signal_scanner.py \ --config skills/capabilities/signal-scanner/configs/my-client.json # Test mode (5 companies max) python skills/capabilities/signal-scanner/scripts/signal_scanner.py \ --config configs/example.json --test --dry-run # Free signals only (skip Apify) # Set all Apify signals to enabled: false in config
| Flag | Effect | |------|--------| | `--config PATH` | Path to config JSON (required) | | `--test` | Limit to 5 companies, 3 people | | `--yes` | Auto-confirm Apify cost prompts. **Only use for pre-approved scheduled scans.** | | `--dry-run` | Detect signals but don't write to DB. **Always run this first.** | | `--max-runs N` | Override Apify run limit (default 50) |
Each signal includes: `client_name`, `company_id`, `person_id`, `signal_level` (company or person), `signal_type`, `signal_source`, `strength`, `signal_data` (JSON), `activation_score`, `detected_at`, `acted_on`, `run_id`.
activation_score = strength * recency_multiplier * account_fit Recency: <24h = 1.5, 1-3d = 1.2, 3-7d = 1.0, 1-2w = 0.8, 2-4w = 0.5 Account: Tier 1 = 1.3, Tier 2 = 1.0, Tier 3 = 0.7
signal-scanner/
├── SKILL.md
├── configs/
│ └── example.json
└── scripts/
└── signal_scanner.pyPut your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.