autotouch-cli 0.2.87__tar.gz → 0.2.88__tar.gz

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.
Files changed (55) hide show
  1. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/PKG-INFO +16 -2
  2. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/README.md +15 -1
  3. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/agents.py +36 -19
  4. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/data/CLI_REFERENCE.md +9 -9
  5. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/data/cli-manifest.json +13 -9
  6. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli.egg-info/PKG-INFO +16 -2
  7. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/pyproject.toml +1 -1
  8. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/MANIFEST.in +0 -0
  9. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/__init__.py +0 -0
  10. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/cli.py +0 -0
  11. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/cli_contracts.py +0 -0
  12. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/__init__.py +0 -0
  13. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/auth.py +0 -0
  14. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/cells.py +0 -0
  15. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/columns.py +0 -0
  16. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/jobs.py +0 -0
  17. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/leads.py +0 -0
  18. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/linkedin.py +0 -0
  19. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/list_build.py +0 -0
  20. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/prompts.py +0 -0
  21. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/rows.py +0 -0
  22. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/search.py +0 -0
  23. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/sequences.py +0 -0
  24. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/tables.py +0 -0
  25. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/tasks.py +0 -0
  26. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/webhooks.py +0 -0
  27. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/commands/workspace_secrets.py +0 -0
  28. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/__init__.py +0 -0
  29. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/auth.py +0 -0
  30. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/config.py +0 -0
  31. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/csv_import.py +0 -0
  32. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/http.py +0 -0
  33. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/io.py +0 -0
  34. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/output.py +0 -0
  35. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/polling.py +0 -0
  36. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/run.py +0 -0
  37. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/core/validation.py +0 -0
  38. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/exceptions.py +0 -0
  39. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/mongo_status.py +0 -0
  40. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/parser.py +0 -0
  41. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/parser_groups.py +0 -0
  42. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/sequence_support.py +0 -0
  43. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli/templates.py +0 -0
  44. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli.egg-info/SOURCES.txt +0 -0
  45. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli.egg-info/dependency_links.txt +0 -0
  46. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli.egg-info/entry_points.txt +0 -0
  47. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli.egg-info/requires.txt +0 -0
  48. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_cli.egg-info/top_level.txt +0 -0
  49. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_shared/__init__.py +0 -0
  50. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_shared/linkedin_contract.py +0 -0
  51. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_shared/linkedin_filters.py +0 -0
  52. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_shared/list_build_contract.py +0 -0
  53. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_shared/provider_registry.py +0 -0
  54. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/autotouch_shared/search_contract.py +0 -0
  55. {autotouch_cli-0.2.87 → autotouch_cli-0.2.88}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.87
3
+ Version: 0.2.88
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Project-URL: Homepage, https://app.autotouch.ai
6
6
  Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
@@ -36,6 +36,8 @@ For a shipped human-readable reference generated from the installed parser, use
36
36
 
37
37
  ## Install
38
38
 
39
+ Released package:
40
+
39
41
  ```bash
40
42
  pipx install autotouch-cli
41
43
  # or
@@ -44,6 +46,16 @@ pip install autotouch-cli
44
46
  pip install -U autotouch-cli
45
47
  ```
46
48
 
49
+ Unreleased branch or pre-publish build:
50
+
51
+ ```bash
52
+ pipx install --force "git+ssh://git@github.com/nicolonic/autotouch_main.git@<branch-or-sha>"
53
+ # or
54
+ python -m pip install -U "git+ssh://git@github.com/nicolonic/autotouch_main.git@<branch-or-sha>"
55
+ ```
56
+
57
+ The `autotouch-cli` package name installs the latest published package from the configured package index. Use the git/source install form when testing a version bump before the release tag has published.
58
+
47
59
  ## First Run
48
60
 
49
61
  Existing developer key:
@@ -158,13 +170,15 @@ For structured company builds, start with industry IDs plus geo/company-size fil
158
170
 
159
171
  For account-first prospecting from LinkedIn/Sales Navigator, build companies/accounts first, inspect the returned company IDs, then pass those IDs to `autotouch list-build leads --current-company-id ...`. Do not use Exa company search as a default pre-step for every LinkedIn list build; use it when the user's target is genuinely semantic, niche, competitor-based, or not meant to be LinkedIn-sourced.
