@agent-pattern-labs/leads-rig 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- # generated by @razroo/iso-route — do not hand-edit
1
+ # generated by @agent-pattern-labs/iso-route — do not hand-edit
2
2
  model = "gpt-5.4"
3
3
  model_provider = "openai"
4
4
 
@@ -9,7 +9,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
9
9
 
10
10
  ## Hard Limits
11
11
 
12
- - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt.
12
+ - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
13
13
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
14
14
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
15
15
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -23,7 +23,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
23
23
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
24
24
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
25
25
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
26
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`.
26
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
27
27
 
28
28
  ## Procedure
29
29
 
@@ -41,10 +41,10 @@ Available commands:
41
41
 
42
42
  Local commands:
43
43
  npx public-leads crawl --input data/domains.tsv --out data/lead-results.json
44
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
44
+ npx public-leads pipeline --input data/domains.tsv --ingest
45
45
  npx public-leads validate --input data/lead-results.json
46
46
  npx public-leads manifest --input data/lead-results.json
47
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
47
+ npx public-leads ingest --input data/lead-results.json
48
48
  npx public-leads verify
49
49
  ```
50
50
 
@@ -41,10 +41,10 @@ Available commands:
41
41
 
42
42
  Local commands:
43
43
  npx public-leads crawl --input data/domains.tsv --out data/lead-results.json
44
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
44
+ npx public-leads pipeline --input data/domains.tsv --ingest
45
45
  npx public-leads validate --input data/lead-results.json
46
46
  npx public-leads manifest --input data/lead-results.json
47
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
47
+ npx public-leads ingest --input data/lead-results.json
48
48
  npx public-leads verify
49
49
  ```
50
50
 
@@ -0,0 +1,15 @@
1
+ # iso-route — Pi notes
2
+
3
+ Pi reads `.pi/settings.json` for the default provider/model and model cycling. It does not have native role-specific subagent binding, so role entries below are advisory for manual model switching or extension/package workflows.
4
+
5
+ ## Default
6
+
7
+ - **anthropic / claude-sonnet-4-6**
8
+
9
+ ## Roles
10
+
11
+ | Role | Provider | Model | Thinking | Fallback |
12
+ | ---- | -------- | ----- | -------- | -------- |
13
+ | `fast` | anthropic | `claude-haiku-4-5` | - | - |
14
+ | `quality` | anthropic | `claude-opus-4-7` | high | - |
15
+ | `minimal` | anthropic | `claude-haiku-4-5` | - | - |
@@ -39,10 +39,10 @@ Available commands:
39
39
 
40
40
  Local commands:
41
41
  npx public-leads crawl --input data/domains.tsv --out data/lead-results.json
42
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
42
+ npx public-leads pipeline --input data/domains.tsv --ingest
43
43
  npx public-leads validate --input data/lead-results.json
44
44
  npx public-leads manifest --input data/lead-results.json
45
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
45
+ npx public-leads ingest --input data/lead-results.json
46
46
  npx public-leads verify
47
47
  ```
48
48
 
@@ -39,10 +39,10 @@ Available commands:
39
39
 
40
40
  Local commands:
41
41
  npx public-leads crawl --input data/domains.tsv --out data/lead-results.json
42
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
42
+ npx public-leads pipeline --input data/domains.tsv --ingest
43
43
  npx public-leads validate --input data/lead-results.json
44
44
  npx public-leads manifest --input data/lead-results.json
45
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
45
+ npx public-leads ingest --input data/lead-results.json
46
46
  npx public-leads verify
47
47
  ```
48
48
 
@@ -0,0 +1,9 @@
1
+ {
2
+ "defaultProvider": "anthropic",
3
+ "defaultModel": "claude-sonnet-4-6",
4
+ "enabledModels": [
5
+ "claude-sonnet-4-6",
6
+ "claude-haiku-4-5",
7
+ "claude-opus-4-7"
8
+ ]
9
+ }
package/AGENTS.md CHANGED
@@ -4,7 +4,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
4
4
 
5
5
  ## Hard Limits
6
6
 
7
- - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt.
7
+ - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
8
8
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
9
9
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
10
10
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -18,7 +18,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
18
18
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
19
19
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
20
20
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
21
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`.
21
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
22
22
 
