frontier-scout 0.2.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.
Files changed (86) hide show
  1. frontier_scout-0.2.0/LICENSE +21 -0
  2. frontier_scout-0.2.0/PKG-INFO +353 -0
  3. frontier_scout-0.2.0/README.md +314 -0
  4. frontier_scout-0.2.0/frontier_scout/__init__.py +3 -0
  5. frontier_scout-0.2.0/frontier_scout/__main__.py +6 -0
  6. frontier_scout-0.2.0/frontier_scout/cli.py +447 -0
  7. frontier_scout-0.2.0/frontier_scout/dep_trial.py +135 -0
  8. frontier_scout-0.2.0/frontier_scout/dependencies.py +315 -0
  9. frontier_scout-0.2.0/frontier_scout/dossier.py +232 -0
  10. frontier_scout-0.2.0/frontier_scout/evaluate.py +153 -0
  11. frontier_scout-0.2.0/frontier_scout/guard.py +69 -0
  12. frontier_scout-0.2.0/frontier_scout/lab.py +16 -0
  13. frontier_scout-0.2.0/frontier_scout/mcp_audit.py +90 -0
  14. frontier_scout-0.2.0/frontier_scout/packs.py +329 -0
  15. frontier_scout-0.2.0/frontier_scout/platform/__init__.py +2 -0
  16. frontier_scout-0.2.0/frontier_scout/platform/authz/__init__.py +2 -0
  17. frontier_scout-0.2.0/frontier_scout/platform/authz/engine.py +54 -0
  18. frontier_scout-0.2.0/frontier_scout/platform/context/__init__.py +2 -0
  19. frontier_scout-0.2.0/frontier_scout/platform/context/compiler.py +66 -0
  20. frontier_scout-0.2.0/frontier_scout/platform/context/prompt_registry.py +33 -0
  21. frontier_scout-0.2.0/frontier_scout/platform/core/__init__.py +2 -0
  22. frontier_scout-0.2.0/frontier_scout/platform/core/budgets.py +38 -0
  23. frontier_scout-0.2.0/frontier_scout/platform/core/config.py +23 -0
  24. frontier_scout-0.2.0/frontier_scout/platform/core/errors.py +14 -0
  25. frontier_scout-0.2.0/frontier_scout/platform/core/ids.py +20 -0
  26. frontier_scout-0.2.0/frontier_scout/platform/core/types.py +45 -0
  27. frontier_scout-0.2.0/frontier_scout/platform/evals/__init__.py +2 -0
  28. frontier_scout-0.2.0/frontier_scout/platform/evals/harness.py +38 -0
  29. frontier_scout-0.2.0/frontier_scout/platform/gateway/__init__.py +2 -0
  30. frontier_scout-0.2.0/frontier_scout/platform/gateway/model_gateway.py +58 -0
  31. frontier_scout-0.2.0/frontier_scout/platform/incident_change_scout/__init__.py +2 -0
  32. frontier_scout-0.2.0/frontier_scout/platform/incident_change_scout/cli_eval.py +22 -0
  33. frontier_scout-0.2.0/frontier_scout/platform/incident_change_scout/workflow.py +200 -0
  34. frontier_scout-0.2.0/frontier_scout/platform/memory/__init__.py +2 -0
  35. frontier_scout-0.2.0/frontier_scout/platform/memory/store.py +134 -0
  36. frontier_scout-0.2.0/frontier_scout/platform/observability/__init__.py +2 -0
  37. frontier_scout-0.2.0/frontier_scout/platform/observability/audit.py +36 -0
  38. frontier_scout-0.2.0/frontier_scout/platform/observability/tracing.py +43 -0
  39. frontier_scout-0.2.0/frontier_scout/platform/orchestration/__init__.py +2 -0
  40. frontier_scout-0.2.0/frontier_scout/platform/orchestration/runtime.py +76 -0
  41. frontier_scout-0.2.0/frontier_scout/platform/retrieval/__init__.py +2 -0
  42. frontier_scout-0.2.0/frontier_scout/platform/retrieval/hybrid.py +56 -0
  43. frontier_scout-0.2.0/frontier_scout/platform/tools/__init__.py +2 -0
  44. frontier_scout-0.2.0/frontier_scout/platform/tools/registry.py +45 -0
  45. frontier_scout-0.2.0/frontier_scout/policy.py +186 -0
  46. frontier_scout-0.2.0/frontier_scout/profile.py +323 -0
  47. frontier_scout-0.2.0/frontier_scout/report.py +489 -0
  48. frontier_scout-0.2.0/frontier_scout/scout.py +178 -0
  49. frontier_scout-0.2.0/frontier_scout/store.py +969 -0
  50. frontier_scout-0.2.0/frontier_scout/trials.py +154 -0
  51. frontier_scout-0.2.0/frontier_scout.egg-info/PKG-INFO +353 -0
  52. frontier_scout-0.2.0/frontier_scout.egg-info/SOURCES.txt +84 -0
  53. frontier_scout-0.2.0/frontier_scout.egg-info/dependency_links.txt +1 -0
  54. frontier_scout-0.2.0/frontier_scout.egg-info/entry_points.txt +2 -0
  55. frontier_scout-0.2.0/frontier_scout.egg-info/requires.txt +20 -0
  56. frontier_scout-0.2.0/frontier_scout.egg-info/top_level.txt +3 -0
  57. frontier_scout-0.2.0/outputs/__init__.py +12 -0
  58. frontier_scout-0.2.0/outputs/_text.py +64 -0
  59. frontier_scout-0.2.0/pyproject.toml +83 -0
  60. frontier_scout-0.2.0/scripts/__init__.py +2 -0
  61. frontier_scout-0.2.0/scripts/cost_tracker.py +110 -0
  62. frontier_scout-0.2.0/scripts/demo.py +31 -0
  63. frontier_scout-0.2.0/scripts/judge.py +283 -0
  64. frontier_scout-0.2.0/scripts/lab_runner.py +1312 -0
  65. frontier_scout-0.2.0/scripts/llm_client.py +118 -0
  66. frontier_scout-0.2.0/scripts/prompts.py +360 -0
  67. frontier_scout-0.2.0/scripts/quality_logger.py +49 -0
  68. frontier_scout-0.2.0/scripts/render_html_readme_banner.py +90 -0
  69. frontier_scout-0.2.0/scripts/render_readme_banner.py +696 -0
  70. frontier_scout-0.2.0/scripts/scout.py +955 -0
  71. frontier_scout-0.2.0/scripts/tools.py +403 -0
  72. frontier_scout-0.2.0/scripts/validators.py +269 -0
  73. frontier_scout-0.2.0/setup.cfg +4 -0
  74. frontier_scout-0.2.0/tests/test_guard.py +54 -0
  75. frontier_scout-0.2.0/tests/test_incident_change_scout.py +18 -0
  76. frontier_scout-0.2.0/tests/test_lab.py +567 -0
  77. frontier_scout-0.2.0/tests/test_mcp_audit.py +31 -0
  78. frontier_scout-0.2.0/tests/test_packs_dependencies.py +192 -0
  79. frontier_scout-0.2.0/tests/test_platform_authz.py +36 -0
  80. frontier_scout-0.2.0/tests/test_platform_context_gateway.py +52 -0
  81. frontier_scout-0.2.0/tests/test_platform_orchestration_tools.py +44 -0
  82. frontier_scout-0.2.0/tests/test_platform_retrieval.py +27 -0
  83. frontier_scout-0.2.0/tests/test_policy.py +79 -0
  84. frontier_scout-0.2.0/tests/test_profile_dossier.py +94 -0
  85. frontier_scout-0.2.0/tests/test_trials.py +73 -0
  86. frontier_scout-0.2.0/tests/test_validators.py +289 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Frontier Scout 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,353 @@
