Scope supports two complementary agent skill modes. Cloud manages projects, triggers sourcing, pushes candidates to ATS systems with two-way sync (Greenhouse, Lever, Ashby), and integrates with the Recruiter Marketplace. Local drives a real browser on the user's machine for free LinkedIn scraping. Choose the right tool for the job — or use both.
Best for: Managing projects, reading AI scores, and triggering background sourcing from cloud agents (Claude Code, Cursor, Windsurf, etc.). No local app required — all operations run on Scope's infrastructure using your credit balance.
---
name: scope-sourcing-cli
description: >
Agentic command-line interface for the Scope Candidate Sourcing Platform.
Allows AI agents to authenticate, browse organizations and projects,
list scored candidates, trigger AI-powered sourcing batches, and push
candidates directly to connected ATS systems.
---
# Scope CLI Skill
This CLI allows AI agents to interact with the **Scope Sourcing Platform**
to find, score, and manage candidates programmatically.
## Prerequisites
1. A valid Scope account (email + password).
2. Python 3.10+ with `scope` installed (`pip install -e .` from `scope-cli/`).
## Core Rules for Agents
1. **ALWAYS** pass the `--json` flag when executing commands to ensure you
receive parseable data.
2. You **must** run `scope auth login` before running any other commands.
3. You **must** set an active organization using `scope org use <id>` before
running project or candidate commands.
4. If any command returns `{"error": "UNAUTHORIZED"}`, re-run
`scope auth login --email <email> --password <password> --json` to refresh
your session.
## Authentication Flow
```bash
# Step 1: Log in (agents should always provide --password)
scope auth login --email agent@company.com --password s3cret --json
# Step 2: List your organizations
scope org list --json
# Step 3: Set the active organization
scope org use <organization_id> --json
```
After these three steps, all subsequent commands will use the stored token
and organization context automatically.
## Commands Reference
### `scope auth login`
Authenticate and store a JWT locally.
```bash
scope auth login --email <email> --password <password> --json
```
### `scope org list`
List all organizations the user belongs to.
```bash
scope org list --json
```
### `scope org use <org_id>`
Set the active organization for all subsequent commands.
```bash
scope org use 550e8400-e29b-41d4-a716-446655440000 --json
```
### `scope org balance`
Check credit balance for the active organization.
```bash
scope org balance --json
```
### `scope project list`
List sourcing projects in the active organization.
```bash
scope project list --json
```
### `scope project source <project_id>`
Trigger an AI sourcing batch for a specific project.
```bash
scope project source 550e8400-e29b-41d4-a716-446655440000 --json
```
### `scope candidate list`
List candidates in a sourcing project. Optionally filter by minimum score.
```bash
scope candidate list --project <project_id> --json
scope candidate list --project <project_id> --min-score 8.0 --json
```
## ATS Integrations
Scope supports direct candidate pushing to the following ATS platforms.
These are managed via Settings → Integrations in the Scope dashboard.
Agents should inform users to connect their ATS before attempting a push.
Supported ATS systems:
- Greenhouse (Harvest API key) — **two-way sync available**
- Lever (API key, Basic Auth) — **two-way sync available**
- Ashby (API key, Bearer Token) — **two-way sync available**
- Workday (OAuth 2.0 Refresh Token) — push only
- iCIMS (Customer ID + Client credentials) — push only
- SmartRecruiters (X-SmartToken API key) — push only
All credentials are encrypted at rest using AES-256-GCM.
### Two-Way ATS Sync
When the hiring org enables two-way sync (Settings → Integrations →
Enable two-way sync), Scope receives webhooks from Greenhouse, Lever, or
Ashby whenever a candidate's stage changes in the ATS. The candidate's
`ats_stage` field on `sourcing_candidates` is updated live, and a cyan
badge appears on the candidate card showing the live stage.
**Stage updates are also visible to marketplace recruiters** on their own
submissions — this closes the visibility loop after a candidate is
pushed to the hiring org's pipeline.
Webhook receivers are at:
- `https://api.usescope.co/functions/v1/greenhouse-webhooks`
- `https://api.usescope.co/functions/v1/lever-webhooks`
- `https://api.usescope.co/functions/v1/ashby-webhooks`
Each org generates a per-integration HMAC secret on enable. Inbound events
are signature-verified, idempotent (deduped via the (provider, event_id)
unique key on `ats_inbound_events`), and audit-logged.
## Recruiter Marketplace
Scope hosts a recruiter marketplace where independent
recruiters can claim open projects from hiring orgs and earn placement
fees on successful hires.
**Pricing:** 12% of first-year salary on hire, 75% to recruiter, 25% to Scope.
Payout in 2 installments at 30 and 120 days post-start.
**Replacement guarantee:** 120 days; 75% refund if replacement fails.
**Agent access (read-only via API/RPCs):**
- Hiring-org agents can use `set_ats_webhook_config` and
`clear_ats_webhook_config` RPCs to manage two-way sync per integration.
- Marketplace data (placements, payouts, recruiter assignments) is
available via the standard Supabase client when the agent acts as a
platform admin or as the relevant recruiter/org user.
The CLI does not currently include marketplace-specific commands; for
marketplace orchestration, agents should use the dashboard or call RPCs
directly via the Supabase JS client.
Full marketplace docs:
- Recruiter agreement: https://app.usescope.co/legal/recruiter-agreement
- Hiring org marketplace terms: https://app.usescope.co/legal/marketplace-terms
## Slack Notifications
If a Slack Incoming Webhook is connected via Settings → Integrations →
Productivity Tools, Scope will automatically send a Slack alert whenever
a candidate is successfully pushed to any ATS system.
## Budget & Fallback Strategy
**Before triggering `scope project source`, always check the balance first.**
```bash
scope org balance --json
```
If `total_balance` is **0**, do NOT call `scope project source`. Instead:
1. Inform the user that credits are depleted.
2. Suggest topping up at https://app.usescope.co/settings?tab=billing
3. **Fallback:** Use the OpenProfile (Local) skill for free sourcing.
## Error Contract
All errors return: `{"error": "ERROR_CODE", "message": "Human-readable explanation"}`
Common codes: NOT_AUTHENTICATED, UNAUTHORIZED, FORBIDDEN, ORG_NOT_SET,
API_ERROR, INSUFFICIENT_CREDITS, CONNECTION_ERROR
## Installation
```bash
cd scope-cli && pip install -e .
```
Best for: Real-time browser scraping and manual data extraction. Requires the OpenProfile Exporter desktop app to be running on your local machine. Completely free — no credits consumed. Cloud agents cannot use this mode (they have no access to localhost).
---
name: cli-anything-openprofile
description: >
AI Agent Remote Control for the OpenProfile Exporter desktop app.
Provides Local Browser Eyes for LinkedIn -- scrape profiles and search
results through a managed Puppeteer instance running on the user's machine.
---
# OpenProfile Agent Harness
## What This Tool Does
This CLI gives you **Local Browser Eyes** for LinkedIn. It sends commands to
the **OpenProfile Exporter** Electron app running on the user's computer at
`http://localhost:9223`. The desktop app manages a real Chromium browser with
the user's LinkedIn session, safe-mode delays, and human-like timing.
## Prerequisites
- The **OpenProfile Exporter** desktop app must be running.
- The user must be **logged into LinkedIn** inside the app's managed browser.
- Run `openprofile health --json` first to confirm connectivity.
## Commands
### `openprofile health`
Check if the desktop app is alive and configured.
```bash
openprofile health --json
```
### `openprofile status`
Get the current automation state: is a batch running, how many profiles
have been processed, how many remain.
```bash
openprofile status --json
```
### `openprofile enrich`
Scrape one or more LinkedIn profile URLs.
**Required flags:** `--project <UUID>` and `--org <UUID>`.
```bash
openprofile enrich \
"https://linkedin.com/in/alice" \
"https://linkedin.com/in/bob" \
--project 550e8400-... \
--org fa1903d3-... \
--json
```
### `openprofile search`
Start a batch scrape from a LinkedIn **search results URL**.
**Required flags:** `--count <N>`, `--project <UUID>`, `--org <UUID>`.
```bash
openprofile search \
"https://linkedin.com/search/results/people/?keywords=senior+engineer" \
--count 25 \
--project 550e8400-... \
--org fa1903d3-... \
--json
```
### `openprofile stop`
Emergency stop -- immediately halts all running automation.
```bash
openprofile stop --json
```
## Critical Rules for Agents
1. **Always use `--json`** for machine-readable output.
2. **10-Second Cooldown.** Mandatory gap between enrich/search calls.
If called too soon: `{"error": "RATE_LIMIT", "remaining_seconds": 7.3}`
3. **LinkedIn Rate Limits.** Keep enrich batches ≤25 URLs, search ≤50 count.
4. **Safe Mode** is enforced by the desktop app and cannot be overridden.
5. **Desktop App Must Be Running.** If closed, commands return:
`{"error": "DESKTOP_APP_NOT_RUNNING"}`
## JSON Output Contract
All successful responses include `"success": true`.
All error responses include `"error"` and `"message"` fields.
## Installation
```bash
cd OpenProfile/openprofile-app/agent-harness && pip install -e .
```