160
172
 
173
+ Use `autotouch agents ...` for recurring signal-based discovery. Scheduled agents support `--target ACCOUNTS` for company/account output and `--target LEADS` for people output. Every agent writes a source/signal table for the evidence it used; lead agents then write `candidate_research.candidates[]` on source rows and list-sync those candidates into the lead/candidate output table. See the agent playbook for the full source-table and candidate-sync contract.
174
+
161
175
  ## More
162
176
 
163
177
  For automation or agent-driven setup, use:
164
178
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
165
179
  - `autotouch cli-reference` for the shipped parser-generated reference
166
180
  - `autotouch capabilities --output json` for provider/workflow contracts
167
- - `autotouch --version` should be `0.2.87` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, and Exa Company Search up to 100 results
181
+ - `autotouch --version` should be `0.2.88` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, Exa Company Search up to 100 results, and scheduled agent `--target ACCOUNTS|LEADS`
168
182
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
169
183
  - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
170
184
  - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
@@ -11,6 +11,8 @@ For a shipped human-readable reference generated from the installed parser, use
11
11
 
12
12
  ## Install
13
13
 
14
+ Released package:
15
+
14
16
  ```bash
15
17
  pipx install autotouch-cli
16
18
  # or
@@ -19,6 +21,16 @@ pip install autotouch-cli
19
21
  pip install -U autotouch-cli
20
22
  ```
21
23
 
24
+ Unreleased branch or pre-publish build:
25
+
26
+ ```bash
27
+ pipx install --force "git+ssh://git@github.com/nicolonic/autotouch_main.git@<branch-or-sha>"
28
+ # or
29
+ python -m pip install -U "git+ssh://git@github.com/nicolonic/autotouch_main.git@<branch-or-sha>"
30
+ ```
31
+
32
+ The `autotouch-cli` package name installs the latest published package from the configured package index. Use the git/source install form when testing a version bump before the release tag has published.
33
+
22
34
  ## First Run
23
35
 
24
36
  Existing developer key:
@@ -133,13 +145,15 @@ For structured company builds, start with industry IDs plus geo/company-size fil
133
145
 
134
146
  For account-first prospecting from LinkedIn/Sales Navigator, build companies/accounts first, inspect the returned company IDs, then pass those IDs to `autotouch list-build leads --current-company-id ...`. Do not use Exa company search as a default pre-step for every LinkedIn list build; use it when the user's target is genuinely semantic, niche, competitor-based, or not meant to be LinkedIn-sourced.
135
147
 
148
+ Use `autotouch agents ...` for recurring signal-based discovery. Scheduled agents support `--target ACCOUNTS` for company/account output and `--target LEADS` for people output. Every agent writes a source/signal table for the evidence it used; lead agents then write `candidate_research.candidates[]` on source rows and list-sync those candidates into the lead/candidate output table. See the agent playbook for the full source-table and candidate-sync contract.
149
+
136
150
  ## More
137
151
 
138
152
  For automation or agent-driven setup, use:
139
153
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
140
154
  - `autotouch cli-reference` for the shipped parser-generated reference
141
155
  - `autotouch capabilities --output json` for provider/workflow contracts
142
- - `autotouch --version` should be `0.2.87` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, and Exa Company Search up to 100 results
156
+ - `autotouch --version` should be `0.2.88` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, Exa Company Search up to 100 results, and scheduled agent `--target ACCOUNTS|LEADS`
143
157
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
144
158
  - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
145
159
  - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
@@ -10,6 +10,9 @@ from dataclasses import dataclass
10
10
  from typing import Any, Callable, Dict, Optional, Sequence
11
11
 
12
12
 
13
+ AGENT_TARGET_CHOICES = ["LEADS", "ACCOUNTS"]
14
+
15
+
13
16
  @dataclass(frozen=True)
14
17
  class AgentCommandRuntime:
15
18
  resolve_token: Callable[[Optional[str], bool], Optional[str]]
