clearfront 2.7.0__tar.gz → 2.7.1__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 (100) hide show
  1. {clearfront-2.7.0 → clearfront-2.7.1}/PKG-INFO +5 -5
  2. {clearfront-2.7.0 → clearfront-2.7.1}/README.md +2 -2
  3. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/mcp_server.py +6 -3
  4. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/web/index.html +67 -32
  5. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront.egg-info/PKG-INFO +5 -5
  6. {clearfront-2.7.0 → clearfront-2.7.1}/pyproject.toml +5 -4
  7. {clearfront-2.7.0 → clearfront-2.7.1}/LICENSE +0 -0
  8. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/__init__.py +0 -0
  9. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/agent.py +0 -0
  10. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/brightdata.py +0 -0
  11. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/cli.py +0 -0
  12. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/correlation.py +0 -0
  13. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/corroboration.py +0 -0
  14. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/effort.py +0 -0
  15. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/exceptions.py +0 -0
  16. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/extractors.py +0 -0
  17. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/json_output.py +0 -0
  18. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/multi_target.py +0 -0
  19. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/pdf_report.py +0 -0
  20. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/pivot.py +0 -0
  21. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/prompts.py +0 -0
  22. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/regexes.py +0 -0
  23. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/repl.py +0 -0
  24. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/serp.py +0 -0
  25. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/session_history.py +0 -0
  26. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/sponsors.py +0 -0
  27. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tool_cache.py +0 -0
  28. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/__init__.py +0 -0
  29. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/data/NOTICE +0 -0
  30. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/data/wmn-data-unique.json +0 -0
  31. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/exceptions.py +0 -0
  32. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/generate_dorks.py +0 -0
  33. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/scrape_url.py +0 -0
  34. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_abuseipdb.py +0 -0
  35. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_breach.py +0 -0
  36. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_censys.py +0 -0
  37. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_crt.py +0 -0
  38. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_crypto.py +0 -0
  39. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_dns.py +0 -0
  40. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_domain.py +0 -0
  41. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_dorks_live.py +0 -0
  42. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_email.py +0 -0
  43. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_emailrep.py +0 -0
  44. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_exif.py +0 -0
  45. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_exposure.py +0 -0
  46. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_footprint.py +0 -0
  47. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_github.py +0 -0
  48. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_gravatar.py +0 -0
  49. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_greynoise.py +0 -0
  50. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_harvester.py +0 -0
  51. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_hudsonrock.py +0 -0
  52. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_ip.py +0 -0
  53. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_ip2location.py +0 -0
  54. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_maigret.py +0 -0
  55. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_paste.py +0 -0
  56. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_phone.py +0 -0
  57. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_shodan.py +0 -0
  58. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_username.py +0 -0
  59. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_virustotal.py +0 -0
  60. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_wayback.py +0 -0
  61. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/search_whois.py +0 -0
  62. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/tools/whatsmyname.py +0 -0
  63. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/utils.py +0 -0
  64. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront/web_server.py +0 -0
  65. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront.egg-info/SOURCES.txt +0 -0
  66. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront.egg-info/dependency_links.txt +0 -0
  67. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront.egg-info/entry_points.txt +0 -0
  68. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront.egg-info/requires.txt +0 -0
  69. {clearfront-2.7.0 → clearfront-2.7.1}/clearfront.egg-info/top_level.txt +0 -0
  70. {clearfront-2.7.0 → clearfront-2.7.1}/setup.cfg +0 -0
  71. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_authorized_use.py +0 -0
  72. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_brightdata.py +0 -0
  73. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_cli_openai.py +0 -0
  74. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_cli_output.py +0 -0
  75. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_corroboration.py +0 -0
  76. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_crt.py +0 -0
  77. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_dns.py +0 -0
  78. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_effort.py +0 -0
  79. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_exif.py +0 -0
  80. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_footprint.py +0 -0
  81. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_github_code_search.py +0 -0
  82. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_graph_export.py +0 -0
  83. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_hudsonrock.py +0 -0
  84. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_json_export.py +0 -0
  85. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_mcp_authorized_use.py +0 -0
  86. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_openai_agent.py +0 -0
  87. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_pivot_freetier.py +0 -0
  88. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_regexes.py +0 -0
  89. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_repl_first_run.py +0 -0
  90. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_report_export.py +0 -0
  91. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_security.py +0 -0
  92. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_serp.py +0 -0
  93. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_tool_cache.py +0 -0
  94. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_tool_parity.py +0 -0
  95. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_tools.py +0 -0
  96. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_v2140.py +0 -0
  97. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_v240.py +0 -0
  98. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_wayback_greynoise.py +0 -0
  99. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_web_server.py +0 -0
  100. {clearfront-2.7.0 → clearfront-2.7.1}/tests/test_web_server_openai.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clearfront
