Agent Skills Hub

Scope supports two complementary agent skill modes. Cloud manages projects and triggers sourcing via the Scope API. 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, and trigger AI-powered sourcing batches.
---

# 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
```

## 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 .
```

Cloud vs Local — At a Glance

Feature Scope Cloud (Remote) OpenProfile (Local)
How it works Managed cloud service via API User's local LinkedIn browser
Cost Credits (paid) Free
Speed Fast (parallel cloud workers) Slower (single local browser)
Requirement Scope account + credits OpenProfile desktop app running
Agent compatibility Any agent (cloud or local) Local agents only (needs localhost)
Best for Background batch sourcing at scale Targeted scraping, free enrichment