@@ -50,7 +53,12 @@ def cmd_agents_create(args: argparse.Namespace, *, runtime: AgentCommandRuntime)
50
53
  token = runtime.resolve_token(args.token, required=True)
51
54
 
52
55
  if getattr(args, "from_file", None):
53
- payload = runtime.load_json_input(args.from_file)
56
+ payload = runtime.load_json_input(
57
+ inline_json=None,
58
+ file_path=args.from_file,
59
+ context="agent",
60
+ default={},
61
+ )
54
62
  else:
55
63
  payload: Dict[str, Any] = {}
56
64
  if args.name:
@@ -106,7 +114,7 @@ def cmd_agents_create(args: argparse.Namespace, *, runtime: AgentCommandRuntime)
106
114
 
107
115
  # AI generation: generate persona, signals, and create in one shot
108
116
  if getattr(args, "generate", False) and "personaConfig" not in payload:
109
- target = payload.get("targetType", "LEADS")
117
+ target = str(payload.get("targetType") or "LEADS").upper()
110
118
  sys.stderr.write(f"Generating persona for {target}...\n")
111
119
  persona_data = runtime.request_api(
112
120
  "POST", "/api/agents/generate-persona",
@@ -119,17 +127,21 @@ def cmd_agents_create(args: argparse.Namespace, *, runtime: AgentCommandRuntime)
119
127
  payload["personaConfig"] = persona
120
128
  sys.stderr.write(f" Persona generated: {json.dumps(persona, ensure_ascii=False)[:200]}...\n")
121
129
 
122
- # Generate topics
123
- sys.stderr.write("Generating topic suggestions...\n")
124
- topic_data = runtime.request_api(
125
- "POST", "/api/agents/generate-signal-topics",
126
- base_url=args.base_url, token=token,
127
- use_x_api_key=args.use_x_api_key,
128
- payload={"targetType": target, "personaConfig": persona},
129
- timeout=args.timeout, verbose=args.verbose,
130
- )
131
- topics = topic_data.get("topics") or []
132
- sys.stderr.write(f" Topics: {topics}\n")
130
+ topics = []
131
+ if target == "LEADS":
132
+ # LinkedIn topic engagement is a people-output signal. Account
133
+ # agents should stick to company-compatible signals such as jobs
134
+ # and news until a company-output topic signal exists.
135
+ sys.stderr.write("Generating topic suggestions...\n")
136
+ topic_data = runtime.request_api(
137
+ "POST", "/api/agents/generate-signal-topics",
138
+ base_url=args.base_url, token=token,
139
+ use_x_api_key=args.use_x_api_key,
140
+ payload={"targetType": target, "personaConfig": persona},
141
+ timeout=args.timeout, verbose=args.verbose,
142
+ )
143
+ topics = topic_data.get("topics") or []
144
+ sys.stderr.write(f" Topics: {topics}\n")
133
145
 
134
146
  # Generate job signal
135
147
  sys.stderr.write("Generating job signal config...\n")
@@ -146,7 +158,7 @@ def cmd_agents_create(args: argparse.Namespace, *, runtime: AgentCommandRuntime)
146
158
 
147
159
  # Assemble signals
148
160
  signals = []
149
- if topics:
161
+ if target == "LEADS" and topics:
150
162
  signals.append({
151
163
  "key": "linkedin-topic-post-engagement",
152
164
  "config": {"topics": [{"id": "", "label": t, "trackingMode": "all"} for t in topics[:5]]},
@@ -184,7 +196,12 @@ def cmd_agents_update(args: argparse.Namespace, *, runtime: AgentCommandRuntime)
184
196
  token = runtime.resolve_token(args.token, required=True)
185
197
 
186
198
  if getattr(args, "from_file", None):
187
- payload = runtime.load_json_input(args.from_file)
199
+ payload = runtime.load_json_input(
200
+ inline_json=None,
201
+ file_path=args.from_file,
202
+ context="agent",
203
+ default={},
204
+ )
188
205
  else:
189
206
  payload: Dict[str, Any] = {}
190
207
  if getattr(args, "name", None):
@@ -447,7 +464,7 @@ def register_agents_subcommands(
447
464
  # -- create --
448
465
  pac = agents_sub.add_parser("create", help="Create a new agent")
449
466
  pac.add_argument("--name", help="Agent name")
450
- pac.add_argument("--target", choices=["LEADS"], help="Target type")
467
+ pac.add_argument("--target", choices=AGENT_TARGET_CHOICES, help="Target type")
451
468
  pac.add_argument("--assigned-user", dest="assigned_user", help="Assigned user ID")
452
469
  pac.add_argument("--schedule-time", dest="schedule_time", help="Time of day (HH:MM) — used by daily/weekly")
453
470
  pac.add_argument("--schedule-tz", dest="schedule_tz", help="Timezone (default: UTC)")
@@ -585,14 +602,14 @@ def register_agents_subcommands(
585
602
 
586
603
  # -- generate-persona --
587
604
  pagp = agents_sub.add_parser("generate-persona", help="Generate ICP persona config via AI")
588
- pagp.add_argument("--target", choices=["LEADS"], default="LEADS", help="Target type")
605
+ pagp.add_argument("--target", choices=AGENT_TARGET_CHOICES, default="LEADS", help="Target type")
589
606
  pagp.add_argument("--current-config", dest="current_config", help="Path to current persona config JSON")
590
607
  add_api_common_arguments(pagp)
591
608
  pagp.set_defaults(func=handlers["generate_persona"])
592
609
 
593
610
  # -- generate-topics --
594
611
  pagt = agents_sub.add_parser("generate-topics", help="Generate signal topic suggestions via AI")
595
- pagt.add_argument("--target", choices=["LEADS"], default="LEADS", help="Target type")
612
+ pagt.add_argument("--target", choices=AGENT_TARGET_CHOICES, default="LEADS", help="Target type")
596
613
  pagt.add_argument("--persona", help="Path to persona config JSON")
597
614
  pagt.add_argument("--current-topics", dest="current_topics", help="Comma-separated current topics")
598
615
  add_api_common_arguments(pagt)
@@ -600,7 +617,7 @@ def register_agents_subcommands(
600
617
 
601
618
  # -- generate-job-signal --
602
619
  pagj = agents_sub.add_parser("generate-job-signal", help="Generate job signal config via AI")
603
- pagj.add_argument("--target", choices=["LEADS"], default="LEADS", help="Target type")
620
+ pagj.add_argument("--target", choices=AGENT_TARGET_CHOICES, default="LEADS", help="Target type")
604
621
  pagj.add_argument("--persona", help="Path to persona config JSON")
605
622
  pagj.add_argument("--current-titles", dest="current_titles", help="Comma-separated current job titles")
606
623
  pagj.add_argument("--current-keywords", dest="current_keywords", help="Comma-separated current keywords")
@@ -1,6 +1,6 @@
1
1
  # Autotouch CLI Reference
2
2
 
3
- Generated from the installed parser for `autotouch-cli` `0.2.87`.
3
+ Generated from the installed parser for `autotouch-cli` `0.2.88`.
4
4
  Manifest schema version: `2`.
5
5
 
6
6
  ## Output Modes
@@ -34,7 +34,7 @@ Create a new agent
34
34
  - Destructive: `no`
35
35
  - Output modes: `json, ndjson, human`
36
36
  - Example:
37
- - `autotouch agents create [-h] [--name NAME] [--target {LEADS}]
37
+ - `autotouch agents create [-h] [--name NAME] [--target {LEADS,ACCOUNTS}]
38
38
  [--assigned-user ASSIGNED_USER]
39
39
  [--schedule-time SCHEDULE_TIME]
40
40
  [--schedule-tz SCHEDULE_TZ]
@@ -56,7 +56,7 @@ Create a new agent
56
56
  [--verbose]`
57
57
  - Options:
58
58
  - `--name` (kind=string): Agent name
59
- - `--target` (kind=string; choices=LEADS): Target type
59
+ - `--target` (kind=string; choices=LEADS,ACCOUNTS): Target type
60
60
  - `--assigned-user` (kind=string): Assigned user ID
61
61
  - `--schedule-time` (kind=string): Time of day (HH:MM) — used by daily/weekly
62
62
  - `--schedule-tz` (kind=string): Timezone (default: UTC)
@@ -118,7 +118,7 @@ Generate job signal config via AI
118
118
  - Destructive: `no`
119
119
  - Output modes: `json, ndjson, human`
120
120
  - Example:
121
- - `autotouch agents generate-job-signal [-h] [--target {LEADS}]
121
+ - `autotouch agents generate-job-signal [-h] [--target {LEADS,ACCOUNTS}]
122
122
  [--persona PERSONA]
123
123
  [--current-titles CURRENT_TITLES]
124
124
  [--current-keywords CURRENT_KEYWORDS]
@@ -130,7 +130,7 @@ Generate job signal config via AI
130
130
  --json-pointer JSON_POINTER]
131
131
  [--verbose]`
132
132
  - Options:
133
- - `--target` (kind=string; choices=LEADS; default=LEADS): Target type
133
+ - `--target` (kind=string; choices=LEADS,ACCOUNTS; default=LEADS): Target type
134
134
  - `--persona` (kind=string): Path to persona config JSON
135
135
  - `--current-titles` (kind=string; comma-separated): Comma-separated current job titles
136
136
  - `--current-keywords` (kind=string; comma-separated): Comma-separated current keywords
@@ -153,7 +153,7 @@ Generate ICP persona config via AI
153
153
  - Destructive: `no`
154
154
  - Output modes: `json, ndjson, human`
155
155
  - Example:
156
- - `autotouch agents generate-persona [-h] [--target {LEADS}]
156
+ - `autotouch agents generate-persona [-h] [--target {LEADS,ACCOUNTS}]
157
157
  [--current-config CURRENT_CONFIG]
158
158
  [--base-url BASE_URL] [--token TOKEN]
159
159
  [--use-x-api-key] [--timeout TIMEOUT]
@@ -162,7 +162,7 @@ Generate ICP persona config via AI
162
162
  --json-pointer JSON_POINTER]
163
163
  [--verbose]`
164
164
  - Options:
165
- - `--target` (kind=string; choices=LEADS; default=LEADS): Target type
165
+ - `--target` (kind=string; choices=LEADS,ACCOUNTS; default=LEADS): Target type
166
166
  - `--current-config` (kind=string): Path to current persona config JSON
167
167
  - `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
168
168
  - `--token` (kind=string; sensitive): Developer API key / JWT token
@@ -183,7 +183,7 @@ Generate signal topic suggestions via AI
183
183
  - Destructive: `no`
184
184
  - Output modes: `json, ndjson, human`
185
185
  - Example:
186
- - `autotouch agents generate-topics [-h] [--target {LEADS}]
186
+ - `autotouch agents generate-topics [-h] [--target {LEADS,ACCOUNTS}]
187
187
  [--persona PERSONA]
188
188
  [--current-topics CURRENT_TOPICS]
189
189
  [--base-url BASE_URL] [--token TOKEN]
@@ -193,7 +193,7 @@ Generate signal topic suggestions via AI
193
193
  --json-pointer JSON_POINTER]
194
194
  [--verbose]`
195
195
  - Options:
196
- - `--target` (kind=string; choices=LEADS; default=LEADS): Target type
196
+ - `--target` (kind=string; choices=LEADS,ACCOUNTS; default=LEADS): Target type
197
197
  - `--persona` (kind=string): Path to persona config JSON
198
198
  - `--current-topics` (kind=string; comma-separated): Comma-separated current topics
199
199
  - `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.87",
2
+ "version": "0.2.88",
3
3
  "manifest_schema_version": 2,
4
4
  "entry_points": {
5
5
  "autotouch": "autotouch_cli.cli:main",
@@ -34796,7 +34796,8 @@
34796
34796
  "kind": "string",
34797
34797
  "action": "store",
34798
34798
  "choices": [
34799
- "LEADS"
34799
+ "LEADS",
34800
+ "ACCOUNTS"
34800
34801
  ],
34801
34802
  "flags": [
34802
34803
  "--target"
@@ -35176,7 +35177,7 @@
35176
35177
  },
35177
35178
  "availability": null,
35178
35179
  "examples": [
35179
- "autotouch agents create [-h] [--name NAME] [--target {LEADS}]\n [--assigned-user ASSIGNED_USER]\n [--schedule-time SCHEDULE_TIME]\n [--schedule-tz SCHEDULE_TZ]\n [--schedule-frequency {hourly,every_6h,every_12h,daily,weekly}]\n [--schedule-days {all,weekdays}]\n [--schedule-day-of-week 0-6]\n [--schedule-window-start SCHEDULE_WINDOW_START]\n [--schedule-window-end SCHEDULE_WINDOW_END]\n [--auto-find-email] [--auto-find-phone]\n [--auto-broaden]\n [--auto-create-lead-mode {qualified_only,everyone,manual_only}]\n [--auto-sequence-id AUTO_SEQUENCE_ID]\n [--status {DRAFT,ACTIVE,PAUSED}]\n [--from-file FROM_FILE] [--generate]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}] [--compact]\n [--select SELECT | --json-pointer JSON_POINTER]\n [--verbose]"
35180
+ "autotouch agents create [-h] [--name NAME] [--target {LEADS,ACCOUNTS}]\n [--assigned-user ASSIGNED_USER]\n [--schedule-time SCHEDULE_TIME]\n [--schedule-tz SCHEDULE_TZ]\n [--schedule-frequency {hourly,every_6h,every_12h,daily,weekly}]\n [--schedule-days {all,weekdays}]\n [--schedule-day-of-week 0-6]\n [--schedule-window-start SCHEDULE_WINDOW_START]\n [--schedule-window-end SCHEDULE_WINDOW_END]\n [--auto-find-email] [--auto-find-phone]\n [--auto-broaden]\n [--auto-create-lead-mode {qualified_only,everyone,manual_only}]\n [--auto-sequence-id AUTO_SEQUENCE_ID]\n [--status {DRAFT,ACTIVE,PAUSED}]\n [--from-file FROM_FILE] [--generate]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}] [--compact]\n [--select SELECT | --json-pointer JSON_POINTER]\n [--verbose]"
35180
35181
  ],
35181
35182
  "stability": "stable",
35182
35183
  "handler": "_fn"
@@ -36348,7 +36349,8 @@
36348
36349
  "kind": "string",
36349
36350
  "action": "store",
36350
36351
  "choices": [
36351
- "LEADS"
36352
+ "LEADS",
36353
+ "ACCOUNTS"
36352
36354
  ],
36353
36355
  "default_when_omitted": "LEADS",
36354
36356
  "default": "LEADS",
@@ -36521,7 +36523,7 @@
36521
36523
  },
36522
36524
  "availability": null,
36523
36525
  "examples": [
36524
- "autotouch agents generate-persona [-h] [--target {LEADS}]\n [--current-config CURRENT_CONFIG]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER]\n [--verbose]"
36526
+ "autotouch agents generate-persona [-h] [--target {LEADS,ACCOUNTS}]\n [--current-config CURRENT_CONFIG]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER]\n [--verbose]"
36525
36527
  ],
36526
36528
  "stability": "stable",
36527
36529
  "handler": "_fn"
@@ -36547,7 +36549,8 @@
36547
36549
  "kind": "string",
36548
36550
  "action": "store",
36549
36551
  "choices": [
36550
- "LEADS"
36552
+ "LEADS",
36553
+ "ACCOUNTS"
36551
36554
  ],
36552
36555
  "default_when_omitted": "LEADS",
36553
36556
  "default": "LEADS",
@@ -36732,7 +36735,7 @@
36732
36735
  },
36733
36736
  "availability": null,
36734
36737
  "examples": [
36735
- "autotouch agents generate-topics [-h] [--target {LEADS}]\n [--persona PERSONA]\n [--current-topics CURRENT_TOPICS]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER]\n [--verbose]"
36738
+ "autotouch agents generate-topics [-h] [--target {LEADS,ACCOUNTS}]\n [--persona PERSONA]\n [--current-topics CURRENT_TOPICS]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER]\n [--verbose]"
36736
36739
  ],
36737
36740
  "stability": "stable",
36738
36741
  "handler": "_fn"
@@ -36758,7 +36761,8 @@
36758
36761
  "kind": "string",
36759
36762
  "action": "store",
36760
36763
  "choices": [
36761
- "LEADS"
36764
+ "LEADS",
36765
+ "ACCOUNTS"
36762
36766
  ],
36763
36767
  "default_when_omitted": "LEADS",
36764
36768
  "default": "LEADS",
@@ -36955,7 +36959,7 @@
36955
36959
  },
36956
36960
  "availability": null,
36957
36961
  "examples": [
36958
- "autotouch agents generate-job-signal [-h] [--target {LEADS}]\n [--persona PERSONA]\n [--current-titles CURRENT_TITLES]\n [--current-keywords CURRENT_KEYWORDS]\n [--base-url BASE_URL]\n [--token TOKEN] [--use-x-api-key]\n [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER]\n [--verbose]"
36962
+ "autotouch agents generate-job-signal [-h] [--target {LEADS,ACCOUNTS}]\n [--persona PERSONA]\n [--current-titles CURRENT_TITLES]\n [--current-keywords CURRENT_KEYWORDS]\n [--base-url BASE_URL]\n [--token TOKEN] [--use-x-api-key]\n [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER]\n [--verbose]"
36959
36963
  ],
36960
36964
  "stability": "stable",
36961
36965
  "handler": "_fn"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.87
3
+ Version: 0.2.88
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Project-URL: Homepage, https://app.autotouch.ai
6
6
  Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
@@ -36,6 +36,8 @@ For a shipped human-readable reference generated from the installed parser, use
36
36
 
37
37
  ## Install
38
38
 
39
+ Released package:
40
+
39
41
  ```bash
40
42
  pipx install autotouch-cli
41
43
  # or
@@ -44,6 +46,16 @@ pip install autotouch-cli
44
46
  pip install -U autotouch-cli
45
47
  ```
46
48
 
49
+ Unreleased branch or pre-publish build:
50
+
51
+ ```bash
52
+ pipx install --force "git+ssh://git@github.com/nicolonic/autotouch_main.git@<branch-or-sha>"
53
+ # or
54
+ python -m pip install -U "git+ssh://git@github.com/nicolonic/autotouch_main.git@<branch-or-sha>"
55
+ ```
56
+
57
+ The `autotouch-cli` package name installs the latest published package from the configured package index. Use the git/source install form when testing a version bump before the release tag has published.
58
+
47
59
  ## First Run
48
60
 
49
61
  Existing developer key:
@@ -158,13 +170,15 @@ For structured company builds, start with industry IDs plus geo/company-size fil
158
170
 
159
171
  For account-first prospecting from LinkedIn/Sales Navigator, build companies/accounts first, inspect the returned company IDs, then pass those IDs to `autotouch list-build leads --current-company-id ...`. Do not use Exa company search as a default pre-step for every LinkedIn list build; use it when the user's target is genuinely semantic, niche, competitor-based, or not meant to be LinkedIn-sourced.
160
172
 
173
+ Use `autotouch agents ...` for recurring signal-based discovery. Scheduled agents support `--target ACCOUNTS` for company/account output and `--target LEADS` for people output. Every agent writes a source/signal table for the evidence it used; lead agents then write `candidate_research.candidates[]` on source rows and list-sync those candidates into the lead/candidate output table. See the agent playbook for the full source-table and candidate-sync contract.
174
+
161
175
  ## More
162
176
 
163
177
  For automation or agent-driven setup, use:
164
178
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
165
179
  - `autotouch cli-reference` for the shipped parser-generated reference
166
180
  - `autotouch capabilities --output json` for provider/workflow contracts
167
- - `autotouch --version` should be `0.2.87` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, and Exa Company Search up to 100 results
181
+ - `autotouch --version` should be `0.2.88` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, the cleaned single LinkedIn-sourced list-build path, Exa Company Search up to 100 results, and scheduled agent `--target ACCOUNTS|LEADS`
168
182
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
169
183
  - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
170
184
  - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "autotouch-cli"
7
- version = "0.2.87"
7
+ version = "0.2.88"
8
8
  description = "Autotouch Smart Table CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes