pathscout 0.3.0__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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 PathScout contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,260 @@
1
+ Metadata-Version: 2.4
2
+ Name: pathscout
3
+ Version: 0.3.0
4
+ Summary: Local-only role discovery for finding high-fit startup opportunities.
5
+ Author: PathScout contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/ckoglmeier/pathscout
8
+ Project-URL: Repository, https://github.com/ckoglmeier/pathscout
9
+ Project-URL: Issues, https://github.com/ckoglmeier/pathscout/issues
10
+ Keywords: job-search,career,role-discovery,local-first
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Topic :: Office/Business
18
+ Classifier: Topic :: Utilities
19
+ Requires-Python: >=3.9
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Dynamic: license-file
23
+
24
+ # PathScout
25
+
26
+ PathScout is a local-only role discovery CLI for finding high-fit startup opportunities before they become obvious job posts.
27
+
28
+ It fetches broad signals, scores them against a personal fit profile, stores deduped observations in SQLite, and emits a canonical JSON artifact plus a readable Markdown digest.
29
+
30
+ ## What PathScout Is
31
+
32
+ - A local-only CLI for monitoring companies, careers pages, RSS feeds, portfolio lists, and manual notes.
33
+ - A fit-profile engine for surfacing target roles, hidden-search hypotheses, and weaker watch signals.
34
+ - An explainable findings scanner: every surfaced item includes score, tier, reasons, flags, source metadata, and suppression state.
35
+
36
+ ## What PathScout Is Not
37
+
38
+ - It is not a hosted marketplace.
39
+ - It is not a recruiting CRM.
40
+ - It is not a general-purpose job board scraper.
41
+ - It does not provide hosted storage, sync, or remote persistence.
42
+
43
+ ## Install
44
+
45
+ From GitHub:
46
+
47
+ ```bash
48
+ pipx install git+https://github.com/ckoglmeier/pathscout.git
49
+ ```
50
+
51
+ From a local checkout:
52
+
53
+ ```bash
54
+ pipx install .
55
+ ```
56
+
57
+ For development:
58
+
59
+ ```bash
60
+ python3 -m pathscout doctor
61
+ python3 -m pathscout run --dry-run --format both
62
+ ```
63
+
64
+ ## Quick Start
65
+
66
+ ```bash
67
+ pathscout start
68
+ pathscout next
69
+ pathscout init
70
+ pathscout setup
71
+ pathscout doctor
72
+ pathscout run --format both
73
+ ```
74
+
75
+ `pathscout start` is a read-only startup checklist. It shows what exists, what is missing, and the next recommended command without creating or editing files.
76
+
77
+ `pathscout next` prints only the next recommended action. `/next` is also accepted as an alias.
78
+
79
+ `pathscout setup` is an interactive guided setup flow. It walks through environment, role/function, locations, avoid terms, background, proof points, constraints, and network context in order, saving answers into local JSON files as it goes.
80
+
81
+ During `init`, PathScout asks two onboarding questions in this order:
82
+
83
+ 1. What is the right environment for you?
84
+ 2. What is the right role for you?
85
+
86
+ For scripted setup, pass answers directly:
87
+
88
+ ```bash
89
+ pathscout init \
90
+ --environment "Remote AI startups" \
91
+ --role "Founding Product Lead"
92
+ ```
93
+
94
+ Use `--no-input` to create default sample config without prompts.
95
+
96
+ Outputs:
97
+
98
+ - `data/pathscout.sqlite`: local state and dedupe history.
99
+ - `outputs/latest.json`: canonical machine-readable findings artifact.
100
+ - `outputs/latest.md`: human-readable digest rendered from the JSON findings.
101
+ - `outputs/packages/`: optional portable opportunity packages created from findings.
102
+ - `config/profile.json`: personal fit profile.
103
+ - `config/background.sample.json`: tracked example candidate context.
104
+ - `config/background.local.json`: private candidate context and proof points.
105
+ - `config/sources.json`: source adapter configuration.
106
+ - `config/watchlist.json`: curated company list.
107
+ - `config/suppressions.json`: structured ignored findings.
108
+
109
+ ## Configuration
110
+
111
+ PathScout uses schema-versioned JSON files.
112
+
113
+ `config/profile.json` is the personal fit model. It contains target roles, stages, domains, excluded domains, location preferences, travel constraints, authority terms, and scoring thresholds.
114
+
115
+ `config/sources.json` describes inputs. Each source uses this adapter contract:
116
+
117
+ ```json
118
+ {
119
+ "id": "watchlist_careers",
120
+ "type": "watchlist_careers",
121
+ "name": "Watchlist careers pages",
122
+ "enabled": true,
123
+ "config": {
124
+ "path": "config/watchlist.json"
125
+ }
126
+ }
127
+ ```
128
+
129
+ `id` is stable and scriptable. `name` is display-only. `type` selects the adapter. `config` is adapter-specific.
130
+
131
+ `config/suppressions.json` stores structured ignores:
132
+
133
+ ```json
134
+ {
135
+ "schema_version": 1,
136
+ "suppressions": [
137
+ {
138
+ "id": "finding-content-hash",
139
+ "scope": "finding",
140
+ "reason": "Not a fit",
141
+ "expires_at": "2026-12-31",
142
+ "created_at": "2026-06-29"
143
+ }
144
+ ]
145
+ }
146
+ ```
147
+
148
+ Suppressions affect output visibility. They do not delete observations from SQLite.
149
+
150
+ ## Source Types
151
+
152
+ The v0.2 runner supports standard-library fetches for:
153
+
154
+ - `manual`: config-entered notes for companies or opportunities you want tracked.
155
+ - `watchlist`: turns every active watchlist company into a hidden-search observation.
156
+ - `watchlist_careers`: probes active watchlist companies' careers pages for posted role evidence.
157
+ - `portfolio`: turns companies from `config/portfolio.json` into relationship-context observations.
158
+ - `web_page`: fetches a single web page.
159
+ - `rss`: fetches an RSS or Atom feed.
160
+
161
+ `radar_portfolio` remains as a deprecated alias for one release. Use `portfolio` for new config.
162
+
163
+ ## Commands
164
+
165
+ ```bash
166
+ pathscout start
167
+ pathscout next
168
+ pathscout init
169
+ pathscout setup
170
+ pathscout doctor
171
+ pathscout watchlist
172
+ pathscout portfolio
173
+ pathscout review
174
+ pathscout explain <finding-id>
175
+ pathscout notes <finding-id> --add "Question to verify before outreach"
176
+ pathscout thesis <finding-id>
177
+ pathscout package <finding-id>
178
+ pathscout suppress <finding-id> --reason "Not a fit"
179
+ pathscout run --format json
180
+ pathscout run --format markdown
181
+ pathscout run --format both
182
+ ```
183
+
184
+ Useful paths can be overridden:
185
+
186
+ ```bash
187
+ pathscout run \
188
+ --profile config/profile.json \
189
+ --sources config/sources.json \
190
+ --watchlist config/watchlist.json \
191
+ --suppressions config/suppressions.json \
192
+ --db data/pathscout.sqlite \
193
+ --json-out outputs/latest.json \
194
+ --out outputs/latest.md
195
+ ```
196
+
197
+ ## Digest Tiers
198
+
199
+ - `Act Now`: explicit target role or recruiter-visible mandate with strong fit signals.
200
+ - `Hidden Search Hypothesis`: no role posted, but company signals suggest a likely hiring need.
201
+ - `Watch Signal`: weaker signal, lower-level posting, or incomplete evidence.
202
+ - `Filtered`: captured for history but excluded from the main digest.
203
+
204
+ ## Review And Suppress
205
+
206
+ Use `review` to scan findings from the latest JSON artifact without opening the file:
207
+
208
+ ```bash
209
+ pathscout review --limit 10
210
+ pathscout review --tier "Act Now"
211
+ ```
212
+
213
+ Use `explain` to inspect why a finding surfaced:
214
+
215
+ ```bash
216
+ pathscout explain <finding-id>
217
+ ```
218
+
219
+ Use `notes` to keep local judgment attached to a finding or company:
220
+
221
+ ```bash
222
+ pathscout notes <finding-id> --add "Ask a former employee whether this team is still founder-led"
223
+ pathscout notes --company "Northstar Robotics"
224
+ ```
225
+
226
+ Use `thesis` to generate a local role-thesis package from a finding. Copy `config/background.sample.json` to `config/background.local.json` first if you want the thesis to include private candidate context:
227
+
228
+ ```bash
229
+ pathscout thesis <finding-id>
230
+ ```
231
+
232
+ Thesis packages are written to `outputs/theses/` and are generated from the same JSON finding objects used by review and Markdown digests. They include the company moment, problem map, proposed function, fit argument, 90-180 day wedge, notes, and evidence gaps. They are thinking artifacts, not generated job descriptions or send-ready outreach.
233
+
234
+ Use `suppress` to hide a finding from later Markdown digests while keeping the raw observation in SQLite and the finding marked in JSON:
235
+
236
+ ```bash
237
+ pathscout suppress <finding-id> --reason "Not a fit" --expires 2026-12-31
238
+ ```
239
+
240
+ Careers pages are parsed into separate role findings when PathScout can identify role-title rows. If a page does not expose clear role titles, PathScout falls back to one page-level finding.
241
+
242
+ ## Package Exports
243
+
244
+ Use `package` to create a portable, human-readable and agent-readable opportunity package from a finding in `outputs/latest.json`:
245
+
246
+ ```bash
247
+ pathscout package <finding-id>
248
+ ```
249
+
250
+ Each package includes a manifest, a human Markdown brief, agent instructions, and canonical JSON data under `outputs/packages/`. See `docs/artifacts.md` for the artifact contract.
251
+
252
+ `config/background.local.json`, legacy `config/background.json`, `data/notes.json`, `outputs/theses/`, and `outputs/packages/` are ignored by default because they may contain private candidate context.
253
+
254
+ See `DATA_CONTRACT.md` and `docs/source_of_truth.md` for the local-only storage boundary and agent-readable artifact contract. Network source fetches collect evidence for local runs; they are not hosted storage or sync.
255
+
256
+ ## Design Borrowed From
257
+
258
+ PathScout follows scanner-style findings: stable IDs, evidence, severity-like tiers, reasons, flags, and suppressions.
259
+
260
+ The config split borrows from dbt-style separation of personal profile from project config. Source IDs follow the pre-commit convention: stable machine IDs plus human names. Suppressions borrow from security scanners: structured ignores with reasons and optional expiration dates.
@@ -0,0 +1,237 @@
1
+ # PathScout
2
+
3
+ PathScout is a local-only role discovery CLI for finding high-fit startup opportunities before they become obvious job posts.
4
+
5
+ It fetches broad signals, scores them against a personal fit profile, stores deduped observations in SQLite, and emits a canonical JSON artifact plus a readable Markdown digest.
6
+
7
+ ## What PathScout Is
8
+
9
+ - A local-only CLI for monitoring companies, careers pages, RSS feeds, portfolio lists, and manual notes.
10
+ - A fit-profile engine for surfacing target roles, hidden-search hypotheses, and weaker watch signals.
11
+ - An explainable findings scanner: every surfaced item includes score, tier, reasons, flags, source metadata, and suppression state.
12
+
13
+ ## What PathScout Is Not
14
+
15
+ - It is not a hosted marketplace.
16
+ - It is not a recruiting CRM.
17
+ - It is not a general-purpose job board scraper.
18
+ - It does not provide hosted storage, sync, or remote persistence.
19
+
20
+ ## Install
21
+
22
+ From GitHub:
23
+
24
+ ```bash
25
+ pipx install git+https://github.com/ckoglmeier/pathscout.git
26
+ ```
27
+
28
+ From a local checkout:
29
+
30
+ ```bash
31
+ pipx install .
32
+ ```
33
+
34
+ For development:
35
+
36
+ ```bash
37
+ python3 -m pathscout doctor
38
+ python3 -m pathscout run --dry-run --format both
39
+ ```
40
+
41
+ ## Quick Start
42
+
43
+ ```bash
44
+ pathscout start
45
+ pathscout next
46
+ pathscout init
47
+ pathscout setup
48
+ pathscout doctor
49
+ pathscout run --format both
50
+ ```
51
+
52
+ `pathscout start` is a read-only startup checklist. It shows what exists, what is missing, and the next recommended command without creating or editing files.
53
+
54
+ `pathscout next` prints only the next recommended action. `/next` is also accepted as an alias.
55
+
56
+ `pathscout setup` is an interactive guided setup flow. It walks through environment, role/function, locations, avoid terms, background, proof points, constraints, and network context in order, saving answers into local JSON files as it goes.
57
+
58
+ During `init`, PathScout asks two onboarding questions in this order:
59
+
60
+ 1. What is the right environment for you?
61
+ 2. What is the right role for you?
62
+
63
+ For scripted setup, pass answers directly:
64
+
65
+ ```bash
66
+ pathscout init \
67
+ --environment "Remote AI startups" \
68
+ --role "Founding Product Lead"
69
+ ```
70
+
71
+ Use `--no-input` to create default sample config without prompts.
72
+
73
+ Outputs:
74
+
75
+ - `data/pathscout.sqlite`: local state and dedupe history.
76
+ - `outputs/latest.json`: canonical machine-readable findings artifact.
77
+ - `outputs/latest.md`: human-readable digest rendered from the JSON findings.
78
+ - `outputs/packages/`: optional portable opportunity packages created from findings.
79
+ - `config/profile.json`: personal fit profile.
80
+ - `config/background.sample.json`: tracked example candidate context.
81
+ - `config/background.local.json`: private candidate context and proof points.
82
+ - `config/sources.json`: source adapter configuration.
83
+ - `config/watchlist.json`: curated company list.
84
+ - `config/suppressions.json`: structured ignored findings.
85
+
86
+ ## Configuration
87
+
88
+ PathScout uses schema-versioned JSON files.
89
+
90
+ `config/profile.json` is the personal fit model. It contains target roles, stages, domains, excluded domains, location preferences, travel constraints, authority terms, and scoring thresholds.
91
+
92
+ `config/sources.json` describes inputs. Each source uses this adapter contract:
93
+
94
+ ```json
95
+ {
96
+ "id": "watchlist_careers",
97
+ "type": "watchlist_careers",
98
+ "name": "Watchlist careers pages",
99
+ "enabled": true,
100
+ "config": {
101
+ "path": "config/watchlist.json"
102
+ }
103
+ }
104
+ ```
105
+
106
+ `id` is stable and scriptable. `name` is display-only. `type` selects the adapter. `config` is adapter-specific.
107
+
108
+ `config/suppressions.json` stores structured ignores:
109
+
110
+ ```json
111
+ {
112
+ "schema_version": 1,
113
+ "suppressions": [
114
+ {
115
+ "id": "finding-content-hash",
116
+ "scope": "finding",
117
+ "reason": "Not a fit",
118
+ "expires_at": "2026-12-31",
119
+ "created_at": "2026-06-29"
120
+ }
121
+ ]
122
+ }
123
+ ```
124
+
125
+ Suppressions affect output visibility. They do not delete observations from SQLite.
126
+
127
+ ## Source Types
128
+
129
+ The v0.2 runner supports standard-library fetches for:
130
+
131
+ - `manual`: config-entered notes for companies or opportunities you want tracked.
132
+ - `watchlist`: turns every active watchlist company into a hidden-search observation.
133
+ - `watchlist_careers`: probes active watchlist companies' careers pages for posted role evidence.
134
+ - `portfolio`: turns companies from `config/portfolio.json` into relationship-context observations.
135
+ - `web_page`: fetches a single web page.
136
+ - `rss`: fetches an RSS or Atom feed.
137
+
138
+ `radar_portfolio` remains as a deprecated alias for one release. Use `portfolio` for new config.
139
+
140
+ ## Commands
141
+
142
+ ```bash
143
+ pathscout start
144
+ pathscout next
145
+ pathscout init
146
+ pathscout setup
147
+ pathscout doctor
148
+ pathscout watchlist
149
+ pathscout portfolio
150
+ pathscout review
151
+ pathscout explain <finding-id>
152
+ pathscout notes <finding-id> --add "Question to verify before outreach"
153
+ pathscout thesis <finding-id>
154
+ pathscout package <finding-id>
155
+ pathscout suppress <finding-id> --reason "Not a fit"
156
+ pathscout run --format json
157
+ pathscout run --format markdown
158
+ pathscout run --format both
159
+ ```
160
+
161
+ Useful paths can be overridden:
162
+
163
+ ```bash
164
+ pathscout run \
165
+ --profile config/profile.json \
166
+ --sources config/sources.json \
167
+ --watchlist config/watchlist.json \
168
+ --suppressions config/suppressions.json \
169
+ --db data/pathscout.sqlite \
170
+ --json-out outputs/latest.json \
171
+ --out outputs/latest.md
172
+ ```
173
+
174
+ ## Digest Tiers
175
+
176
+ - `Act Now`: explicit target role or recruiter-visible mandate with strong fit signals.
177
+ - `Hidden Search Hypothesis`: no role posted, but company signals suggest a likely hiring need.
178
+ - `Watch Signal`: weaker signal, lower-level posting, or incomplete evidence.
179
+ - `Filtered`: captured for history but excluded from the main digest.
180
+
181
+ ## Review And Suppress
182
+
183
+ Use `review` to scan findings from the latest JSON artifact without opening the file:
184
+
185
+ ```bash
186
+ pathscout review --limit 10
187
+ pathscout review --tier "Act Now"
188
+ ```
189
+
190
+ Use `explain` to inspect why a finding surfaced:
191
+
192
+ ```bash
193
+ pathscout explain <finding-id>
194
+ ```
195
+
196
+ Use `notes` to keep local judgment attached to a finding or company:
197
+
198
+ ```bash
199
+ pathscout notes <finding-id> --add "Ask a former employee whether this team is still founder-led"
200
+ pathscout notes --company "Northstar Robotics"
201
+ ```
202
+
203
+ Use `thesis` to generate a local role-thesis package from a finding. Copy `config/background.sample.json` to `config/background.local.json` first if you want the thesis to include private candidate context:
204
+
205
+ ```bash
206
+ pathscout thesis <finding-id>
207
+ ```
208
+
209
+ Thesis packages are written to `outputs/theses/` and are generated from the same JSON finding objects used by review and Markdown digests. They include the company moment, problem map, proposed function, fit argument, 90-180 day wedge, notes, and evidence gaps. They are thinking artifacts, not generated job descriptions or send-ready outreach.
210
+
211
+ Use `suppress` to hide a finding from later Markdown digests while keeping the raw observation in SQLite and the finding marked in JSON:
212
+
213
+ ```bash
214
+ pathscout suppress <finding-id> --reason "Not a fit" --expires 2026-12-31
215
+ ```
216
+
217
+ Careers pages are parsed into separate role findings when PathScout can identify role-title rows. If a page does not expose clear role titles, PathScout falls back to one page-level finding.
218
+
219
+ ## Package Exports
220
+
221
+ Use `package` to create a portable, human-readable and agent-readable opportunity package from a finding in `outputs/latest.json`:
222
+
223
+ ```bash
224
+ pathscout package <finding-id>
225
+ ```
226
+
227
+ Each package includes a manifest, a human Markdown brief, agent instructions, and canonical JSON data under `outputs/packages/`. See `docs/artifacts.md` for the artifact contract.
228
+
229
+ `config/background.local.json`, legacy `config/background.json`, `data/notes.json`, `outputs/theses/`, and `outputs/packages/` are ignored by default because they may contain private candidate context.
230
+
231
+ See `DATA_CONTRACT.md` and `docs/source_of_truth.md` for the local-only storage boundary and agent-readable artifact contract. Network source fetches collect evidence for local runs; they are not hosted storage or sync.
232
+
233
+ ## Design Borrowed From
234
+
235
+ PathScout follows scanner-style findings: stable IDs, evidence, severity-like tiers, reasons, flags, and suppressions.
236
+
237
+ The config split borrows from dbt-style separation of personal profile from project config. Source IDs follow the pre-commit convention: stable machine IDs plus human names. Suppressions borrow from security scanners: structured ignores with reasons and optional expiration dates.
@@ -0,0 +1,5 @@
1
+ """Local-first role discovery radar."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.3.0"
@@ -0,0 +1,6 @@
1
+ from .cli import main
2
+
3
+
4
+ if __name__ == "__main__":
5
+ raise SystemExit(main())
6
+