23
23
  ## Procedure
24
24
 
package/CLAUDE.md CHANGED
@@ -4,7 +4,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
4
4
 
5
5
  ## Hard Limits
6
6
 
7
- - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt.
7
+ - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
8
8
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
9
9
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
10
10
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -18,7 +18,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
18
18
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
19
19
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
20
20
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
21
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`.
21
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
22
22
 
23
23
  ## Procedure
24
24
 
package/README.md CHANGED
@@ -6,11 +6,13 @@ Agentic public-web lead discovery harness for portable, source-backed lead artif
6
6
 
7
7
  - Crawls public company websites through agent workflows.
8
8
  - Produces source-backed lead artifacts matching the local lead-ingest contract.
9
- - Validates lead JSON/JSONL before database handoff.
9
+ - Validates lead JSON/JSONL before database handoff and rejects generic catch-all inboxes such as `info@` and `hello@`.
10
10
  - Builds a local manifest for batch auditability.
11
11
  - Submits validated payloads to a configured ingest API.
12
12
  - Ships OpenCode, Claude Code, Cursor, Codex, and Pi harness config from one `iso/` source.
13
13
 
14
+ The harness is optimized to find named people who can actually be contacted. When only a general company contact path exists, it should emit a `contact_path` record rather than a generic organizational inbox.
15
+
14
16
  ## Core Commands
15
17
 
16
18
  ```bash
@@ -20,9 +22,9 @@ npm run smoke:iso
20
22
 
21
23
  npx -p @agent-pattern-labs/leads-rig create-public-leads-harness my-lead-project
22
24
  npx public-leads crawl --domains example.com --out data/lead-results.json
23
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
25
+ PUBLIC_LEADS_API=https://cold-agent-leads.example.com npx public-leads pipeline --input data/domains.tsv --ingest
24
26
  npx public-leads validate --input examples/sample-leads.json
25
- npx public-leads ingest --input examples/sample-leads.json --dry-run --out output/sample-ingest.json
27
+ PUBLIC_LEADS_API=https://cold-agent-leads.example.com npx public-leads ingest --input examples/sample-leads.json --dry-run --out output/sample-ingest.json
26
28
  batch/batch-runner.sh --help
27
29
  ```
28
30
 
@@ -32,12 +34,27 @@ The default reference client posts to the Cold Agent Leads ingest API:
32
34
 
33
35
  ```http
34
36
  POST /api/lead-ingests
35
- Authorization: Bearer $ADMIN_API_TOKEN
37
+ Authorization: Bearer $PUBLIC_LEADS_API_TOKEN
36
38
  X-Admin-Email: admin@example.com
37
39
  Content-Type: application/json
38
40
  ```
39
41
 
40
- All endpoint details are configurable through `config/profile.yml`, CLI flags, environment variables, or `--target-project /path/to/cold-agent-leads` for reading that app's `.env` at runtime. Payloads contain `jobId`, `domains`, `leads`, `results`, and `errors`, with the schema defined in `templates/lead-schema.json`.
42
+ For upstream ingest, set `PUBLIC_LEADS_API`, `PUBLIC_LEADS_API_TOKEN`, and `PUBLIC_LEADS_OPERATOR_EMAIL`; no local Postgres or local Cold Agent Leads server is required. Endpoint details are configurable through environment variables, `config/profile.yml`, or CLI flags. `--target-project /path/to/cold-agent-leads` remains available only as compatibility for reading a local app `.env`. Payloads contain `jobId`, `domains`, `leads`, `results`, and `errors`, with the schema defined in `templates/lead-schema.json`.
43
+
44
+ Run from a Cold Agent Leads checkout without installing local package dependencies:
45
+
46
+ ```bash
47
+ cd /Users/charlie/Razroo/cold-agent-leads
48
+ export PUBLIC_LEADS_API=https://cold-agent-leads.example.com
49
+ export PUBLIC_LEADS_API_TOKEN=...
50
+ export PUBLIC_LEADS_OPERATOR_EMAIL=admin@example.com
51
+ npx -p @agent-pattern-labs/leads-rig public-leads pipeline \
52
+ --domains example.com \
53
+ --ingest \
54
+ --out data/lead-results.json \
55
+ --manifest data/lead-manifest.json \
56
+ --ingest-out data/ingest-response.json
57
+ ```
41
58
 
42
59
  Legacy aliases `lead-harness` and `create-leads-harness` remain available for compatibility.
43
60
 
@@ -53,7 +70,7 @@ gh run watch
53
70
  You can also publish by creating a GitHub release for the package version:
54
71
 
55
72
  ```bash
56
- gh release create v0.1.3 --title v0.1.3 --generate-notes
73
+ gh release create v0.1.4 --title v0.1.4 --generate-notes
57
74
  ```
58
75
 
59
76
  The package version must not already exist on npm.
@@ -51,7 +51,7 @@ write('package.json', JSON.stringify({
51
51
  'update-harness': 'npm install @agent-pattern-labs/leads-rig@latest && public-leads sync',
52
52
  },
53
53
  dependencies: {
54
- '@agent-pattern-labs/leads-rig': '^0.1.3',
54
+ '@agent-pattern-labs/leads-rig': '^0.1.4',
55
55
  },
56
56
  engines: {
57
57
  node: '>=20.6.0',
@@ -143,7 +143,7 @@ npm run verify
143
143
  opencode
144
144
  \`\`\`
145
145
 
146
- Update \`config/profile.yml\` with your ingest API settings and add domains to \`data/domains.tsv\` or \`data/pipeline.md\`.
146
+ Set \`PUBLIC_LEADS_API\`, \`PUBLIC_LEADS_API_TOKEN\`, and \`PUBLIC_LEADS_OPERATOR_EMAIL\` for upstream ingest. Add domains to \`data/domains.tsv\` or \`data/pipeline.md\`.
147
147
  `);
148
148
 
149
149
  console.log('\nNext: npm install, then edit config/profile.yml and data/domains.tsv.\n');
@@ -23,80 +23,80 @@ const commands = {
23
23
  };
24
24
 
25
25
  const helperAliases = {
26
- 'trace:list': ['@razroo/iso-trace', 'list'],
27
- 'trace:stats': ['@razroo/iso-trace', 'stats'],
28
- 'trace:show': ['@razroo/iso-trace', 'show'],
29
- 'guard:audit': ['@razroo/iso-guard', 'audit'],
30
- 'guard:explain': ['@razroo/iso-guard', 'explain'],
31
- 'ledger:status': ['@razroo/iso-ledger', 'status'],
32
- 'ledger:rebuild': ['@razroo/iso-ledger', 'rebuild'],
33
- 'ledger:verify': ['@razroo/iso-ledger', 'verify'],
34
- 'capabilities:list': ['@razroo/iso-capabilities', 'list'],
35
- 'capabilities:explain': ['@razroo/iso-capabilities', 'explain'],
36
- 'capabilities:check': ['@razroo/iso-capabilities', 'check'],
37
- 'context:list': ['@razroo/iso-context', 'list'],
38
- 'context:explain': ['@razroo/iso-context', 'explain'],
39
- 'context:plan': ['@razroo/iso-context', 'plan'],
40
- 'context:check': ['@razroo/iso-context', 'check'],
41
- 'context:render': ['@razroo/iso-context', 'render'],
42
- 'cache:key': ['@razroo/iso-cache', 'key'],
43
- 'cache:has': ['@razroo/iso-cache', 'has'],
44
- 'cache:get': ['@razroo/iso-cache', 'get'],
45
- 'cache:put': ['@razroo/iso-cache', 'put'],
46
- 'cache:status': ['@razroo/iso-cache', 'status'],
47
- 'cache:list': ['@razroo/iso-cache', 'list'],
48
- 'cache:verify': ['@razroo/iso-cache', 'verify'],
49
- 'cache:prune': ['@razroo/iso-cache', 'prune'],
50
- 'index:build': ['@razroo/iso-index', 'build'],
51
- 'index:status': ['@razroo/iso-index', 'status'],
52
- 'index:query': ['@razroo/iso-index', 'query'],
53
- 'index:has': ['@razroo/iso-index', 'has'],
54
- 'index:verify': ['@razroo/iso-index', 'verify'],
55
- 'facts:build': ['@razroo/iso-facts', 'build'],
56
- 'facts:status': ['@razroo/iso-facts', 'status'],
57
- 'facts:query': ['@razroo/iso-facts', 'query'],
58
- 'facts:has': ['@razroo/iso-facts', 'has'],
59
- 'facts:verify': ['@razroo/iso-facts', 'verify'],
60
- 'score:compute': ['@razroo/iso-score', 'compute'],
61
- 'score:verify': ['@razroo/iso-score', 'verify'],
62
- 'score:check': ['@razroo/iso-score', 'check'],
63
- 'score:gate': ['@razroo/iso-score', 'gate'],
64
- 'score:compare': ['@razroo/iso-score', 'compare'],
65
- 'score:explain': ['@razroo/iso-score', 'explain'],
66
- 'canon:normalize': ['@razroo/iso-canon', 'normalize'],
67
- 'canon:key': ['@razroo/iso-canon', 'key'],
68
- 'canon:compare': ['@razroo/iso-canon', 'compare'],
69
- 'canon:explain': ['@razroo/iso-canon', 'explain'],
70
- 'preflight:plan': ['@razroo/iso-preflight', 'plan'],
71
- 'preflight:check': ['@razroo/iso-preflight', 'check'],
72
- 'preflight:explain': ['@razroo/iso-preflight', 'explain'],
73
- 'postflight:status': ['@razroo/iso-postflight', 'status'],
74
- 'postflight:check': ['@razroo/iso-postflight', 'check'],
75
- 'postflight:explain': ['@razroo/iso-postflight', 'explain'],
76
- 'timeline:status': ['@razroo/iso-timeline', 'status'],
77
- 'timeline:build': ['@razroo/iso-timeline', 'build'],
78
- 'timeline:plan': ['@razroo/iso-timeline', 'plan'],
79
- 'timeline:due': ['@razroo/iso-timeline', 'due'],
80
- 'timeline:check': ['@razroo/iso-timeline', 'check'],
81
- 'timeline:verify': ['@razroo/iso-timeline', 'verify'],
82
- 'prioritize:status': ['@razroo/iso-prioritize', 'status'],
83
- 'prioritize:items': ['@razroo/iso-prioritize', 'items'],
84
- 'prioritize:build': ['@razroo/iso-prioritize', 'build'],
85
- 'prioritize:rank': ['@razroo/iso-prioritize', 'rank'],
86
- 'prioritize:select': ['@razroo/iso-prioritize', 'select'],
87
- 'prioritize:check': ['@razroo/iso-prioritize', 'check'],
88
- 'prioritize:verify': ['@razroo/iso-prioritize', 'verify'],
89
- 'lineage:status': ['@razroo/iso-lineage', 'status'],
90
- 'lineage:record': ['@razroo/iso-lineage', 'record'],
91
- 'lineage:check': ['@razroo/iso-lineage', 'check'],
92
- 'lineage:stale': ['@razroo/iso-lineage', 'stale'],
93
- 'lineage:verify': ['@razroo/iso-lineage', 'verify'],
94
- 'redact:scan': ['@razroo/iso-redact', 'scan'],
95
- 'redact:verify': ['@razroo/iso-redact', 'verify'],
96
- 'redact:apply': ['@razroo/iso-redact', 'apply'],
97
- 'migrate:plan': ['@razroo/iso-migrate', 'plan'],
98
- 'migrate:apply': ['@razroo/iso-migrate', 'apply'],
99
- 'migrate:check': ['@razroo/iso-migrate', 'check'],
26
+ 'trace:list': ['@agent-pattern-labs/iso-trace', 'list'],
27
+ 'trace:stats': ['@agent-pattern-labs/iso-trace', 'stats'],
28
+ 'trace:show': ['@agent-pattern-labs/iso-trace', 'show'],
29
+ 'guard:audit': ['@agent-pattern-labs/iso-guard', 'audit'],
30
+ 'guard:explain': ['@agent-pattern-labs/iso-guard', 'explain'],
31
+ 'ledger:status': ['@agent-pattern-labs/iso-ledger', 'status'],
32
+ 'ledger:rebuild': ['@agent-pattern-labs/iso-ledger', 'rebuild'],
33
+ 'ledger:verify': ['@agent-pattern-labs/iso-ledger', 'verify'],
34
+ 'capabilities:list': ['@agent-pattern-labs/iso-capabilities', 'list'],
35
+ 'capabilities:explain': ['@agent-pattern-labs/iso-capabilities', 'explain'],
36
+ 'capabilities:check': ['@agent-pattern-labs/iso-capabilities', 'check'],
37
+ 'context:list': ['@agent-pattern-labs/iso-context', 'list'],
38
+ 'context:explain': ['@agent-pattern-labs/iso-context', 'explain'],
39
+ 'context:plan': ['@agent-pattern-labs/iso-context', 'plan'],
40
+ 'context:check': ['@agent-pattern-labs/iso-context', 'check'],
41
+ 'context:render': ['@agent-pattern-labs/iso-context', 'render'],
42
+ 'cache:key': ['@agent-pattern-labs/iso-cache', 'key'],
43
+ 'cache:has': ['@agent-pattern-labs/iso-cache', 'has'],
44
+ 'cache:get': ['@agent-pattern-labs/iso-cache', 'get'],
45
+ 'cache:put': ['@agent-pattern-labs/iso-cache', 'put'],
46
+ 'cache:status': ['@agent-pattern-labs/iso-cache', 'status'],
47
+ 'cache:list': ['@agent-pattern-labs/iso-cache', 'list'],
48
+ 'cache:verify': ['@agent-pattern-labs/iso-cache', 'verify'],
49
+ 'cache:prune': ['@agent-pattern-labs/iso-cache', 'prune'],
50
+ 'index:build': ['@agent-pattern-labs/iso-index', 'build'],
51
+ 'index:status': ['@agent-pattern-labs/iso-index', 'status'],
52
+ 'index:query': ['@agent-pattern-labs/iso-index', 'query'],
53
+ 'index:has': ['@agent-pattern-labs/iso-index', 'has'],
54
+ 'index:verify': ['@agent-pattern-labs/iso-index', 'verify'],
55
+ 'facts:build': ['@agent-pattern-labs/iso-facts', 'build'],
56
+ 'facts:status': ['@agent-pattern-labs/iso-facts', 'status'],
57
+ 'facts:query': ['@agent-pattern-labs/iso-facts', 'query'],
58
+ 'facts:has': ['@agent-pattern-labs/iso-facts', 'has'],
59
+ 'facts:verify': ['@agent-pattern-labs/iso-facts', 'verify'],
60
+ 'score:compute': ['@agent-pattern-labs/iso-score', 'compute'],
61
+ 'score:verify': ['@agent-pattern-labs/iso-score', 'verify'],
62
+ 'score:check': ['@agent-pattern-labs/iso-score', 'check'],
63
+ 'score:gate': ['@agent-pattern-labs/iso-score', 'gate'],
64
+ 'score:compare': ['@agent-pattern-labs/iso-score', 'compare'],
65
+ 'score:explain': ['@agent-pattern-labs/iso-score', 'explain'],
66
+ 'canon:normalize': ['@agent-pattern-labs/iso-canon', 'normalize'],
67
+ 'canon:key': ['@agent-pattern-labs/iso-canon', 'key'],
68
+ 'canon:compare': ['@agent-pattern-labs/iso-canon', 'compare'],
69
+ 'canon:explain': ['@agent-pattern-labs/iso-canon', 'explain'],
70
+ 'preflight:plan': ['@agent-pattern-labs/iso-preflight', 'plan'],
71
+ 'preflight:check': ['@agent-pattern-labs/iso-preflight', 'check'],
72
+ 'preflight:explain': ['@agent-pattern-labs/iso-preflight', 'explain'],
73
+ 'postflight:status': ['@agent-pattern-labs/iso-postflight', 'status'],
74
+ 'postflight:check': ['@agent-pattern-labs/iso-postflight', 'check'],
75
+ 'postflight:explain': ['@agent-pattern-labs/iso-postflight', 'explain'],
76
+ 'timeline:status': ['@agent-pattern-labs/iso-timeline', 'status'],
77
+ 'timeline:build': ['@agent-pattern-labs/iso-timeline', 'build'],
78
+ 'timeline:plan': ['@agent-pattern-labs/iso-timeline', 'plan'],
79
+ 'timeline:due': ['@agent-pattern-labs/iso-timeline', 'due'],
80
+ 'timeline:check': ['@agent-pattern-labs/iso-timeline', 'check'],
81
+ 'timeline:verify': ['@agent-pattern-labs/iso-timeline', 'verify'],
82
+ 'prioritize:status': ['@agent-pattern-labs/iso-prioritize', 'status'],
83
+ 'prioritize:items': ['@agent-pattern-labs/iso-prioritize', 'items'],
84
+ 'prioritize:build': ['@agent-pattern-labs/iso-prioritize', 'build'],
85
+ 'prioritize:rank': ['@agent-pattern-labs/iso-prioritize', 'rank'],
86
+ 'prioritize:select': ['@agent-pattern-labs/iso-prioritize', 'select'],
87
+ 'prioritize:check': ['@agent-pattern-labs/iso-prioritize', 'check'],
88
+ 'prioritize:verify': ['@agent-pattern-labs/iso-prioritize', 'verify'],
89
+ 'lineage:status': ['@agent-pattern-labs/iso-lineage', 'status'],
90
+ 'lineage:record': ['@agent-pattern-labs/iso-lineage', 'record'],
91
+ 'lineage:check': ['@agent-pattern-labs/iso-lineage', 'check'],
92
+ 'lineage:stale': ['@agent-pattern-labs/iso-lineage', 'stale'],
93
+ 'lineage:verify': ['@agent-pattern-labs/iso-lineage', 'verify'],
94
+ 'redact:scan': ['@agent-pattern-labs/iso-redact', 'scan'],
95
+ 'redact:verify': ['@agent-pattern-labs/iso-redact', 'verify'],
96
+ 'redact:apply': ['@agent-pattern-labs/iso-redact', 'apply'],
97
+ 'migrate:plan': ['@agent-pattern-labs/iso-migrate', 'plan'],
98
+ 'migrate:apply': ['@agent-pattern-labs/iso-migrate', 'apply'],
99
+ 'migrate:check': ['@agent-pattern-labs/iso-migrate', 'check'],
100
100
  };
101
101
 
102
102
  const [, , cmd, ...rest] = process.argv;
@@ -161,7 +161,7 @@ function runIsoCli(pkgName, args) {
161
161
 
162
162
  function defaultIsoArgs(pkgName, subcommand, args) {
163
163
  const defaults = [];
164
- if (pkgName === '@razroo/iso-trace') {
164
+ if (pkgName === '@agent-pattern-labs/iso-trace') {
165
165
  if (!hasFlag(args, '--cwd')) defaults.push('--cwd', PROJECT_DIR);
166
166
  if ((subcommand === 'list' || subcommand === 'stats') && !hasFlag(args, '--since')) {
167
167
  defaults.push('--since', '7d');
@@ -2,16 +2,19 @@
2
2
  # Prefer environment variables for secrets in shared terminals.
3
3
 
4
4
  api:
5
- # Cold Agent Leads local API default. Set target_project to a local
6
- # cold-agent-leads checkout to read ADMIN_API_TOKEN/ADMIN_EMAILS from .env.
7
- base_url: "http://localhost:8080"
5
+ # Set the deployed Cold Agent Leads API base URL through PUBLIC_LEADS_API,
6
+ # or put it here for a non-shared local profile. Example:
7
+ # base_url: "https://cold-agent-leads.example.com"
8
+ base_url: ""
8
9
  ingest_path: "/api/lead-ingests"
10
+ # Optional compatibility only: set when reading ADMIN_API_TOKEN/ADMIN_EMAILS
11
+ # from a local cold-agent-leads checkout. Not needed for upstream ingest.
9
12
  target_project: ""
10
- operator_email: "admin@example.com"
13
+ operator_email: ""
11
14
  operator_email_header: "X-Admin-Email"
12
15
  auth_header: "Authorization"
13
16
  auth_scheme: "Bearer"
14
- auth_token_env: "ADMIN_API_TOKEN"
17
+ auth_token_env: "PUBLIC_LEADS_API_TOKEN"
15
18
 
16
19
  crawl:
17
20
  max_pages: 10
@@ -68,10 +68,10 @@ domain input
68
68
  | `scripts/validate-leads.mjs` | Normalizes and validates JSON/JSONL lead artifacts |
69
69
  | `scripts/manifest.mjs` | Records validated batches in `data/lead-manifest.json` |
70
70
  | `scripts/ingest.mjs` | Posts to the configured ingest endpoint |
71
- | `scripts/batch-orchestrator.mjs` | Durable batch runner using `@razroo/iso-orchestrator` |
71
+ | `scripts/batch-orchestrator.mjs` | Durable batch runner using `@agent-pattern-labs/iso-orchestrator` |
72
72
  | `verify-pipeline.mjs` | Repo/consumer health gate |
73
73
 
74
- The package also carries the `@razroo/iso-*` helper ecosystem for trace, guard, ledger, cache, canon, context, preflight, postflight, prioritize, lineage, redact, migrate, score, and timeline commands.
74
+ The package also carries the `@agent-pattern-labs/iso-*` helper ecosystem for trace, guard, ledger, cache, canon, context, preflight, postflight, prioritize, lineage, redact, migrate, score, and timeline commands.
75
75
 
76
76
  ## Data Contract
77
77
 
@@ -82,4 +82,4 @@ The package also carries the `@razroo/iso-*` helper ecosystem for trace, guard,
82
82
  - page visits
83
83
  - ingest requests
84
84
 
85
- The validator intentionally accepts the same defaults the local runtime normalizes, but it fails missing source evidence, invalid URL fields, invalid `emailType`, invalid `verificationStatus`, invalid confidence, and person/role leads without email.
85
+ The validator intentionally accepts the same defaults the local runtime normalizes, but it fails missing source evidence, invalid URL fields, invalid `emailType`, invalid `verificationStatus`, invalid confidence, person/role leads without email, and generic catch-all inboxes such as `info@`, `hello@`, or similar organizational aliases.
@@ -14,7 +14,7 @@
14
14
  | Deterministic helpers | `scripts/crawl.mjs`, `scripts/pipeline.mjs`, `scripts/validate-leads.mjs`, `scripts/manifest.mjs`, `scripts/ingest.mjs`, `scripts/batch-orchestrator.mjs` |
15
15
  | Consumer scaffold | `create-public-leads-harness <dir>` writes local config, input, output, and ignore files |
16
16
  | Consumer sync | `public-leads sync` symlinks shared harness files from the installed package |
17
- | Batch orchestration | `batch/batch-runner.sh` delegates to `@razroo/iso-orchestrator` with bounded parallelism |
17
+ | Batch orchestration | `batch/batch-runner.sh` delegates to `@agent-pattern-labs/iso-orchestrator` with bounded parallelism |
18
18
  | Verification gates | `npm run verify`, `npm run smoke:iso`, sample validate/manifest/ingest, `npm pack` |
19
19
 
20
20
  ## Maintainer Rules
@@ -37,4 +37,4 @@
37
37
  6. Run `npm audit`.
38
38
  7. Run `npm pack` and confirm generated runtime surfaces are included.
39
39
  8. Scaffold a clean consumer project and test install-time sync from the packed package or source tree.
40
- 9. Publish through GitHub Actions with `gh workflow run publish.yml --ref main`, or create a published release with `gh release create v0.1.3 --title v0.1.3 --generate-notes`.
40
+ 9. Publish through GitHub Actions with `gh workflow run publish.yml --ref main`, or create a published release with `gh release create v0.1.4 --title v0.1.4 --generate-notes`.
package/docs/SETUP.md CHANGED
@@ -32,7 +32,9 @@ Then edit:
32
32
  Use environment variables for secrets:
33
33
 
34
34
  ```bash
35
- export ADMIN_API_TOKEN=...
35
+ export PUBLIC_LEADS_API=https://cold-agent-leads.example.com
36
+ export PUBLIC_LEADS_API_TOKEN=...
37
+ export PUBLIC_LEADS_OPERATOR_EMAIL=admin@example.com
36
38
  ```
37
39
 
38
40
  ## Validate A Payload
@@ -51,27 +53,43 @@ npx public-leads pipeline --input data/domains.tsv --out data/lead-results.json
51
53
  ## Dry-Run Ingest
52
54
 
53
55
  ```bash
54
- npx public-leads ingest --input examples/sample-leads.json --dry-run --out output/sample-ingest.json
56
+ PUBLIC_LEADS_API=https://cold-agent-leads.example.com npx public-leads ingest --input examples/sample-leads.json --dry-run --out output/sample-ingest.json
55
57
  ```
56
58
 
57
59
  ## Live Ingest
58
60
 
59
61
  ```bash
60
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
61
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
62
+ npx public-leads pipeline --input data/domains.tsv --ingest
63
+ npx public-leads ingest --input data/lead-results.json
64
+ ```
65
+
66
+ Run from `/Users/charlie/Razroo/cold-agent-leads` without local Postgres or a local API:
67
+
68
+ ```bash
69
+ cd /Users/charlie/Razroo/cold-agent-leads
70
+ export PUBLIC_LEADS_API=https://cold-agent-leads.example.com
71
+ export PUBLIC_LEADS_API_TOKEN=...
72
+ export PUBLIC_LEADS_OPERATOR_EMAIL=admin@example.com
73
+ npx -p @agent-pattern-labs/leads-rig public-leads pipeline \
74
+ --domains example.com \
75
+ --ingest \
76
+ --out data/lead-results.json \
77
+ --manifest data/lead-manifest.json \
78
+ --ingest-out data/ingest-response.json
62
79
  ```
63
80
 
64
81
  Required request settings come from flags, environment, or `config/profile.yml`:
65
82
 
66
83
  - `api.base_url`
67
84
  - `api.ingest_path`
68
- - `api.target_project`
69
85
  - `api.operator_email`
70
86
  - `api.operator_email_header`
71
87
  - `api.auth_header`
72
88
  - `api.auth_scheme`
73
89
  - `api.auth_token_env`
74
90
 
91
+ Use `api.target_project` only when intentionally reading credentials from a local Cold Agent Leads checkout. Upstream ingest should use `PUBLIC_LEADS_API`, `PUBLIC_LEADS_API_TOKEN`, and `PUBLIC_LEADS_OPERATOR_EMAIL`.
92
+
75
93
  ## Batch
76
94
 
77
95
  Create `batch/batch-input.tsv`:
@@ -44,10 +44,10 @@ Available commands:
44
44
 
45
45
  Local commands:
46
46
  npx public-leads crawl --input data/domains.tsv --out data/lead-results.json
47
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
47
+ npx public-leads pipeline --input data/domains.tsv --ingest
48
48
  npx public-leads validate --input data/lead-results.json
49
49
  npx public-leads manifest --input data/lead-results.json
50
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
50
+ npx public-leads ingest --input data/lead-results.json
51
51
  npx public-leads verify
52
52
  ```
53
53
 
@@ -44,10 +44,10 @@ Available commands:
44
44
 
45
45
  Local commands:
46
46
  npx public-leads crawl --input data/domains.tsv --out data/lead-results.json
47
- npx public-leads pipeline --input data/domains.tsv --ingest --target-project /path/to/cold-agent-leads
47
+ npx public-leads pipeline --input data/domains.tsv --ingest
48
48
  npx public-leads validate --input data/lead-results.json
49
49
  npx public-leads manifest --input data/lead-results.json
50
- npx public-leads ingest --input data/lead-results.json --target-project /path/to/cold-agent-leads
50
+ npx public-leads ingest --input data/lead-results.json
51
51
  npx public-leads verify
52
52
  ```
53
53
 
@@ -4,7 +4,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
4
4
 
5
5
  ## Hard Limits
6
6
 
7
- - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt.
7
+ - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
8
8
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
9
9
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
10
10
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -18,7 +18,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
18
18
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
19
19
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
20
20
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
21
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`.
21
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
22
22
 
23
23
  ## Procedure
24
24