3
- Version: 2.7.0
4
- Summary: AI-powered OSINT agent, MCP server, and CLI. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only.
3
+ Version: 2.7.1
4
+ Summary: Clearfront OSINT: AI-powered OSINT agent, MCP server, and CLI that maps your digital footprint across 3,400+ public data sources. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only.
5
5
  Author: Scott Martin Anderson
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/scottmartinanderson/clearfront
8
8
  Project-URL: Repository, https://github.com/scottmartinanderson/clearfront
9
9
  Project-URL: Bug Tracker, https://github.com/scottmartinanderson/clearfront/issues
10
- Keywords: osint,security,mcp,cli,ai,agent,anthropic,claude,investigation,recon,cybersecurity
10
+ Keywords: clearfront,clearfront-osint,osint,open-source-intelligence,digital-footprint,security,mcp,cli,ai,agent,anthropic,claude,investigation,recon,cybersecurity,privacy
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Information Technology
@@ -72,7 +72,7 @@ Dynamic: license-file
72
72
  <div align="center">
73
73
  <h1>Clearfront</h1>
74
74
  <p><strong>Open-source AI intelligence on your digital footprint.</strong></p>
75
- <p>Give Clearfront an email, username, domain, IP, or name, and its AI security analyst scans public data sources in one sweep, then returns a calibrated report and an interactive evidence graph. Check your own exposure, or investigate an authorized target. It runs locally with your own API keys and sends nothing to us.</p>
75
+ <p>Clearfront, also known as Clearfront OSINT, is a free and open-source OSINT agent. Give it an email, username, domain, IP, or name, and its AI security analyst scans 3,400+ public data sources in one sweep, then returns a calibrated report and an interactive evidence graph. Check your own exposure, or investigate an authorized target. It runs locally with your own API keys and sends nothing to us.</p>
76
76
  <p>Interactive REPL · CLI · local web console · MCP server. Powered by Anthropic Claude, a local Ollama model, or any OpenAI-compatible endpoint.</p>
77
77
  </div>
78
78
 
@@ -226,7 +226,7 @@ clearfront web
226
226
 
227
227
  Browser-based AI chat with streaming tool output, inline result cards, and a light/dark theme toggle. Supports fully local inference via Ollama or any OpenAI-compatible endpoint (no Anthropic API key required when using a local backend).
228
228
 
229
- The console runs entirely on your machine and binds to `127.0.0.1` by default. Choose your backend and paste your own key in Settings; your keys and the targets you investigate never touch our servers. Screenshots are in [`media/screenshots/`](media/screenshots/).
229
+ The console runs entirely on your machine and binds to `127.0.0.1` by default. Choose your backend and paste your own key in Settings; your keys and the targets you investigate never touch our servers. Screenshots are in [`media/`](media/).
230
230
 
231
231
  ### MCP Server
232
232
 
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <h1>Clearfront</h1>
3
3
  <p><strong>Open-source AI intelligence on your digital footprint.</strong></p>
4
- <p>Give Clearfront an email, username, domain, IP, or name, and its AI security analyst scans public data sources in one sweep, then returns a calibrated report and an interactive evidence graph. Check your own exposure, or investigate an authorized target. It runs locally with your own API keys and sends nothing to us.</p>
4
+ <p>Clearfront, also known as Clearfront OSINT, is a free and open-source OSINT agent. Give it an email, username, domain, IP, or name, and its AI security analyst scans 3,400+ public data sources in one sweep, then returns a calibrated report and an interactive evidence graph. Check your own exposure, or investigate an authorized target. It runs locally with your own API keys and sends nothing to us.</p>
5
5
  <p>Interactive REPL · CLI · local web console · MCP server. Powered by Anthropic Claude, a local Ollama model, or any OpenAI-compatible endpoint.</p>
6
6
  </div>
7
7
 
@@ -155,7 +155,7 @@ clearfront web
155
155
 
156
156
  Browser-based AI chat with streaming tool output, inline result cards, and a light/dark theme toggle. Supports fully local inference via Ollama or any OpenAI-compatible endpoint (no Anthropic API key required when using a local backend).
157
157
 
158
- The console runs entirely on your machine and binds to `127.0.0.1` by default. Choose your backend and paste your own key in Settings; your keys and the targets you investigate never touch our servers. Screenshots are in [`media/screenshots/`](media/screenshots/).
158
+ The console runs entirely on your machine and binds to `127.0.0.1` by default. Choose your backend and paste your own key in Settings; your keys and the targets you investigate never touch our servers. Screenshots are in [`media/`](media/).
159
159
 
160
160
  ### MCP Server
161
161
 
@@ -1,9 +1,12 @@
1
1
  # clearfront/mcp_server.py
2
2
  """
3
- Clearfront MCP Server, v2.7.0
3
+ Clearfront OSINT MCP Server, v2.7.1
4
4
 
5
- Exposes all 30 OSINT tool capabilities plus multi-target investigation
6
- to MCP-compliant AI clients over standard I/O. Tools include:
5
+ Clearfront (Clearfront OSINT) is an open-source AI OSINT agent that maps a
6
+ digital footprint across 3,400+ public data sources and returns a calibrated
7
+ intelligence report. This server exposes all 30 OSINT tool capabilities plus
8
+ multi-target investigation to MCP-compliant AI clients over standard I/O.
9
+ Tools include:
7
10
  search_email, search_username, search_maigret, search_breach, search_whois,
8
11
  search_ip, search_domain, generate_dorks, search_paste, search_phone,
9
12
  search_shodan, search_virustotal, search_censys, search_ip2location,
@@ -15,17 +15,20 @@
15
15
  /* Swappable mono typeface (one line to A/B): JetBrains Mono | IBM Plex Mono */
16
16
  :root { --font-mono: 'JetBrains Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace; }
17
17
 
18
- /* DARK, warm near-black institutional console (Dossier tint, OKLCH hue 85
19
- at 45% chroma so raised surfaces never read brown; same undertone family
20
- as the light paper theme). Greyscale chrome only. */
18
+ /* DARK, pure-black institutional console in Vercel-neutral greys (Geist
19
+ dark scale: text = gray-1000/900/800, border = gray-400). --bg and
20
+ --surface are BOTH true #000 on purpose: any two adjacent near-blacks
21
+ band visibly in compressed or screen-recorded footage, so panels are
22
+ delineated by borders alone — do not reintroduce surface elevation
23
+ here. The warm Dossier undertone lives in the light theme only. */
21
24
  :root {
22
- --bg: #0c0b09;
23
- --surface: #141312;
24
- --surface-dark: #1d1c1a;
25
- --border: #292826;
26
- --text-primary: #e8e7e4;
27
- --text-secondary: #908f8c;
28
- --text-muted: #7d7b79; /* raised to clear WCAG AA (~4.9:1 on --bg) */
25
+ --bg: #000000;
26
+ --surface: #000000;
27
+ --surface-dark: #0a0a0a;
28
+ --border: #2e2e2e;
29
+ --text-primary: #ededed;
30
+ --text-secondary: #a1a1a1;
31
+ --text-muted: #7d7d7d; /* clears WCAG AA (~5.2:1 on black) */
29
32
  /* semantic accents, used ONLY to encode data severity, never for chrome */
30
33
  --accent: #3fb950; /* OK / clean / confirmed (green) */
31
34
  --yellow: #d29922; /* WATCH / caution (amber) */
@@ -68,7 +71,7 @@
68
71
  /* Hover variants */
69
72
  .hover\:text-primary:hover { color: var(--text-primary); }
70
73
  .hover\:text-secondary:hover { color: var(--text-secondary); }
71
- .hover\:bg-surface:hover { background-color: var(--surface); }
74
+ .hover\:bg-surface:hover { background-color: color-mix(in srgb, var(--text-primary) 6%, transparent); } /* surface == bg in dark; a flat fill would be invisible */
72
75
  .hover\:bg-border-50:hover { background-color: color-mix(in srgb, var(--border) 50%, transparent); }
73
76
  .hover\:bg-accent-80:hover { background-color: color-mix(in srgb, var(--text-primary) 78%, var(--bg)); }
74
77
  .hover\:border-accent-40:hover { border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
@@ -147,18 +150,50 @@
147
150
  textarea { font-family:inherit; }
148
151
  textarea:focus { outline:none; }
149
152
 
150
- /* hero wordmark, fluid ANSI on desktop (scales to its column, never clips),
151
- compact legible lockup below the sm breakpoint. */
153
+ /* hero wordmark, fluid ANSI down to 448px viewports (scales to its column,
154
+ never clips; the low cutoff keeps the art alive in narrow 9:16 capture
155
+ windows), compact legible lockup below that. Display is swapped here in
156
+ plain CSS: the Play CDN does not compile arbitrary breakpoint variants
157
+ like min-[28rem]:block, so utility classes cannot express this cutoff. */
152
158
  .hero { container-type: inline-size; }
153
159
  .hero-ascii {
160
+ display: block;
154
161
  font-size: clamp(6px, 1.7cqi, 11px);
155
162
  line-height: 1.4; letter-spacing: 0; white-space: pre;
156
163
  transform: skewX(-9deg); transform-origin: bottom left;
157
164
  }
158
165
  .hero-lockup {
166
+ display: none;
159
167
  font-size: clamp(26px, 12vw, 38px); font-weight: 700; letter-spacing: 0.14em;
160
168
  line-height: 1.1; transform: skewX(-9deg); transform-origin: bottom left;
161
169
  }
170
+ .hero-lockup-sub { display: none; }
171
+ @media (max-width: 447.98px) {
172
+ .hero-ascii { display: none; }
173
+ .hero-lockup { display: block; }
174
+ .hero-lockup-sub { display: flex; }
175
+ }
176
+
177
+ /* narrow-header tiers below the sm breakpoint: keep the effort chip (and,
178
+ once it fits, the model chip) alive in 9:16 capture windows. Same plain
179
+ CSS + 448px floor as the hero above; between 448px and sm the version
180
+ text and the leak-test icon yield the room. */
181
+ .hdr-effort, .hdr-divider, .hdr-divider-2, .hdr-model { display: none; }
182
+ .hdr-wifi { display: flex; } /* display owned here, not by the .flex utility, so the band rule below can hide it */
183
+ @media (min-width: 448px) {
184
+ .hdr-effort, .hdr-divider { display: block; }
185
+ }
186
+ @media (min-width: 520px) {
187
+ .hdr-model { display: flex; }
188
+ .hdr-divider-2 { display: block; }
189
+ }
190
+ @media (min-width: 448px) and (max-width: 639.98px) {
191
+ .hdr-version, .hdr-wifi { display: none; }
192
+ }
193
+ /* home-list row descriptions: same idea, 480px floor (the longest
194
+ title + description pair fits the column from there up). */
195
+ .row-desc { display: none; }
196
+ @media (min-width: 480px) { .row-desc { display: block; } }
162
197
 
163
198
  /* keyboard focus, visible ring in both themes (overrides focus:outline-none) */
164
199
  :focus-visible { outline: 2px solid var(--text-primary); outline-offset: 2px; border-radius: 3px; }
@@ -507,7 +542,7 @@
507
542
  <!-- wordmark: lowercase IBM Plex Mono regular, version as muted baseline metadata -->
508
543
  <div class="flex items-baseline flex-none gap-2">
509
544
  <span class="text-sm" style="font-family:'IBM Plex Mono',ui-monospace,monospace;font-weight:400;">clearfront</span>
510
- <span class="text-muted" style="font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;letter-spacing:0.02em;font-variant-numeric:tabular-nums;">v<span x-text="version"></span></span>
545
+ <span class="hdr-version text-muted" style="font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:11px;letter-spacing:0.02em;font-variant-numeric:tabular-nums;">v<span x-text="version"></span></span>
511
546
  </div>
512
547
 
513
548
  <div class="flex-1"></div>
@@ -515,7 +550,7 @@
515
550
  <!-- right: backend status readout + controls -->
516
551
  <div class="flex items-center gap-1.5 flex-none">
517
552
  <!-- effort selector: no-noun chip, opens a level menu whose footer explains the cost -->
518
- <div class="relative hidden sm:block" @keydown.escape.window="depthOpen = false">
553
+ <div class="hdr-effort relative" @keydown.escape.window="depthOpen = false">
519
554
  <button @click="depthOpen = !depthOpen"
520
555
  :aria-expanded="depthOpen"
521
556
  aria-haspopup="true"
@@ -549,11 +584,11 @@
549
584
  style="font-size:12px;line-height:1.42;" x-text="depthExplained().desc"></div>
550
585
  </div>
551
586
  </div>
552
- <div class="hidden sm:block w-px h-5 bg-border mx-0.5"></div>
587
+ <div class="hdr-divider w-px h-5 bg-border mx-0.5"></div>
553
588
  <!-- backend status readout -->
554
589
  <button @click="showSettings = true"
555
590
  :title="aiBackend === 'none' ? 'No AI backend configured, click to set up' : 'AI backend, click to change'"
556
- class="hidden sm:flex items-center gap-2 font-mono text-xs px-2.5 py-1 rounded border border-app text-secondary bg-transparent hover:text-primary hover:border-strong transition-colors cursor-pointer whitespace-nowrap">
591
+ class="hdr-model items-center gap-2 font-mono text-xs px-2.5 py-1 rounded border border-app text-secondary bg-transparent hover:text-primary hover:border-strong transition-colors cursor-pointer whitespace-nowrap">
557
592
  <span class="w-1.5 h-1.5 rounded-full flex-none"
558
593
  :style="aiBackend === 'none' ? 'background-color:var(--red)' : 'background-color:var(--accent)'"></span>
559
594
  <span x-show="aiBackend !== 'none' && settings.chatModel === 'claude'" x-text="claudeModelLabel"></span>
@@ -561,11 +596,11 @@
561
596
  <span x-show="aiBackend !== 'none' && settings.chatModel === 'openai'">OpenAI <span x-text="settings.openaiModel || 'model'"></span></span>
562
597
  <span x-show="aiBackend === 'none'">Not configured</span>
563
598
  </button>
564
- <div class="hidden sm:block w-px h-5 bg-border mx-0.5"></div>
599
+ <div class="hdr-divider-2 w-px h-5 bg-border mx-0.5"></div>
565
600
  <button @click="openLeakTest()"
566
601
  aria-label="IP leak test"
567
602
  title="Browser IP leak test (WebRTC / IPv6 / DNS)"
568
- class="w-8 h-8 flex items-center justify-center rounded-md text-muted hover:text-primary hover:bg-surface transition-colors">
603
+ class="hdr-wifi w-8 h-8 items-center justify-center rounded-md text-muted hover:text-primary hover:bg-surface transition-colors">
569
604
  <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
570
605
  <path d="M5 12.55a11 11 0 0 1 14.08 0"/>
571
606
  <path d="M1.42 9a16 16 0 0 1 21.16 0"/>
@@ -625,7 +660,7 @@
625
660
  <div x-show="messages.length === 0"
626
661
  class="flex-1 flex flex-col justify-center py-16">
627
662
  <div class="hero mb-8 cf-hidden" :class="revealHero && (bootAnim ? 'cf-hero-in' : 'cf-shown')">
628
- <!--HERO_START--><pre class="hero-ascii font-mono text-secondary select-none hidden sm:block" aria-label="CLEARFRONT"> ██████╗██╗ ███████╗ █████╗ ██████╗ ███████╗██████╗ ██████╗ ███╗ ██╗████████╗
663
+ <!--HERO_START--><pre class="hero-ascii font-mono text-primary select-none" aria-label="CLEARFRONT"> ██████╗██╗ ███████╗ █████╗ ██████╗ ███████╗██████╗ ██████╗ ███╗ ██╗████████╗
629
664
  ██╔════╝██║ ██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗██╔═══██╗████╗ ██║╚══██╔══╝
630
665
  ██║ ██║ █████╗ ███████║██████╔╝█████╗ ██████╔╝██║ ██║██╔██╗ ██║ ██║
631
666
  ██║ ██║ ██╔══╝ ██╔══██║██╔══██╗██╔══╝ ██╔══██╗██║ ██║██║╚██╗██║ ██║
@@ -634,8 +669,8 @@
634
669
 
635
670
  ────────────────────────────────────────────────────────────────────────────────────
636
671
  OPEN-SOURCE INTELLIGENCE AUTHORIZED USE · v<span x-text="version"></span></pre><!--HERO_END-->
637
- <div class="hero-lockup font-mono text-primary select-none block sm:hidden" aria-label="CLEARFRONT">CLEARFRONT</div>
638
- <div class="border-t border-app mt-4 pt-2 flex items-center justify-between font-mono text-secondary gap-3 sm:hidden" style="font-size:10px;letter-spacing:0.05em;">
672
+ <div class="hero-lockup font-mono text-primary select-none" aria-label="CLEARFRONT">CLEARFRONT</div>
673
+ <div class="hero-lockup-sub border-t border-app mt-4 pt-2 items-center justify-between font-mono text-secondary gap-3" style="font-size:10px;letter-spacing:0.05em;">
639
674
  <span>OPEN-SOURCE INTELLIGENCE</span>
640
675
  <span class="text-muted whitespace-nowrap">AUTHORIZED USE</span>
641
676
  </div>
@@ -654,7 +689,7 @@ OPEN-SOURCE INTELLIGENCE AUTHORIZED USE · v
654
689
  <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="flex-none opacity-60" x-html="s.svgIcon"></svg>
655
690
  <span class="font-mono truncate" style="font-size:13px;" x-text="s.title"></span>
656
691
  <span class="ml-auto flex items-center gap-2.5 flex-none">
657
- <span class="hidden sm:block font-mono text-muted" style="font-size:11px;" x-text="s.desc"></span>
692
+ <span class="row-desc font-mono text-muted" style="font-size:11px;" x-text="s.desc"></span>
658
693
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="flex-none opacity-30"><polyline points="9 18 15 12 9 6"/></svg>
659
694
  </span>
660
695
  </button>
@@ -674,7 +709,7 @@ OPEN-SOURCE INTELLIGENCE AUTHORIZED USE · v
674
709
  <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="flex-none opacity-60" x-html="s.svgIcon"></svg>
675
710
  <span class="font-mono truncate" style="font-size:13px;" x-text="s.title"></span>
676
711
  <span class="ml-auto flex items-center gap-2.5 flex-none">
677
- <span class="hidden sm:block font-mono text-muted" style="font-size:11px;" x-text="s.desc"></span>
712
+ <span class="row-desc font-mono text-muted" style="font-size:11px;" x-text="s.desc"></span>
678
713
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="flex-none opacity-30"><polyline points="9 18 15 12 9 6"/></svg>
679
714
  </span>
680
715
  </button>
@@ -1534,14 +1569,14 @@ document.addEventListener('alpine:init', () => {
1534
1569
  const light = document.documentElement.classList.contains('light');
1535
1570
  return {
1536
1571
  light,
1537
- bg: v('--bg', light ? '#f5f4f1' : '#0c0b09'),
1538
- node: v('--text-muted', light ? '#696d75' : '#7d7b79'), // uniform node colour at rest
1539
- subj: v('--text-secondary', light ? '#5f636b' : '#908f8c'),// subject: a touch brighter
1540
- hi: v('--text-primary', light ? '#1a1b1e' : '#e8e7e4'), // highlight "accent" (mono pop)
1541
- part: v('--text-primary', light ? '#1a1b1e' : '#e8e7e4'), // travelling particle colour
1542
- link: light ? 'rgba(72,76,84,0.42)' : 'rgba(150,145,135,0.34)', // resting links: a touch darker (light) / brighter (dark) so they read on the mono bg
1543
- linkhi: v('--text-primary', light ? '#1a1b1e' : '#e8e7e4'),
1544
- txt: light ? 'rgba(60,64,72,0.85)' : 'rgba(211,209,203,0.82)',
1572
+ bg: v('--bg', light ? '#f5f4f1' : '#000000'),
1573
+ node: v('--text-muted', light ? '#696d75' : '#7d7d7d'), // uniform node colour at rest
1574
+ subj: v('--text-secondary', light ? '#5f636b' : '#a1a1a1'),// subject: a touch brighter
1575
+ hi: v('--text-primary', light ? '#1a1b1e' : '#ededed'), // highlight "accent" (mono pop)
1576
+ part: v('--text-primary', light ? '#1a1b1e' : '#ededed'), // travelling particle colour
1577
+ link: light ? 'rgba(72,76,84,0.42)' : 'rgba(143,143,143,0.34)', // resting links: a touch darker (light) / brighter (dark) so they read on the mono bg
1578
+ linkhi: v('--text-primary', light ? '#1a1b1e' : '#ededed'),
1579
+ txt: light ? 'rgba(60,64,72,0.85)' : 'rgba(210,210,210,0.82)',
1545
1580
  };
1546
1581
  },
1547
1582
 
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clearfront
3
- Version: 2.7.0
4
- Summary: AI-powered OSINT agent, MCP server, and CLI. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only.
3
+ Version: 2.7.1
4
+ Summary: Clearfront OSINT: AI-powered OSINT agent, MCP server, and CLI that maps your digital footprint across 3,400+ public data sources. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only.
5
5
  Author: Scott Martin Anderson
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/scottmartinanderson/clearfront
8
8
  Project-URL: Repository, https://github.com/scottmartinanderson/clearfront
9
9
  Project-URL: Bug Tracker, https://github.com/scottmartinanderson/clearfront/issues
10
- Keywords: osint,security,mcp,cli,ai,agent,anthropic,claude,investigation,recon,cybersecurity
10
+ Keywords: clearfront,clearfront-osint,osint,open-source-intelligence,digital-footprint,security,mcp,cli,ai,agent,anthropic,claude,investigation,recon,cybersecurity,privacy
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Information Technology
@@ -72,7 +72,7 @@ Dynamic: license-file
72
72
  <div align="center">
73
73
  <h1>Clearfront</h1>
74
74
  <p><strong>Open-source AI intelligence on your digital footprint.</strong></p>
75
- <p>Give Clearfront an email, username, domain, IP, or name, and its AI security analyst scans public data sources in one sweep, then returns a calibrated report and an interactive evidence graph. Check your own exposure, or investigate an authorized target. It runs locally with your own API keys and sends nothing to us.</p>
75
+ <p>Clearfront, also known as Clearfront OSINT, is a free and open-source OSINT agent. Give it an email, username, domain, IP, or name, and its AI security analyst scans 3,400+ public data sources in one sweep, then returns a calibrated report and an interactive evidence graph. Check your own exposure, or investigate an authorized target. It runs locally with your own API keys and sends nothing to us.</p>
76
76
  <p>Interactive REPL · CLI · local web console · MCP server. Powered by Anthropic Claude, a local Ollama model, or any OpenAI-compatible endpoint.</p>
77
77
  </div>
78
78
 
@@ -226,7 +226,7 @@ clearfront web
226
226
 
227
227
  Browser-based AI chat with streaming tool output, inline result cards, and a light/dark theme toggle. Supports fully local inference via Ollama or any OpenAI-compatible endpoint (no Anthropic API key required when using a local backend).
228
228
 
229
- The console runs entirely on your machine and binds to `127.0.0.1` by default. Choose your backend and paste your own key in Settings; your keys and the targets you investigate never touch our servers. Screenshots are in [`media/screenshots/`](media/screenshots/).
229
+ The console runs entirely on your machine and binds to `127.0.0.1` by default. Choose your backend and paste your own key in Settings; your keys and the targets you investigate never touch our servers. Screenshots are in [`media/`](media/).
230
230
 
231
231
  ### MCP Server
232
232
 
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "clearfront"
7
- version = "2.7.0"
8
- description = "AI-powered OSINT agent, MCP server, and CLI. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only."
7
+ version = "2.7.1"
8
+ description = "Clearfront OSINT: AI-powered OSINT agent, MCP server, and CLI that maps your digital footprint across 3,400+ public data sources. Interactive REPL + 30 tools. Anthropic Claude or local Ollama. For authorized security research use only."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  license = "MIT"
@@ -13,8 +13,9 @@ authors = [
13
13
  {name = "Scott Martin Anderson"}
14
14
  ]
15
15
  keywords = [
16
- "osint", "security", "mcp", "cli", "ai", "agent",
17
- "anthropic", "claude", "investigation", "recon", "cybersecurity"
16
+ "clearfront", "clearfront-osint", "osint", "open-source-intelligence",
17
+ "digital-footprint", "security", "mcp", "cli", "ai", "agent",
18
+ "anthropic", "claude", "investigation", "recon", "cybersecurity", "privacy"
18
19
  ]
19
20
  classifiers = [
20
21
  "Development Status :: 5 - Production/Stable",
File without changes
File without changes
File without changes
File without changes
File without changes