1
+ Metadata-Version: 2.4
2
+ Name: frontier-scout
3
+ Version: 0.2.0
4
+ Summary: A local AI adoption radar for tools, MCP servers, agent frameworks, and model drops.
5
+ Author: Ajay Surya
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/ajaysurya1221/frontier-scout
8
+ Project-URL: Repository, https://github.com/ajaysurya1221/frontier-scout
9
+ Project-URL: Issues, https://github.com/ajaysurya1221/frontier-scout/issues
10
+ Keywords: ai,agents,mcp,developer-tools,tech-radar,cli
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Topic :: Software Development :: Quality Assurance
16
+ Requires-Python: >=3.11
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: anthropic>=0.45.0
20
+ Requires-Dist: feedparser>=6.0.11
21
+ Requires-Dist: requests>=2.32.0
22
+ Requires-Dist: beautifulsoup4>=4.12.0
23
+ Requires-Dist: pydantic>=2.0
24
+ Requires-Dist: huggingface_hub>=0.24.0
25
+ Requires-Dist: transformers>=4.40.0
26
+ Requires-Dist: packaging>=24.0
27
+ Requires-Dist: tomli-w>=1.0.0
28
+ Provides-Extra: dev
29
+ Requires-Dist: bandit>=1.7.10; extra == "dev"
30
+ Requires-Dist: build>=1.2.0; extra == "dev"
31
+ Requires-Dist: coverage>=7.6.0; extra == "dev"
32
+ Requires-Dist: detect-secrets>=1.5.0; extra == "dev"
33
+ Requires-Dist: mypy>=1.10.0; extra == "dev"
34
+ Requires-Dist: pip-audit>=2.7.0; extra == "dev"
35
+ Requires-Dist: pillow>=10.0.0; extra == "dev"
36
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
37
+ Requires-Dist: ruff>=0.6.0; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ # Frontier Scout
41
+
42
+ > Local-first try-before-trust for AI tools, agents, MCP servers, models, and risky engineering changes.
43
+
44
+ ![python](https://img.shields.io/badge/python-3.11-3776ab?logo=python&logoColor=white)
45
+ ![status](https://img.shields.io/badge/status-v0.1%20alpha-orange)
46
+ ![license](https://img.shields.io/badge/license-MIT-blue)
47
+ ![local-first](https://img.shields.io/badge/local--first-SQLite%20%2B%20static%20reports-0f766e)
48
+
49
+ ![Frontier Scout personalized AI adoption mission control](docs/assets/frontier-scout-mission-control.gif)
50
+
51
+ [Killer Workflow](#killer-workflow) · [Demo](#60-second-demo) · [What You Get](#what-you-get) · [Questions](#questions-people-ask) · [Architecture](#architecture) · [Safety](#safety-model) · [Quickstart](#quickstart) · [Roadmap](ROADMAP.md) · [Security](SECURITY.md)
52
+
53
+ Frontier Scout answers the question technical teams now hit every week:
54
+
55
+ > Should this AI tool, agent, MCP server, model, or engineering change get any
56
+ > access to our code, shell, browser, network, or credentials?
57
+
58
+ It has three compatible surfaces:
59
+
60
+ - **Tool Test Lab / Adoption Firewall**: one-link `evaluate`, `trial`, and
61
+ `guard` workflows that record permission manifests and try-before-trust
62
+ receipts before a tool touches a real project.
63
+ - **AI Tool Radar**: a local adoption radar that turns public AI-tool signals
64
+ into ADOPT / TRIAL / ASSESS / HOLD verdicts with source evidence.
65
+ - **Incident Change Scout**: a graph-aware engineering workflow that turns an
66
+ incident ticket into cited context, a bounded remediation plan, approval
67
+ interrupts, trace/audit logs, and an eval result.
68
+
69
+ The posture is deliberately boring in the good way: CLI first, SQLite/local
70
+ files by default, static reports, no hosted telemetry, no hidden auto-installs,
71
+ and explicit approval before risky actions.
72
+
73
+ ## Killer workflow
74
+
75
+ Someone drops a GitHub repo, MCP server, plugin, model, or agent framework in a
76
+ newsletter or team chat. Frontier Scout turns that link into a local adoption
77
+ decision instead of a vibes-based "looks safe" answer:
78
+
79
+ ```bash
80
+ frontier-scout init --repo .
81
+ frontier-scout evaluate <tool-url>
82
+ frontier-scout trial <tool-or-url> --dry-run
83
+ frontier-scout guard --repo .
84
+ frontier-scout report
85
+ ```
86
+
87
+ That flow compares the tool to lightweight local repo signals, classifies the
88
+ permission surface, runs safe probes when the runtime is supported, stores a
89
+ local receipt, and tells CI whether risky adoption evidence is missing.
90
+
91
+ ## 60-second demo
92
+
93
+ No API key. No Slack workspace. No cloud setup. Start with the engineering
94
+ workflow:
95
+
96
+ ```bash
97
+ git clone https://github.com/ajaysurya1221/frontier-scout
98
+ cd frontier-scout
99
+ python3 -m venv .venv && source .venv/bin/activate
100
+ pip install -e ".[dev]"
101
+ make demo
102
+ open .scratch/incident-demo/answer.md
103
+ ```
104
+
105
+ Incident demo writes:
106
+
107
+ - `.scratch/incident-demo/answer.md` — cited remediation answer.
108
+ - `.scratch/incident-demo/trace.jsonl` — local OpenTelemetry-shaped spans.
109
+ - `.scratch/incident-demo/audit.jsonl` — Cloudflare-style audit records.
110
+ - `.scratch/incident-demo/eval.json` — golden eval score.
111
+
112
+ Then run the AI tool radar demo:
113
+
114
+ ```bash
115
+ frontier-scout demo
116
+ open demo/briefing.html
117
+ ```
118
+
119
+ Radar demo writes:
120
+
121
+ - [`demo/briefing.html`](demo/briefing.html) — static executive radar.
122
+ - [`demo/briefing.md`](demo/briefing.md) — Markdown version for issues/docs.
123
+ - [`demo/verdicts.json`](demo/verdicts.json) — structured verdict payload.
124
+ - [`demo/cost-breakdown.md`](demo/cost-breakdown.md) — expected live-run spend shape.
125
+ - [`demo/judge-trace.md`](demo/judge-trace.md) — what the judge layer protects against.
126
+
127
+ ## What you get
128
+
129
+ - **Incident Change Scout** for provenance-first incident analysis, graph-aware retrieval, bounded remediation planning, approval interrupts, and local evals.
130
+ - **AI ecosystem scouting** across GitHub releases, trending repos, MCP/skills sources, RSS, HN, Hugging Face, and a small arXiv slice.
131
+ - **Living Scout Packs** for AI devtools, MCP, agent frameworks, local AI, RAG/memory, workflow builders, and inference gateways. Seeds are only bootstraps; candidates can be promoted, demoted, or retired as evidence changes.
132
+ - **Dependency intelligence** for repo-relevant security, hardening, and breaking releases. It explains why an upgrade matters here and emits a trial recipe instead of editing your lockfiles.
133
+ - **ADOPT / TRIAL / ASSESS / HOLD verdicts** with risk, stack fit, readiness, adoption cost, provenance, and next action.
134
+ - **Adoption Firewall** commands for try-before-trust evaluation: local evidence ledger, permission manifests, sandbox trial receipts, and CI-friendly guard checks.
135
+ - **Optional Opus judge pass** that vetoes patch-release noise, incident-as-tool mistakes, unsupported claims, and weak ADOPT calls.
136
+ - **Repo-aware stack detection** from common manifests and agent config files.
137
+ - **Polyglot lab runner** for Python, Node, and Hugging Face packages with hermetic subprocess execution.
138
+ - **Local history** in SQLite so future CLI/MCP/plugin surfaces can compare what changed over time.
139
+
140
+ ## Why not just use newsletters or GitHub Trending?
141
+
142
+ | Option | What it gives you | What is missing |
143
+ |---|---|---|
144
+ | Newsletters | Good awareness | Not repo-aware, not source-verifiable, rarely actionable. |
145
+ | GitHub Trending | Popularity signal | No risk/fit/adoption-cost judgment. |
146
+ | Manual research | Highest nuance | Slow, inconsistent, easy to skip when busy. |
147
+ | Frontier Scout | Source-backed verdicts and lab next steps | Requires your API key for live scans. |
148
+
149
+ ## Questions people ask
150
+
151
+ **Why not just ask ChatGPT or Claude if a repo is safe?**
152
+ You can for a one-off opinion. Frontier Scout is for repeatable team decisions:
153
+ same policy, local evidence, stored receipts, history, and CI guardrails.
154
+
155
+ **Does it know my repos?**
156
+ It reads lightweight stack signals locally, such as manifests, CI files, Docker
157
+ files, and agent/MCP config. It should not upload your source code just to
158
+ personalize recommendations.
159
+
160
+ **How can one workflow assess Python, Rust, MCP servers, plugins, or concepts?**
161
+ It does not pretend they are the same. One command routes targets differently:
162
+ supported packages can get sandbox probes, MCP servers get capability audits,
163
+ models get metadata/runtime checks, and concepts or unsupported runtimes get
164
+ honest report-only assessment.
165
+
166
+ **Is this like E2B?**
167
+ E2B is a sandbox provider. Frontier Scout is the adoption decision layer: it can
168
+ decide what deserves a sandbox, run the right probes, and turn the evidence into
169
+ a verdict. Local/Docker/E2B-style sandbox backends belong in the v0.2 toolbench
170
+ roadmap.
171
+
172
+ **Can it prove a tool is safe?**
173
+ No. It reduces blast radius and records evidence. Unknown code is still unknown
174
+ code; the product helps you choose the smallest safe next step.
175
+
176
+ **Will it leak secrets?**
177
+ Trials use temporary workspaces, stripped subprocess environments, timeouts,
178
+ output caps, secret-pattern checks, and explicit approval gates for risky
179
+ actions.
180
+
181
+ ## Architecture
182
+
183
+ ```mermaid
184
+ flowchart LR
185
+ Ticket["Incident ticket"] --> DCG["Typed DCG runtime"]
186
+ Corpus["Seed corpus"] --> Memory["Memory + graph"]
187
+ Memory --> Authz["ReBAC check"]
188
+ Authz --> Retrieval["Hybrid retrieval"]
189
+ Retrieval --> Context["Context compiler"]
190
+ Context --> Gateway["Model gateway"]
191
+ Gateway --> DCG
192
+ DCG --> Approval["Approval interrupt"]
193
+ DCG --> Audit["Trace + audit + eval"]
194
+ Sources["Public sources"] --> Scout["Scout funnel"]
195
+ Scout --> Score["Sonnet score pass"]
196
+ Score --> Verdict["Sonnet verdict pass"]
197
+ Verdict --> Judge["Optional Opus judge"]
198
+ Judge --> Validators["Deterministic validators"]
199
+ Validators --> SQLite["Local SQLite"]
200
+ SQLite --> CLI["CLI"]
201
+ SQLite --> Report["Static report"]
202
+ SQLite --> MCP["Future MCP/plugin surface"]
203
+ CLI --> Lab["Hermetic lab"]
204
+ ```
205
+
206
+ The current engine lives in [`scripts/`](scripts/). The installable CLI lives
207
+ in [`frontier_scout/`](frontier_scout/). `scripts/` remains importable so the
208
+ existing Scout and lab logic can be packaged without a risky rewrite.
209
+
210
+ ## Quickstart
211
+
212
+ Install from a checkout:
213
+
214
+ ```bash
215
+ python3 -m venv .venv
216
+ source .venv/bin/activate
217
+ pip install -e ".[dev]"
218
+ frontier-scout --help
219
+ ```
220
+
221
+ Initialize local state and detect stack signals:
222
+
223
+ ```bash
224
+ frontier-scout init --repo .
225
+ ```
226
+
227
+ Run a free seeded scan:
228
+
229
+ ```bash
230
+ frontier-scout scan --dry-run --repo .
231
+ frontier-scout report --input demo/verdicts.json --output demo/briefing.html
232
+ ```
233
+
234
+ Run a live scan:
235
+
236
+ ```bash
237
+ export ANTHROPIC_API_KEY=...
238
+ frontier-scout scan --repo .
239
+ frontier-scout report
240
+ ```
241
+
242
+ Try-before-trust a single tool before granting it project permissions:
243
+
244
+ ```bash
245
+ frontier-scout evaluate https://github.com/modelcontextprotocol/servers
246
+ frontier-scout trial browser-use/browser-use --url https://github.com/browser-use/browser-use --dry-run
247
+ frontier-scout guard --repo .
248
+ ```
249
+
250
+ `evaluate` records source-backed local evidence and a permission manifest.
251
+ `trial --dry-run` writes an adoption receipt without installing anything.
252
+ `guard` checks the local evidence ledger for risky tools that still need a
253
+ stored trial receipt.
254
+
255
+ Inspect living packs and repo-relevant dependency upgrades:
256
+
257
+ ```bash
258
+ frontier-scout packs list
259
+ frontier-scout packs show mcp
260
+ frontier-scout profile --repo . --dependencies
261
+ frontier-scout deps scan --repo .
262
+ ```
263
+
264
+ `packs` shows the living radar seeds and candidates. `deps scan` looks for
265
+ meaningful security, hardening, and breaking upgrades that deserve a safe trial,
266
+ without modifying manifests or lockfiles.
267
+
268
+ After the first PyPI publish, the expected package install paths are:
269
+
270
+ ```bash
271
+ pipx install frontier-scout
272
+ uvx frontier-scout demo
273
+ ```
274
+
275
+ Until then, the checkout install above is the supported path. An
276
+ `npx frontier-scout` wrapper is intentionally a later distribution layer, not
277
+ the core implementation.
278
+
279
+ ## Safety model
280
+
281
+ Frontier Scout handles untrusted public content and can optionally execute
282
+ untrusted packages in the lab, so the safety rails are load-bearing:
283
+
284
+ - Source text is treated as untrusted data, not instructions.
285
+ - Tool names are checked against the source pool to reduce hallucinated verdicts.
286
+ - Source URLs must pass a domain allowlist.
287
+ - Incident and breach headlines are blocked from becoming tool recommendations.
288
+ - ADOPT requires enough readiness evidence or gets demoted.
289
+ - Adoption Firewall fails closed on unknown MCP/tool capability surfaces.
290
+ - `guard` never modifies the repo; it only reads local evidence and policy.
291
+ - Lab subprocesses receive a stripped environment, wall-clock timeout, size caps, and generated-script secret scanning.
292
+
293
+ See [SECURITY.md](SECURITY.md) for the threat model.
294
+
295
+ ## Cost
296
+
297
+ The offline demo is free. A normal live weekly scan is designed to stay cheap:
298
+
299
+ | Component | Typical cost |
300
+ |---|---:|
301
+ | Sonnet score pass | ~$0.15 |
302
+ | Sonnet verdict pass | ~$0.04 |
303
+ | Optional Opus judge | ~$0.12 |
304
+ | **Weekly scan** | **~$0.30** |
305
+
306
+ Set `JUDGE_ENABLED=false` to skip the Opus judge when you want the cheapest
307
+ possible run.
308
+
309
+ ## Development
310
+
311
+ ```bash
312
+ make setup
313
+ make demo
314
+ make test
315
+ make eval
316
+ make audit
317
+ python -m compileall scripts outputs tests frontier_scout
318
+ PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 python -m pytest -q
319
+ frontier-scout demo
320
+ frontier-scout scan --dry-run
321
+ ```
322
+
323
+ CI runs compile checks, non-live tests, and a tracked-file secret scan.
324
+
325
+ ## Release
326
+
327
+ For tagged releases:
328
+
329
+ 1. Bump `project.version` in `pyproject.toml`.
330
+ 2. Update the matching section in `CHANGELOG.md`.
331
+ 3. Merge to `main`.
332
+ 4. Push annotated tag `vX.Y.Z`.
333
+
334
+ Tag pushes trigger `.github/workflows/release.yml`, which builds distributions,
335
+ publishes to PyPI via trusted publishing, and creates a GitHub Release from
336
+ the matching changelog section.
337
+
338
+ ## Roadmap
339
+
340
+ See [ROADMAP.md](ROADMAP.md). The short version:
341
+
342
+ - **v0.2** — current release: local radar, Adoption Firewall, Incident Change Scout, Living Scout Packs, dependency intelligence, SQLite, CI, Docker demo, and public docs.
343
+ - **v0.3** — MCP/plugin surfaces, stronger sandbox/toolbench backends, and optional output integrations on top of the same local evidence store.
344
+
345
+ ## Contributing
346
+
347
+ Read [CONTRIBUTING.md](CONTRIBUTING.md). The fastest useful PRs improve the
348
+ CLI/report path, validator coverage, source quality, or lab isolation.
349
+ Please also read the [Code of Conduct](CODE_OF_CONDUCT.md).
350
+
351
+ ## License
352
+
353
+ [MIT](LICENSE)
@@ -0,0 +1,314 @@
1
+ # Frontier Scout
2
+
3
+ > Local-first try-before-trust for AI tools, agents, MCP servers, models, and risky engineering changes.
4
+
5
+ ![python](https://img.shields.io/badge/python-3.11-3776ab?logo=python&logoColor=white)
6
+ ![status](https://img.shields.io/badge/status-v0.1%20alpha-orange)
7
+ ![license](https://img.shields.io/badge/license-MIT-blue)
8
+ ![local-first](https://img.shields.io/badge/local--first-SQLite%20%2B%20static%20reports-0f766e)
9
+
10
+ ![Frontier Scout personalized AI adoption mission control](docs/assets/frontier-scout-mission-control.gif)
11
+
12
+ [Killer Workflow](#killer-workflow) · [Demo](#60-second-demo) · [What You Get](#what-you-get) · [Questions](#questions-people-ask) · [Architecture](#architecture) · [Safety](#safety-model) · [Quickstart](#quickstart) · [Roadmap](ROADMAP.md) · [Security](SECURITY.md)
13
+
14
+ Frontier Scout answers the question technical teams now hit every week:
15
+
16
+ > Should this AI tool, agent, MCP server, model, or engineering change get any
17
+ > access to our code, shell, browser, network, or credentials?
18
+
19
+ It has three compatible surfaces:
20
+
21
+ - **Tool Test Lab / Adoption Firewall**: one-link `evaluate`, `trial`, and
22
+ `guard` workflows that record permission manifests and try-before-trust
23
+ receipts before a tool touches a real project.
24
+ - **AI Tool Radar**: a local adoption radar that turns public AI-tool signals
25
+ into ADOPT / TRIAL / ASSESS / HOLD verdicts with source evidence.
26
+ - **Incident Change Scout**: a graph-aware engineering workflow that turns an
27
+ incident ticket into cited context, a bounded remediation plan, approval
28
+ interrupts, trace/audit logs, and an eval result.
29
+
30
+ The posture is deliberately boring in the good way: CLI first, SQLite/local
31
+ files by default, static reports, no hosted telemetry, no hidden auto-installs,
32
+ and explicit approval before risky actions.
33
+
34
+ ## Killer workflow
35
+
36
+ Someone drops a GitHub repo, MCP server, plugin, model, or agent framework in a
37
+ newsletter or team chat. Frontier Scout turns that link into a local adoption
38
+ decision instead of a vibes-based "looks safe" answer:
39
+
40
+ ```bash
41
+ frontier-scout init --repo .
42
+ frontier-scout evaluate <tool-url>
43
+ frontier-scout trial <tool-or-url> --dry-run
44
+ frontier-scout guard --repo .
45
+ frontier-scout report
46
+ ```
47
+
48
+ That flow compares the tool to lightweight local repo signals, classifies the
49
+ permission surface, runs safe probes when the runtime is supported, stores a
50
+ local receipt, and tells CI whether risky adoption evidence is missing.
51
+
52
+ ## 60-second demo
53
+
54
+ No API key. No Slack workspace. No cloud setup. Start with the engineering
55
+ workflow:
56
+
57
+ ```bash
58
+ git clone https://github.com/ajaysurya1221/frontier-scout
59
+ cd frontier-scout
60
+ python3 -m venv .venv && source .venv/bin/activate
61
+ pip install -e ".[dev]"
62
+ make demo
63
+ open .scratch/incident-demo/answer.md
64
+ ```
65
+
66
+ Incident demo writes:
67
+
68
+ - `.scratch/incident-demo/answer.md` — cited remediation answer.
69
+ - `.scratch/incident-demo/trace.jsonl` — local OpenTelemetry-shaped spans.
70
+ - `.scratch/incident-demo/audit.jsonl` — Cloudflare-style audit records.
71
+ - `.scratch/incident-demo/eval.json` — golden eval score.
72
+
73
+ Then run the AI tool radar demo:
74
+
75
+ ```bash
76
+ frontier-scout demo
77
+ open demo/briefing.html
78
+ ```
79
+
80
+ Radar demo writes:
81
+
82
+ - [`demo/briefing.html`](demo/briefing.html) — static executive radar.
83
+ - [`demo/briefing.md`](demo/briefing.md) — Markdown version for issues/docs.
84
+ - [`demo/verdicts.json`](demo/verdicts.json) — structured verdict payload.
85
+ - [`demo/cost-breakdown.md`](demo/cost-breakdown.md) — expected live-run spend shape.
86
+ - [`demo/judge-trace.md`](demo/judge-trace.md) — what the judge layer protects against.
87
+
88
+ ## What you get
89
+
90
+ - **Incident Change Scout** for provenance-first incident analysis, graph-aware retrieval, bounded remediation planning, approval interrupts, and local evals.
91
+ - **AI ecosystem scouting** across GitHub releases, trending repos, MCP/skills sources, RSS, HN, Hugging Face, and a small arXiv slice.
92
+ - **Living Scout Packs** for AI devtools, MCP, agent frameworks, local AI, RAG/memory, workflow builders, and inference gateways. Seeds are only bootstraps; candidates can be promoted, demoted, or retired as evidence changes.
93
+ - **Dependency intelligence** for repo-relevant security, hardening, and breaking releases. It explains why an upgrade matters here and emits a trial recipe instead of editing your lockfiles.
94
+ - **ADOPT / TRIAL / ASSESS / HOLD verdicts** with risk, stack fit, readiness, adoption cost, provenance, and next action.
95
+ - **Adoption Firewall** commands for try-before-trust evaluation: local evidence ledger, permission manifests, sandbox trial receipts, and CI-friendly guard checks.
96
+ - **Optional Opus judge pass** that vetoes patch-release noise, incident-as-tool mistakes, unsupported claims, and weak ADOPT calls.
97
+ - **Repo-aware stack detection** from common manifests and agent config files.
98
+ - **Polyglot lab runner** for Python, Node, and Hugging Face packages with hermetic subprocess execution.
99
+ - **Local history** in SQLite so future CLI/MCP/plugin surfaces can compare what changed over time.
100
+
101
+ ## Why not just use newsletters or GitHub Trending?
102
+
103
+ | Option | What it gives you | What is missing |
104
+ |---|---|---|
105
+ | Newsletters | Good awareness | Not repo-aware, not source-verifiable, rarely actionable. |
106
+ | GitHub Trending | Popularity signal | No risk/fit/adoption-cost judgment. |
107
+ | Manual research | Highest nuance | Slow, inconsistent, easy to skip when busy. |
108
+ | Frontier Scout | Source-backed verdicts and lab next steps | Requires your API key for live scans. |
109
+
110
+ ## Questions people ask
111
+
112
+ **Why not just ask ChatGPT or Claude if a repo is safe?**
113
+ You can for a one-off opinion. Frontier Scout is for repeatable team decisions:
114
+ same policy, local evidence, stored receipts, history, and CI guardrails.
115
+
116
+ **Does it know my repos?**
117
+ It reads lightweight stack signals locally, such as manifests, CI files, Docker
118
+ files, and agent/MCP config. It should not upload your source code just to
119
+ personalize recommendations.
120
+
121
+ **How can one workflow assess Python, Rust, MCP servers, plugins, or concepts?**
122
+ It does not pretend they are the same. One command routes targets differently:
123
+ supported packages can get sandbox probes, MCP servers get capability audits,
124
+ models get metadata/runtime checks, and concepts or unsupported runtimes get
125
+ honest report-only assessment.
126
+
127
+ **Is this like E2B?**
128
+ E2B is a sandbox provider. Frontier Scout is the adoption decision layer: it can
129
+ decide what deserves a sandbox, run the right probes, and turn the evidence into
130
+ a verdict. Local/Docker/E2B-style sandbox backends belong in the v0.2 toolbench
131
+ roadmap.
132
+
133
+ **Can it prove a tool is safe?**
134
+ No. It reduces blast radius and records evidence. Unknown code is still unknown
135
+ code; the product helps you choose the smallest safe next step.
136
+
137
+ **Will it leak secrets?**
138
+ Trials use temporary workspaces, stripped subprocess environments, timeouts,
139
+ output caps, secret-pattern checks, and explicit approval gates for risky
140
+ actions.
141
+
142
+ ## Architecture
143
+
144
+ ```mermaid
145
+ flowchart LR
146
+ Ticket["Incident ticket"] --> DCG["Typed DCG runtime"]
147
+ Corpus["Seed corpus"] --> Memory["Memory + graph"]
148
+ Memory --> Authz["ReBAC check"]
149
+ Authz --> Retrieval["Hybrid retrieval"]
150
+ Retrieval --> Context["Context compiler"]
151
+ Context --> Gateway["Model gateway"]
152
+ Gateway --> DCG
153
+ DCG --> Approval["Approval interrupt"]
154
+ DCG --> Audit["Trace + audit + eval"]
155
+ Sources["Public sources"] --> Scout["Scout funnel"]
156
+ Scout --> Score["Sonnet score pass"]
157
+ Score --> Verdict["Sonnet verdict pass"]
158
+ Verdict --> Judge["Optional Opus judge"]
159
+ Judge --> Validators["Deterministic validators"]
160
+ Validators --> SQLite["Local SQLite"]
161
+ SQLite --> CLI["CLI"]
162
+ SQLite --> Report["Static report"]
163
+ SQLite --> MCP["Future MCP/plugin surface"]
164
+ CLI --> Lab["Hermetic lab"]
165
+ ```
166
+
167
+ The current engine lives in [`scripts/`](scripts/). The installable CLI lives
168
+ in [`frontier_scout/`](frontier_scout/). `scripts/` remains importable so the
169
+ existing Scout and lab logic can be packaged without a risky rewrite.
170
+
171
+ ## Quickstart
172
+
173
+ Install from a checkout:
174
+
175
+ ```bash
176
+ python3 -m venv .venv
177
+ source .venv/bin/activate
178
+ pip install -e ".[dev]"
179
+ frontier-scout --help
180
+ ```
181
+
182
+ Initialize local state and detect stack signals:
183
+
184
+ ```bash
185
+ frontier-scout init --repo .
186
+ ```
187
+
188
+ Run a free seeded scan:
189
+
190
+ ```bash
191
+ frontier-scout scan --dry-run --repo .
192
+ frontier-scout report --input demo/verdicts.json --output demo/briefing.html
193
+ ```
194
+
195
+ Run a live scan:
196
+
197
+ ```bash
198
+ export ANTHROPIC_API_KEY=...
199
+ frontier-scout scan --repo .
200
+ frontier-scout report
201
+ ```
202
+
203
+ Try-before-trust a single tool before granting it project permissions:
204
+
205
+ ```bash
206
+ frontier-scout evaluate https://github.com/modelcontextprotocol/servers
207
+ frontier-scout trial browser-use/browser-use --url https://github.com/browser-use/browser-use --dry-run
208
+ frontier-scout guard --repo .
209
+ ```
210
+
211
+ `evaluate` records source-backed local evidence and a permission manifest.
212
+ `trial --dry-run` writes an adoption receipt without installing anything.
213
+ `guard` checks the local evidence ledger for risky tools that still need a
214
+ stored trial receipt.
215
+
216
+ Inspect living packs and repo-relevant dependency upgrades:
217
+
218
+ ```bash
219
+ frontier-scout packs list
220
+ frontier-scout packs show mcp
221
+ frontier-scout profile --repo . --dependencies
222
+ frontier-scout deps scan --repo .
223
+ ```
224
+
225
+ `packs` shows the living radar seeds and candidates. `deps scan` looks for
226
+ meaningful security, hardening, and breaking upgrades that deserve a safe trial,
227
+ without modifying manifests or lockfiles.
228
+
229
+ After the first PyPI publish, the expected package install paths are:
230
+
231
+ ```bash
232
+ pipx install frontier-scout
233
+ uvx frontier-scout demo
234
+ ```
235
+
236
+ Until then, the checkout install above is the supported path. An
237
+ `npx frontier-scout` wrapper is intentionally a later distribution layer, not
238
+ the core implementation.
239
+
240
+ ## Safety model
241
+
242
+ Frontier Scout handles untrusted public content and can optionally execute
243
+ untrusted packages in the lab, so the safety rails are load-bearing:
244
+
245
+ - Source text is treated as untrusted data, not instructions.
246
+ - Tool names are checked against the source pool to reduce hallucinated verdicts.
247
+ - Source URLs must pass a domain allowlist.
248
+ - Incident and breach headlines are blocked from becoming tool recommendations.
249
+ - ADOPT requires enough readiness evidence or gets demoted.
250
+ - Adoption Firewall fails closed on unknown MCP/tool capability surfaces.
251
+ - `guard` never modifies the repo; it only reads local evidence and policy.
252
+ - Lab subprocesses receive a stripped environment, wall-clock timeout, size caps, and generated-script secret scanning.
253
+
254
+ See [SECURITY.md](SECURITY.md) for the threat model.
255
+
256
+ ## Cost
257
+
258
+ The offline demo is free. A normal live weekly scan is designed to stay cheap:
259
+
260
+ | Component | Typical cost |
261
+ |---|---:|
262
+ | Sonnet score pass | ~$0.15 |
263
+ | Sonnet verdict pass | ~$0.04 |
264
+ | Optional Opus judge | ~$0.12 |
265
+ | **Weekly scan** | **~$0.30** |
266
+
267
+ Set `JUDGE_ENABLED=false` to skip the Opus judge when you want the cheapest
268
+ possible run.
269
+
270
+ ## Development
271
+
272
+ ```bash
273
+ make setup
274
+ make demo
275
+ make test
276
+ make eval
277
+ make audit
278
+ python -m compileall scripts outputs tests frontier_scout
279
+ PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 python -m pytest -q
280
+ frontier-scout demo
281
+ frontier-scout scan --dry-run
282
+ ```
283
+
284
+ CI runs compile checks, non-live tests, and a tracked-file secret scan.
285
+
286
+ ## Release
287
+
288
+ For tagged releases:
289
+
290
+ 1. Bump `project.version` in `pyproject.toml`.
291
+ 2. Update the matching section in `CHANGELOG.md`.
292
+ 3. Merge to `main`.
293
+ 4. Push annotated tag `vX.Y.Z`.
294
+
295
+ Tag pushes trigger `.github/workflows/release.yml`, which builds distributions,
296
+ publishes to PyPI via trusted publishing, and creates a GitHub Release from
297
+ the matching changelog section.
298
+
299
+ ## Roadmap
300
+
301
+ See [ROADMAP.md](ROADMAP.md). The short version:
302
+
303
+ - **v0.2** — current release: local radar, Adoption Firewall, Incident Change Scout, Living Scout Packs, dependency intelligence, SQLite, CI, Docker demo, and public docs.
304
+ - **v0.3** — MCP/plugin surfaces, stronger sandbox/toolbench backends, and optional output integrations on top of the same local evidence store.
305
+
306
+ ## Contributing
307
+
308
+ Read [CONTRIBUTING.md](CONTRIBUTING.md). The fastest useful PRs improve the
309
+ CLI/report path, validator coverage, source quality, or lab isolation.
310
+ Please also read the [Code of Conduct](CODE_OF_CONDUCT.md).
311
+
312
+ ## License
313
+
314
+ [MIT](LICENSE)
@@ -0,0 +1,3 @@
1
+ """Frontier Scout package."""
2
+
3
+ __version__ = "0.2.0"