Not in the top 1,000 by GitHub stars
geekjourneyx/sondar
Turn AI ecosystem changes into evidence-backed, closed-loop decisions for AI builders — Go CLI, SQLite, signal intelligence.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
033ea3b1ad15 → 033ea3b1ad15
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 033ea3b1ad15
No earlier version was observed for comparison.
skills/finding-ai-builders/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
033ea3b1ad15 → 033ea3b1ad15
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 033ea3b1ad15
No earlier version was observed for comparison.
Verified commit 033ea3b1ad158466c33c18f60485191cc7c278f9
git clone --filter=blob:none --no-checkout https://github.com/geekjourneyx/sondar.git .hotskills/geekjourneyx-sondar && git -C .hotskills/geekjourneyx-sondar checkout --detach 033ea3b1ad158466c33c18f60485191cc7c278f9
# Copy each selected skill directory from .hotskills/geekjourneyx-sondar into .agents/skills/<skill-name>/Heat
0.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- sondar
/ - finding-ai-builders
skills/finding-ai-builders
How it works
sondar
When your agent uses it
Use whenever the user asks to monitor AI builder signals, GitHub AI projects, model/app launch opportunities, hot keywords, PMF signals, commercial trend detection, or daily AI radar workflows. Sondar converts early signals into STRIKE/WATCH/IGNORE/KILL decisions with evidence, owner, deadline, metric, and commercial closure; use it instead of producing generic trend summaries.
What it loads into context
Frontmatter
84 tokensAlways available to the agent
SKILL.md
2,479 tokensWhen the skill is activated
Reference documents
47,954 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Purpose
- Trigger Contexts
- Operating Model
- Evidence Sources
- Scoring
- Required Output Contract
- Human Delivery Contract
- Decision Rules
- 🔴 CHECKPOINT · Before STRIKE Execution
- Daily Workflow
- Weekly Workflow
- Red-Team Safeguards
- Blacklist
- Reference Loading
Scripts executed separately
Makefilecmd/sondar/main.gointernal/sondar/aihot.gointernal/sondar/aihot_test.gointernal/sondar/command.gointernal/sondar/command_test.gointernal/sondar/config.gointernal/sondar/explanation.gointernal/sondar/explanation_test.gointernal/sondar/hnrss.gointernal/sondar/hnrss_test.gointernal/sondar/ishell.gointernal/sondar/ishell_test.gointernal/sondar/report.gointernal/sondar/report_test.gointernal/sondar/repository_contract_test.gointernal/sondar/runner.gointernal/sondar/runner_test.gointernal/sondar/schema_test.gointernal/sondar/source_items.gointernal/sondar/source_items_test.gointernal/sondar/sources.gointernal/sondar/state.gointernal/sondar/state_test.gointernal/sondar/types.gointernal/sondar/util.goscripts/ai-builders-daily.shscripts/build-release.sh
Files
.github/workflows/release.ymlasset3,229 bytes.gitignoreasset397 bytesAGENTS.mddoc1,453 bytesCHANGELOG.mddoc945 bytesLICENSEasset34,523 bytesMakefileruns1,535 bytesREADME.mddoc4,610 bytesSKILL.mdcore10,558 bytesSKILL.mdcore10,558 bytesSKILL.mdcore10,558 bytesSKILL.mdcore10,558 bytesassets/readme/hero.svgasset4,998 bytescmd/sondar/main.goruns134 bytesconfig/ai-builders.watchlist.ymlasset15,329 bytesconfig/watchlist.example.ymlasset8,938 bytesdocs/ai-builder-watchlist.mddoc8,360 bytesdocs/sop-buyer-evidence.mddoc3,781 bytesdocs/sop.mddoc11,142 bytesdocs/source-adapters.mddoc4,037 bytesdocs/superpowers/plans/2026-07-24-ishell-source.mddoc54,468 bytesdocs/superpowers/plans/2026-07-24-readme-noise-reduction.mddoc8,515 bytesdocs/superpowers/plans/2026-07-24-readme-redesign.mddoc21,868 bytesdocs/superpowers/plans/2026-07-26-human-evidence-chain-output.mddoc13,077 bytesdocs/superpowers/specs/2026-07-24-ishell-source-design.mddoc14,214 bytesdocs/superpowers/specs/2026-07-24-readme-noise-reduction-design.mddoc5,603 bytesdocs/superpowers/specs/2026-07-24-readme-redesign-design.mddoc9,117 bytesdocs/superpowers/specs/2026-07-26-human-evidence-chain-output-design.mddoc8,537 bytesevals/evals.jsonasset1,527 bytesgo.modasset159 bytesgo.sumasset690 bytesinternal/sondar/aihot.goruns5,307 bytesinternal/sondar/aihot_test.goruns4,598 bytesinternal/sondar/command.goruns8,725 bytesinternal/sondar/command_test.goruns4,647 bytesinternal/sondar/config.goruns3,945 bytesinternal/sondar/explanation.goruns12,375 bytesinternal/sondar/explanation_test.goruns7,361 bytesinternal/sondar/hnrss.goruns6,581 bytesinternal/sondar/hnrss_test.goruns5,505 bytesinternal/sondar/ishell.goruns6,789 bytesinternal/sondar/ishell_test.goruns3,979 bytesinternal/sondar/report.goruns14,612 bytesinternal/sondar/report_test.goruns8,510 bytesinternal/sondar/repository_contract_test.goruns9,577 bytesinternal/sondar/runner.goruns55,787 bytesinternal/sondar/runner_test.goruns80,318 bytesinternal/sondar/schema.sqlasset6,745 bytesinternal/sondar/schema_test.goruns2,275 bytesinternal/sondar/source_items.goruns901 bytesinternal/sondar/source_items_test.goruns7,565 bytesinternal/sondar/sources.goruns11,108 bytesinternal/sondar/state.goruns27,916 bytesinternal/sondar/state_test.goruns20,549 bytesinternal/sondar/types.goruns9,519 bytesinternal/sondar/util.goruns1,292 bytesreferences/examples.mddoc5,952 bytesreferences/scoring.mddoc2,599 bytesschemas/signal.schema.jsonasset3,658 bytesschemas/state.schema.sqlasset6,745 bytesscripts/ai-builders-daily.shruns883 bytesscripts/build-release.shruns1,075 bytestemplates/sondar-action-brief.mddoc730 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubfinding-ai-builders
When your agent uses it
Use when the user asks to find true AI builders like a seed person, discover who to follow, monitor what builders are shipping, expand an AI builder watchlist, or separate builder signals from influencer noise.
What it loads into context
Frontmatter
50 tokensAlways available to the agent
SKILL.md
1,245 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Overview
- Inputs
- GitHub CLI Preflight
- Workflow
- Evidence Checklist
- Output Contract
- Quality Gates
- Common Mistakes
- Example
Files
SKILL.mdcore5,269 bytesSKILL.mdcore5,269 bytesSKILL.mdcore5,269 bytesSKILL.mdcore5,269 bytesevals/evals.jsonasset1,111 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- sondar
- finding-ai-builders
Repository facts
- License
- AGPL-3.0
- Created
- Jul 24, 2026
- Last pushed
- Aug 25, 2026
- Forks
- 1
- Open issues
- 0
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 6 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/finding-ai-builders/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/finding-ai-builders/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/finding-ai-builders/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 4 dangerous shell commandsin 3 files: scripts/build-release.sh:27 Makefile:44 docs/superpowers/plans/2026-07-24-readme-redesign.md:517
- 507 network referencesin 32 files: internal/sondar/runner_test.go:27 docs/superpowers/plans/2026-07-24-ishell-source.md:160 internal/sondar/hnrss_test.go:11 and 29 more
- No hidden or obfuscated text
- No instruction overrides
- 28 executable scriptsin 28 files: Makefile:1 cmd/sondar/main.go:1 internal/sondar/aihot.go:1 and 25 more
- 1 reference to secretsin 1 file: .gitignore:14
- No requests to vote in Hot
Show all 540 signals by file
.gitignore
- Access to secretsline 14
[Credential-related source omitted]
CHANGELOG.md
- Network accessline 20
[1.0.0]: https://github.com/geekjourneyx/sondar/releases/tag/v1.0.0
LICENSE
- Network accessline 4
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> - Network accessline 645
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. - Network accessline 646
along with this program. If not, see <https://www.gnu.org/licenses/>. - Network accessline 659
if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see <https://www.gnu.org/licenses/>. - Network accessline 661
<https://www.gnu.org/licenses/>.
README.md
- Network accessline 7
<p align="center"> <a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white" alt="Go 1.26"></a> - Network accessline 8
<a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white" alt="Go 1.26"></a> - Network accessline 9
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-7D858F" alt="AGPL 3.0 License"></a> - Network accessline 120
发现问题或漏报,请提交 [GitHub Issue](https://github.com/geekjourneyx/sondar/issues)。
SKILL.md
- Network accessline 148
"signal_id": "sig-YYYYMMDD-001", "captured_at": "YYYY-MM-DDTHH:MM:SSZ", "sources": ["https://example.com/source"], - Network accessline 149
"captured_at": "YYYY-MM-DDTHH:MM:SSZ", "sources": ["https://example.com/source"], "entities": ["repo-or-company-or-model"], - Network accessline 150
"sources": ["https://example.com/source"], - Network accessline 155
{ "claim": "Specific claim supported by the source.", "source": "https://example.com/source", - Network accessline 156
"claim": "Specific claim supported by the source.", "source": "https://example.com/source", "confidence": 0.8 - Network accessline 157
"source": "https://example.com/source",
assets/readme/hero.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg"
cmd/sondar/main.go
- Executable scriptline 1
Executable file
config/ai-builders.watchlist.yml
- Network accessline 30
aihot: enabled: true base_url: https://aihot.virxact.com - Network accessline 31
enabled: true base_url: https://aihot.virxact.com user_agent: "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 32
base_url: https://aihot.virxact.com - Network accessline 33
user_agent: "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 38
hnrss: enabled: true base_url: https://hnrss.org - Network accessline 39
enabled: true base_url: https://hnrss.org user_agent: "sondar-hnrss-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 40
base_url: https://hnrss.org - Network accessline 41
user_agent: "sondar-hnrss-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 54
ishell: enabled: true base_url: https://ishell.online - Network accessline 55
enabled: true base_url: https://ishell.online user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 56
base_url: https://ishell.online - Network accessline 57
user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)"
config/watchlist.example.yml
- Network accessline 33
aihot: enabled: true base_url: https://aihot.virxact.com - Network accessline 34
enabled: true base_url: https://aihot.virxact.com user_agent: "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 35
base_url: https://aihot.virxact.com - Network accessline 36
user_agent: "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 41
hnrss: enabled: true base_url: https://hnrss.org - Network accessline 42
enabled: true base_url: https://hnrss.org user_agent: "sondar-hnrss-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 43
base_url: https://hnrss.org - Network accessline 44
user_agent: "sondar-hnrss-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 57
ishell: enabled: true base_url: https://ishell.online - Network accessline 58
enabled: true base_url: https://ishell.online user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 59
base_url: https://ishell.online - Network accessline 60
user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)"
docs/ai-builder-watchlist.md
- Network accessline 29
- agent usage and cost surfaces: [steipete/CodexBar](https://github.com/steipete/CodexBar), [steipete/tokentally](https://github.com/steipete/tokentally), [steipete/VibeMeter](https://github.com/steipete/VibeMeter) - Network accessline 30
- agent operating tools: [steipete/agent-scripts](https://github.com/steipete/agent-scripts), [steipete/oracle](https://github.com/steipete/oracle), [steipete/agent-rules](https://github.com/steipete/agent-rules) - Network accessline 31
- local/browser/MCP bridges: [steipete/macos-automator-mcp](https://github.com/steipete/macos-automator-mcp), [steipete/conduit-mcp](https://github.com/steipete/conduit-mcp), [steipete/sweetlink](https://github.com/steipete/sweetlink) - Network accessline 32
- personal data for agents: [steipete/birdclaw](https://github.com/steipete/birdclaw), [steipete/summarize](https://github.com/steipete/summarize) - Network accessline 33
- maintainer dashboards: [steipete/RepoBar](https://github.com/steipete/RepoBar), [steipete/ReleaseBar](https://github.com/steipete/ReleaseBar), [steipete/stats-store](https://github.com/steipete/stats-store) - Network accessline 39
| Builder | Why They Match | Monitor | |---|---|---| | [steipete](https://github.com/steipete) | Baseline builder. Ships Codex/Claude Code usage, MCP, local control, OpenClaw-adjacent, and maintainer workflow tools. | New repos, starred rep - Network accessline 40
|---|---|---| | [steipete](https://github.com/steipete) | Baseline builder. Ships Codex/Claude Code usage, MCP, local control, OpenClaw-adjacent, and maintainer workflow tools. | New repos, starred repos, releases, issue pain in CodexBar/or - Network accessline 41
| [steipete](https://github.com/steipete) | Baseline builder. Ships Codex/Claude Code usage, MCP, local control, OpenClaw-adjacent, and maintainer workflow tools. | New repos, starred repos, releases, issue pain in CodexBar/oracle/agent-scr - Network accessline 42
| [musistudio](https://github.com/musistudio) | Builds model routing and Claude Code infrastructure. [claude-code-router](https://github.com/musistudio/claude-code-router) has high issue volume and active releases. | Provider compatibility, - Network accessline 43
| [mvanhorn](https://github.com/mvanhorn) | Builder of AI-first research/CLI tooling. [cli-printing-press](https://github.com/mvanhorn/cli-printing-press) and last-30-days style tools suggest signal-mining infrastructure. | AI-agent-first C - Network accessline 44
| [Yeachan-Heo](https://github.com/Yeachan-Heo) | Ships coding-agent enhancement layers: [oh-my-codex](https://github.com/Yeachan-Heo/oh-my-codex), [oh-my-claudecode](https://github.com/Yeachan-Heo/oh-my-claudecode). | Hooks, agent teams, H - Network accessline 45
| [can1357](https://github.com/can1357) | Low-level/security background plus terminal coding-agent work: [oh-my-pi](https://github.com/can1357/oh-my-pi). | Agent terminal UX, LSP/tool harness, browser/subagent workflow, sandbox primitives. - Network accessline 46
| [pwrdrvr](https://github.com/pwrdrvr) | Builds channel-controlled desktop agents and GitHub issue mining. | Telegram/Discord/Slack/Feishu/Lark agent control, GitHub embeddings/clustering. | - Network accessline 47
| [vivekchand](https://github.com/vivekchand) | Builds [clawmetry](https://github.com/vivekchand/clawmetry), observability and governance for OpenClaw, Codex, Claude Code, and other runtimes. | Trace/replay, risk scoring, audit trail, gover - Network accessline 48
| [nk3750](https://github.com/nk3750) | Small follower count but direct OpenClaw observability/guardrails work via [clawlens](https://github.com/nk3750/clawlens). | Guardrails, audit dashboard, issue/request activity around OpenClaw safety. - Network accessline 49
| [chrysb](https://github.com/chrysb) | Ships OpenClaw setup harness [alphaclaw](https://github.com/chrysb/alphaclaw). | Private deployment, installation pain, reliability/setup support. | - Network accessline 50
| [obra](https://github.com/obra) | Builds agent skill systems and workflow discipline through [superpowers](https://github.com/obra/superpowers). | Skill distribution, compatibility, workflow rules, team usage. | - Network accessline 51
| [addyosmani](https://github.com/addyosmani) | Builds agent-skill and quality/safety material around web and AI engineering. | Agent skills, quality gates, prompt-injection/security content. | - Network accessline 52
| [simonw](https://github.com/simonw) | Tool-heavy AI builder with LLM ecosystem infrastructure and public signal mining. | LLM CLI plugins, model feeds, package stats, reproducible AI tooling. | - Network accessline 53
| [antirez](https://github.com/antirez) | Local inference and low-level model tooling. | Local model runtime, GGUF tooling, DeepSeek/Qwen/voice model experiments. |
docs/source-adapters.md
- Network accessline 77
hnrss: enabled: true base_url: https://hnrss.org - Network accessline 78
enabled: true base_url: https://hnrss.org user_agent: "sondar-hnrss-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 79
base_url: https://hnrss.org - Network accessline 80
user_agent: "sondar-hnrss-sync/0.1 (+https://github.com/geekjourneyx/sondar)"
docs/superpowers/plans/2026-07-24-ishell-source.md
- Network accessline 160
const defaultIshellBaseURL = "https://ishell.online" - Network accessline 248
<section class="feed"><ol class="story-list" start="1"> <li class="story" value="1"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://Example.com/post?a=1#top">Claude Code 团队部署实践</a></div> - Network accessline 249
<li class="story" value="1"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://Example.com/post?a=1#top">Claude Code 团队部署实践</a></div> <p class="story-description">团队使用 Claude Code,并讨论权限和审计。</p> - Network accessline 250
<div class="story-title-row"><a class="story-title" href="https://Example.com/post?a=1#top">Claude Code 团队部署实践</a></div> - Network accessline 254
</div></li> <li class="story" value="2"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/post?a=1">同一原文的第二个中文策展标题</a></div> - Network accessline 255
<li class="story" value="2"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/post?a=1">同一原文的第二个中文策展标题</a></div> <p class="story-description">第二条策展摘要。</p> - Network accessline 256
<div class="story-title-row"><a class="story-title" href="https://example.com/post?a=1">同一原文的第二个中文策展标题</a></div> - Network accessline 259
</div></li> <li class="story" value="3"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/incomplete">缺少摘要的无效条目</a></div> - Network accessline 260
<li class="story" value="3"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/incomplete">缺少摘要的无效条目</a></div> </div></li> - Network accessline 261
<div class="story-title-row"><a class="story-title" href="https://example.com/incomplete">缺少摘要的无效条目</a></div> - Network accessline 267
func TestParseIshellItemsNormalizesHomepageStories(t *testing.T) { items, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 268
items, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 277
t.Fatalf("unexpected source mapping: %#v", first) } if first.URL != "https://example.com/post?a=1" { - Network accessline 278
} if first.URL != "https://example.com/post?a=1" { t.Fatalf("unexpected normalized URL: %q", first.URL) - Network accessline 279
if first.URL != "https://example.com/post?a=1" { - Network accessline 296
func TestParseIshellItemsIgnoresRelativeTimeForContentHash(t *testing.T) { first, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 297
first, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 300
} laterHTML := strings.Replace(ishellFixture, "5 小时前", "6 小时前", 1) second, err := parseIshellItems([]byte(laterHTML), "2026-07-24T09:00:00Z", "https://ishell.online/") - Network accessline 301
laterHTML := strings.Replace(ishellFixture, "5 小时前", "6 小时前", 1) second, err := parseIshellItems([]byte(laterHTML), "2026-07-24T09:00:00Z", "https://ishell.online/") if err != nil { - Network accessline 302
second, err := parseIshellItems([]byte(laterHTML), "2026-07-24T09:00:00Z", "https://ishell.online/") - Network accessline 311
func TestParseIshellItemsRejectsZeroValidStories(t *testing.T) { _, err := parseIshellItems([]byte(`<section class="feed"><ol class="story-list"></ol></section>`), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 312
_, err := parseIshellItems([]byte(`<section class="feed"><ol class="story-list"></ol></section>`), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 380
const defaultIshellBaseURL = "https://ishell.online" - Network accessline 656
state := openTestState(t) run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://example.com/items", - Network accessline 657
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://example.com/items", RunKey: "aihot:changes", StartedAt: "2026-07-24T08:00:00Z", - Network accessline 658
SourceType: "aihot", Locator: "https://example.com/items", - Network accessline 664
item := SourceItem{ SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "stable", URL: "https://example.com/story", Title: "Story", CanonicalText: "Story first", - Network accessline 665
SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "stable", URL: "https://example.com/story", Title: "Story", CanonicalText: "Story first", ItemKind: "curated_attention", CapturedAt: "2026-07-24T08:00:00Z", - Network accessline 666
URL: "https://example.com/story", Title: "Story", CanonicalText: "Story first", - Network accessline 703
} run, err := state.StartSourceRun(SourceRunInput{ SourceType: "ishell", Locator: "https://ishell.online/", - Network accessline 704
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "ishell", Locator: "https://ishell.online/", RunKey: "ishell:first", StartedAt: "2026-07-24T08:00:00Z", - Network accessline 705
SourceType: "ishell", Locator: "https://ishell.online/", - Network accessline 711
_, err = state.SaveSourceItems([]SourceItem{{ SourceID: run.SourceID, RunID: run.RunID, SourceType: "ishell", ExternalID: "one", URL: "https://example.com/one", Title: "One", CanonicalText: "One", - Network accessline 712
SourceID: run.SourceID, RunID: run.RunID, SourceType: "ishell", ExternalID: "one", URL: "https://example.com/one", Title: "One", CanonicalText: "One", ItemKind: "curated_article", CapturedAt: "2026-07-24T08:00:00Z", - Network accessline 713
URL: "https://example.com/one", Title: "One", CanonicalText: "One", - Network accessline 1243
} current = strings.Replace(ishellFixture, `<ol class="story-list" start="1">`, `<ol class="story-list" start="1"><li class="story" value="0"><div class="story-content"><div class="story-title-row"><a class="story-title" href="https://ex - Network accessline 1244
current = strings.Replace(ishellFixture, `<ol class="story-list" start="1">`, `<ol class="story-list" start="1"><li class="story" value="0"><div class="story-content"><div class="story-title-row"><a class="story-title" href="https://examp - Network accessline 1245
`<ol class="story-list" start="1"><li class="story" value="0"><div class="story-content"><div class="story-title-row"><a class="story-title" href="https://example.com/new-agent">Claude Code enterprise permission</a></div><p class="story-des - Network accessline 1488
SELECT evidence_type, evidence_strength, actor_type, provenance_json FROM evidence WHERE source LIKE 'https://example.com/new-agent%'`, - Network accessline 1489
FROM evidence WHERE source LIKE 'https://example.com/new-agent%'`, ).Scan(&evidenceType, &strength, &actorType, &provenance); err != nil { - Network accessline 1490
WHERE source LIKE 'https://example.com/new-agent%'`, - Network accessline 1587
ishell: enabled: true base_url: https://ishell.online - Network accessline 1588
enabled: true base_url: https://ishell.online user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 1589
base_url: https://ishell.online - Network accessline 1590
user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 1654
printf '%s\n' 'version: 2' 'sources:' ' ishell:' ' enabled: true' ' base_url: https://ishell.online' - Network accessline 1657
' ishell:' \ ' enabled: true' \ ' base_url: https://ishell.online' \ - Network accessline 1658
' enabled: true' \ ' base_url: https://ishell.online' \ ' user_agent: "sondar-ishell-smoke/0.1 (+https://github.com/geekjourneyx/sondar)"' \ - Network accessline 1659
' base_url: https://ishell.online' \ - Network accessline 1660
' user_agent: "sondar-ishell-smoke/0.1 (+https://github.com/geekjourneyx/sondar)"' \
docs/superpowers/plans/2026-07-24-readme-noise-reduction.md
- Network accessline 61
<p align="center"> <a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white" alt="Go 1.26"></a> - Network accessline 62
<a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white" alt="Go 1.26"></a> - Network accessline 63
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-7D858F" alt="MIT License"></a> - Network accessline 179
发现问题或漏报,请提交 [GitHub Issue](https://github.com/geekjourneyx/sondar/issues)。
docs/superpowers/plans/2026-07-24-readme-redesign.md
- Network accessline 51
<svg xmlns="http://www.w3.org/2000/svg" - Network accessline 249
<p align="center"> <a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white" alt="Go 1.26"></a> - Network accessline 250
<a href="https://go.dev/"><img src="https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white" alt="Go 1.26"></a> - Network accessline 251
<a href="./CHANGELOG.md"><img src="https://img.shields.io/badge/release-v1.0.0-F2B84B" alt="Release v1.0.0"></a> - Network accessline 252
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-7D858F" alt="MIT License"></a> - Dangerous shell operationline 517
git rm assets/banner.webp
docs/superpowers/specs/2026-07-24-ishell-source-design.md
- Network accessline 3
**Date:** 2026-07-24 **Status:** Approved direction; implementation not started **Scope:** Add `https://ishell.online/` as a source while removing duplicate and irrelevant source-item signals. - Network accessline 5
**Scope:** Add `https://ishell.online/` as a source while removing duplicate and irrelevant source-item signals. - Network accessline 24
The design is based on a live inspection of `https://ishell.online/` on 2026-07-24: - Network accessline 65
ishell: enabled: true base_url: https://ishell.online - Network accessline 66
enabled: true base_url: https://ishell.online user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 67
base_url: https://ishell.online - Network accessline 68
user_agent: "sondar-ishell-sync/0.1 (+https://github.com/geekjourneyx/sondar)" - Network accessline 83
- `base_url` defaults to `https://ishell.online`.
internal/sondar/aihot.go
internal/sondar/aihot_test.go
- Executable scriptline 1
Executable file - Network accessline 19
data, err := defaultFetchURLWithHeaders(server.URL, map[string]string{ "User-Agent": "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)", - Network accessline 20
"User-Agent": "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)", - Network accessline 26
t.Fatalf("unexpected body: %s", string(data)) } if seenUA != "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" { - Network accessline 27
} if seenUA != "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" { t.Fatalf("expected configured UA, got %q", seenUA) - Network accessline 28
if seenUA != "sondar-aihot-sync/0.1 (+https://github.com/geekjourneyx/sondar)" { - Network accessline 41
"title": "Anthropic 发布 Claude Opus 4.7,1M 上下文窗口正式上线", "title_en": "Anthropic Releases Claude Opus 4.7 with 1M Context Window", "url": "https://www.anthropic.com/news/claude-opus-4-7", - Network accessline 42
"title_en": "Anthropic Releases Claude Opus 4.7 with 1M Context Window", "url": "https://www.anthropic.com/news/claude-opus-4-7", "permalink": "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", - Network accessline 43
"url": "https://www.anthropic.com/news/claude-opus-4-7", - Network accessline 44
"permalink": "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", - Network accessline 66
t.Fatalf("unexpected source identity: %#v", item) } if item.URL != "https://www.anthropic.com/news/claude-opus-4-7" { - Network accessline 67
} if item.URL != "https://www.anthropic.com/news/claude-opus-4-7" { t.Fatalf("expected original URL, got %q", item.URL) - Network accessline 68
if item.URL != "https://www.anthropic.com/news/claude-opus-4-7" { - Network accessline 69
t.Fatalf("expected original URL, got %q", item.URL) } if item.Permalink != "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3" { - Network accessline 70
} if item.Permalink != "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3" { t.Fatalf("expected permalink, got %q", item.Permalink) - Network accessline 71
if item.Permalink != "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3" { - Network accessline 87
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { requests = append(requests, r.URL.String()) if r.Header.Get("User-Agent") != "sondar-test/1.0 (+https://example.com/contact)" { - Network accessline 88
requests = append(requests, r.URL.String()) if r.Header.Get("User-Agent") != "sondar-test/1.0 (+https://example.com/contact)" { t.Fatalf("missing configured user agent: %q", r.Header.Get("User-Agent")) - Network accessline 89
if r.Header.Get("User-Agent") != "sondar-test/1.0 (+https://example.com/contact)" { - Network accessline 92
switch r.URL.Path { case "/api/public/fingerprint": _, _ = w.Write([]byte(`{"selected":"f1-test","all":"f1-all","docs":"https://aihot.virxact.com/agent"}`)) - Network accessline 93
case "/api/public/fingerprint": _, _ = w.Write([]byte(`{"selected":"f1-test","all":"f1-all","docs":"https://aihot.virxact.com/agent"}`)) case "/api/public/items": - Network accessline 94
_, _ = w.Write([]byte(`{"selected":"f1-test","all":"f1-all","docs":"https://aihot.virxact.com/agent"}`)) - Network accessline 97
t.Fatalf("unexpected query: %s", r.URL.RawQuery) } _, _ = w.Write([]byte(`{"count":1,"hasNext":false,"nextCursor":null,"items":[{"id":"cm9abc456def789ghi012jkl3","title":"OpenAI 开源 GPT-OSS-70B","url":"https://openai.com/blog/gpt-oss", - Network accessline 98
} _, _ = w.Write([]byte(`{"count":1,"hasNext":false,"nextCursor":null,"items":[{"id":"cm9abc456def789ghi012jkl3","title":"OpenAI 开源 GPT-OSS-70B","url":"https://openai.com/blog/gpt-oss","permalink":"https://aihot.virxact.com/items/cm9abc4 - Network accessline 99
_, _ = w.Write([]byte(`{"count":1,"hasNext":false,"nextCursor":null,"items":[{"id":"cm9abc456def789ghi012jkl3","title":"OpenAI 开源 GPT-OSS-70B","url":"https://openai.com/blog/gpt-oss","permalink":"https://aihot.virxact.com/items/cm9abc456def - Network accessline 106
items, fp, err := FetchAIHOTItems(AIHOTConfig{ Enabled: true, BaseURL: server.URL, UserAgent: "sondar-test/1.0 (+https://example.com/contact)", - Network accessline 107
Enabled: true, BaseURL: server.URL, UserAgent: "sondar-test/1.0 (+https://example.com/contact)",
internal/sondar/command.go
- Executable scriptline 1
Executable file
internal/sondar/command_test.go
- Executable scriptline 1
Executable file
internal/sondar/config.go
- Executable scriptline 1
Executable file
internal/sondar/explanation.go
- Executable scriptline 1
Executable file
internal/sondar/explanation_test.go
- Executable scriptline 1
Executable file - Network accessline 9
snap := RepoSnapshot{ FullName: "example/browser-agent", URL: "https://github.com/example/browser-agent", - Network accessline 10
FullName: "example/browser-agent", URL: "https://github.com/example/browser-agent", Description: "Browser automation agent for development teams", - Network accessline 11
URL: "https://github.com/example/browser-agent", - Network accessline 48
} evidence := []Evidence{ {Claim: "Fresh repository.", Source: "https://example.com/repo", Supports: []string{"novelty", "urgency"}}, - Network accessline 49
evidence := []Evidence{ {Claim: "Fresh repository.", Source: "https://example.com/repo", Supports: []string{"novelty", "urgency"}}, {Claim: "A user reports deployment pain.", Source: "https://example.com/issue", Supports: []string{"adop - Network accessline 50
{Claim: "Fresh repository.", Source: "https://example.com/repo", Supports: []string{"novelty", "urgency"}}, - Network accessline 51
{Claim: "A user reports deployment pain.", Source: "https://example.com/issue", Supports: []string{"adoption_velocity", "commercial_relevance", "evidence_quality"}}, - Network accessline 90
scores, "WATCH", []Evidence{{Claim: "Repository exists.", Source: "https://example.com/repo"}}, - Network accessline 91
"WATCH", []Evidence{{Claim: "Repository exists.", Source: "https://example.com/repo"}}, ) - Network accessline 92
[]Evidence{{Claim: "Repository exists.", Source: "https://example.com/repo"}}, - Network accessline 111
evidence := []Evidence{{ Claim: "GitHub snapshot describes a browser video editor.", Source: "https://github.com/owner/video-editor", - Network accessline 112
Claim: "GitHub snapshot describes a browser video editor.", Source: "https://github.com/owner/video-editor", Supports: []string{"commercial_relevance"}, - Network accessline 113
Source: "https://github.com/owner/video-editor", - Network accessline 164
scores, "WATCH", []Evidence{{Claim: "GitHub snapshot.", Source: "https://github.com/owner/agent-ui"}}, - Network accessline 165
"WATCH", []Evidence{{Claim: "GitHub snapshot.", Source: "https://github.com/owner/agent-ui"}}, ) - Network accessline 166
[]Evidence{{Claim: "GitHub snapshot.", Source: "https://github.com/owner/agent-ui"}}, - Network accessline 192
scores, "WATCH", []Evidence{{Claim: "AIHOT source item.", Source: "https://example.com/launch"}}, - Network accessline 193
"WATCH", []Evidence{{Claim: "AIHOT source item.", Source: "https://example.com/launch"}}, ) - Network accessline 194
[]Evidence{{Claim: "AIHOT source item.", Source: "https://example.com/launch"}},
internal/sondar/hnrss.go
internal/sondar/hnrss_test.go
- Executable scriptline 1
Executable file - Network accessline 11
capturedAt := "2026-07-08T12:00:00Z" body := []byte(`{ "version": "https://jsonfeed.org/version/1", - Network accessline 12
body := []byte(`{ "version": "https://jsonfeed.org/version/1", "title": "Hacker News - Newest: \"AI\"", - Network accessline 13
"version": "https://jsonfeed.org/version/1", - Network accessline 14
"title": "Hacker News - Newest: \"AI\"", "home_page_url": "https://news.ycombinator.com/newest", "items": [{ - Network accessline 15
"home_page_url": "https://news.ycombinator.com/newest", - Network accessline 16
"items": [{ "id": "https://news.ycombinator.com/item?id=48831168", "title": "Cinchor - Control what an AI agent can do, and prove what it did", - Network accessline 17
"id": "https://news.ycombinator.com/item?id=48831168", - Network accessline 18
"title": "Cinchor - Control what an AI agent can do, and prove what it did", "content_html": "<p>Article URL: <a href=\"https://cinchor.com\">https://cinchor.com</a></p><p>Comments URL: <a href=\"https://news.ycombinator.com/item?id=48 - Network accessline 19
"content_html": "<p>Article URL: <a href=\"https://cinchor.com\">https://cinchor.com</a></p><p>Comments URL: <a href=\"https://news.ycombinator.com/item?id=48831168\">https://news.ycombinator.com/item?id=48831168</a></p><p>Points: 12</p><p> - Network accessline 20
"url": "https://cinchor.com", - Network accessline 21
"external_url": "https://news.ycombinator.com/item?id=48831168", - Network accessline 22
"date_published": "2026-07-08T12:39:06Z", "author": {"name": "foh_quarters", "url": "https://news.ycombinator.com/user?id=foh_quarters"} }] - Network accessline 23
"author": {"name": "foh_quarters", "url": "https://news.ycombinator.com/user?id=foh_quarters"} - Network accessline 33
} item := items[0] if item.SourceType != "hnrss" || item.ExternalID != "https://news.ycombinator.com/item?id=48831168" { - Network accessline 34
item := items[0] if item.SourceType != "hnrss" || item.ExternalID != "https://news.ycombinator.com/item?id=48831168" { t.Fatalf("unexpected source identity: %#v", item) - Network accessline 35
if item.SourceType != "hnrss" || item.ExternalID != "https://news.ycombinator.com/item?id=48831168" { - Network accessline 36
t.Fatalf("unexpected source identity: %#v", item) } if item.URL != "https://cinchor.com" || item.Permalink != "https://news.ycombinator.com/item?id=48831168" { - Network accessline 37
} if item.URL != "https://cinchor.com" || item.Permalink != "https://news.ycombinator.com/item?id=48831168" { t.Fatalf("unexpected URLs: %#v", item) - Network accessline 38
if item.URL != "https://cinchor.com" || item.Permalink != "https://news.ycombinator.com/item?id=48831168" { - Network accessline 57
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { seen = append(seen, r.URL.String()) if r.Header.Get("User-Agent") != "sondar-hnrss-test/1.0 (+https://example.com/contact)" { - Network accessline 58
seen = append(seen, r.URL.String()) if r.Header.Get("User-Agent") != "sondar-hnrss-test/1.0 (+https://example.com/contact)" { t.Fatalf("missing configured user agent: %q", r.Header.Get("User-Agent")) - Network accessline 59
if r.Header.Get("User-Agent") != "sondar-hnrss-test/1.0 (+https://example.com/contact)" { - Network accessline 72
t.Fatalf("unexpected query: %s", r.URL.RawQuery) } _, _ = w.Write([]byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News - Newest","items":[{"id":"https://news.ycombinator.com/item?id=1","title":"AI agent control","con - Network accessline 73
} _, _ = w.Write([]byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News - Newest","items":[{"id":"https://news.ycombinator.com/item?id=1","title":"AI agent control","content_html":"<p>Points: 5</p><p># Comments: 2</p>"," - Network accessline 74
_, _ = w.Write([]byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News - Newest","items":[{"id":"https://news.ycombinator.com/item?id=1","title":"AI agent control","content_html":"<p>Points: 5</p><p># Comments: 2</p>","url" - Network accessline 79
Enabled: true, BaseURL: server.URL, UserAgent: "sondar-hnrss-test/1.0 (+https://example.com/contact)", - Network accessline 80
BaseURL: server.URL, UserAgent: "sondar-hnrss-test/1.0 (+https://example.com/contact)", Feeds: []HNRSSFeedConfig{{ - Network accessline 81
UserAgent: "sondar-hnrss-test/1.0 (+https://example.com/contact)", - Network accessline 87
t.Fatal(err) } if len(items) != 1 || items[0].ExternalID != "https://news.ycombinator.com/item?id=1" { - Network accessline 88
} if len(items) != 1 || items[0].ExternalID != "https://news.ycombinator.com/item?id=1" { t.Fatalf("unexpected items: %#v", items) - Network accessline 89
if len(items) != 1 || items[0].ExternalID != "https://news.ycombinator.com/item?id=1" { - Network accessline 104
t.Fatalf("unexpected path %s", r.URL.Path) } _, _ = w.Write([]byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News: Show HN","items":[{"id":"https://news.ycombinator.com/item?id=2","title":"Show HN: AI workflow tool"," - Network accessline 105
} _, _ = w.Write([]byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News: Show HN","items":[{"id":"https://news.ycombinator.com/item?id=2","title":"Show HN: AI workflow tool","content_html":"<p>Points: 7</p><p># Comments: - Network accessline 106
_, _ = w.Write([]byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News: Show HN","items":[{"id":"https://news.ycombinator.com/item?id=2","title":"Show HN: AI workflow tool","content_html":"<p>Points: 7</p><p># Comments: 3</ - Network accessline 111
Enabled: true, BaseURL: server.URL, UserAgent: "sondar-hnrss-test/1.0 (+https://example.com/contact)", - Network accessline 112
BaseURL: server.URL, UserAgent: "sondar-hnrss-test/1.0 (+https://example.com/contact)", Feeds: []HNRSSFeedConfig{ - Network accessline 113
UserAgent: "sondar-hnrss-test/1.0 (+https://example.com/contact)", - Network accessline 120
t.Fatal("expected partial feed error") } if len(items) != 1 || items[0].ExternalID != "https://news.ycombinator.com/item?id=2" { - Network accessline 121
} if len(items) != 1 || items[0].ExternalID != "https://news.ycombinator.com/item?id=2" { t.Fatalf("expected partial successful item, got %#v", items) - Network accessline 122
if len(items) != 1 || items[0].ExternalID != "https://news.ycombinator.com/item?id=2" {
internal/sondar/ishell.go
internal/sondar/ishell_test.go
- Executable scriptline 1
Executable file - Network accessline 11
<section class="feed"><ol class="story-list" start="1"> <li class="story" value="1"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://Example.com/post?a=1#top">Claude Code 团队部署实践</a></div> - Network accessline 12
<li class="story" value="1"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://Example.com/post?a=1#top">Claude Code 团队部署实践</a></div> <p class="story-description">团队使用 Claude Code,并讨论权限和审计。</p> - Network accessline 13
<div class="story-title-row"><a class="story-title" href="https://Example.com/post?a=1#top">Claude Code 团队部署实践</a></div> - Network accessline 17
</div></li> <li class="story" value="2"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/post?a=1">同一原文的第二个中文策展标题</a></div> - Network accessline 18
<li class="story" value="2"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/post?a=1">同一原文的第二个中文策展标题</a></div> <p class="story-description">第二条策展摘要。</p> - Network accessline 19
<div class="story-title-row"><a class="story-title" href="https://example.com/post?a=1">同一原文的第二个中文策展标题</a></div> - Network accessline 22
</div></li> <li class="story" value="3"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/incomplete">缺少摘要的无效条目</a></div> - Network accessline 23
<li class="story" value="3"><div class="story-content"> <div class="story-title-row"><a class="story-title" href="https://example.com/incomplete">缺少摘要的无效条目</a></div> </div></li> - Network accessline 24
<div class="story-title-row"><a class="story-title" href="https://example.com/incomplete">缺少摘要的无效条目</a></div> - Network accessline 30
func TestParseIshellItemsNormalizesHomepageStories(t *testing.T) { items, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 31
items, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 40
t.Fatalf("unexpected source mapping: %#v", first) } if first.URL != "https://example.com/post?a=1" { - Network accessline 41
} if first.URL != "https://example.com/post?a=1" { t.Fatalf("unexpected normalized URL: %q", first.URL) - Network accessline 42
if first.URL != "https://example.com/post?a=1" { - Network accessline 59
func TestParseIshellItemsIgnoresRelativeTimeForContentHash(t *testing.T) { first, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 60
first, err := parseIshellItems([]byte(ishellFixture), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 63
} laterHTML := strings.Replace(ishellFixture, "5 小时前", "6 小时前", 1) second, err := parseIshellItems([]byte(laterHTML), "2026-07-24T09:00:00Z", "https://ishell.online/") - Network accessline 64
laterHTML := strings.Replace(ishellFixture, "5 小时前", "6 小时前", 1) second, err := parseIshellItems([]byte(laterHTML), "2026-07-24T09:00:00Z", "https://ishell.online/") if err != nil { - Network accessline 65
second, err := parseIshellItems([]byte(laterHTML), "2026-07-24T09:00:00Z", "https://ishell.online/") - Network accessline 74
func TestParseIshellItemsRejectsZeroValidStories(t *testing.T) { _, err := parseIshellItems([]byte(`<section class="feed"><ol class="story-list"></ol></section>`), "2026-07-24T08:00:00Z", "https://ishell.online/") - Network accessline 75
_, err := parseIshellItems([]byte(`<section class="feed"><ol class="story-list"></ol></section>`), "2026-07-24T08:00:00Z", "https://ishell.online/")
internal/sondar/report.go
- Executable scriptline 1
Executable file
internal/sondar/report_test.go
- Executable scriptline 1
Executable file - Network accessline 20
Evidence: []Evidence{{ Claim: "The repository was created inside the seven-day discovery window.", Source: "https://github.com/owner/browser-agent", - Network accessline 21
Claim: "The repository was created inside the seven-day discovery window.", Source: "https://github.com/owner/browser-agent", Confidence: 0.8, - Network accessline 22
Source: "https://github.com/owner/browser-agent", - Network accessline 64
"E1", "The repository was created inside the seven-day discovery window.", "https://github.com/owner/browser-agent", - Network accessline 65
"The repository was created inside the seven-day discovery window.", "https://github.com/owner/browser-agent", "supports=novelty,adoption_velocity,evidence_quality,urgency", - Network accessline 66
"https://github.com/owner/browser-agent", - Network accessline 186
func TestRenderReportShowsObservedSourceCoverage(t *testing.T) { signals := []Signal{ {Entities: []string{"owner/repo"}, Sources: []string{"https://github.com/owner/repo"}, Decision: "IGNORE", Scores: map[string]int{}}, - Network accessline 187
signals := []Signal{ {Entities: []string{"owner/repo"}, Sources: []string{"https://github.com/owner/repo"}, Decision: "IGNORE", Scores: map[string]int{}}, {Entities: []string{"aihot: launch"}, Decision: "IGNORE", Scores: map[string]int{ - Network accessline 188
{Entities: []string{"owner/repo"}, Sources: []string{"https://github.com/owner/repo"}, Decision: "IGNORE", Scores: map[string]int{}},
internal/sondar/repository_contract_test.go
- Executable scriptline 1
Executable file - Network accessline 75
"signal_id": "sig-20260623-001", "captured_at": "2026-06-23T09:00:00Z", "sources": []string{"https://github.com/example/router/issues/12"}, - Network accessline 76
"captured_at": "2026-06-23T09:00:00Z", "sources": []string{"https://github.com/example/router/issues/12"}, "entities": []string{"example/router"}, - Network accessline 77
"sources": []string{"https://github.com/example/router/issues/12"}, - Network accessline 109
Evidence: []Evidence{{ Claim: "A new repository was created in the seven-day discovery window.", Source: "https://github.com/example/browser-agent", - Network accessline 110
Claim: "A new repository was created in the seven-day discovery window.", Source: "https://github.com/example/browser-agent", Confidence: 0.8, - Network accessline 111
Source: "https://github.com/example/browser-agent",
internal/sondar/runner.go
- Executable scriptline 1
Executable file - Network accessline 384
seeds = append(seeds, RepoSnapshot{ FullName: repo, URL: "https://github.com/" + repo, - Network accessline 385
FullName: repo, URL: "https://github.com/" + repo, Discovery: DiscoveryContext{Source: "seed"}, - Network accessline 386
URL: "https://github.com/" + repo, - Network accessline 411
discovered = append(discovered, RepoSnapshot{ FullName: repo, URL: "https://github.com/" + repo, - Network accessline 412
FullName: repo, URL: "https://github.com/" + repo, Discovery: DiscoveryContext{Source: "trending"}, - Network accessline 413
URL: "https://github.com/" + repo,
internal/sondar/runner_test.go
- Executable scriptline 1
Executable file - Network accessline 27
ctx := EvidenceContext{ ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 28
ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, {Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 29
{Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 30
{Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 31
}, BuyerEvidence: []BuyerEvidence{ {Kind: "buyer_pain", Actor: "ops team", Claim: "needs deployment automation", Source: "https://example.com/buyer"}, - Network accessline 32
BuyerEvidence: []BuyerEvidence{ {Kind: "buyer_pain", Actor: "ops team", Claim: "needs deployment automation", Source: "https://example.com/buyer"}, }, - Network accessline 33
{Kind: "buyer_pain", Actor: "ops team", Claim: "needs deployment automation", Source: "https://example.com/buyer"}, - Network accessline 49
ctx := EvidenceContext{ ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 50
ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, {Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 51
{Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 52
{Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 432
Number: 42, Title: "Production self-host install blocked by SSO auth setup", URL: "https://github.com/openclaw/openclaw/issues/42", - Network accessline 433
Title: "Production self-host install blocked by SSO auth setup", URL: "https://github.com/openclaw/openclaw/issues/42", }, - Network accessline 434
URL: "https://github.com/openclaw/openclaw/issues/42", - Network accessline 460
Number: 43, Title: "Enterprise team asks for managed onboarding", URL: "https://github.com/openclaw/openclaw/issues/43", - Network accessline 461
Title: "Enterprise team asks for managed onboarding", URL: "https://github.com/openclaw/openclaw/issues/43", }, - Network accessline 462
URL: "https://github.com/openclaw/openclaw/issues/43", - Network accessline 485
Number: 7, Title: "Plugin question", URL: "https://github.com/openclaw/openclaw/issues/7", - Network accessline 486
Title: "Plugin question", URL: "https://github.com/openclaw/openclaw/issues/7", }, - Network accessline 487
URL: "https://github.com/openclaw/openclaw/issues/7", - Network accessline 510
Number: 8, Title: "Product team migration guide", URL: "https://github.com/openclaw/openclaw/issues/8", - Network accessline 511
Title: "Product team migration guide", URL: "https://github.com/openclaw/openclaw/issues/8", }, - Network accessline 512
URL: "https://github.com/openclaw/openclaw/issues/8", - Network accessline 535
Number: 9, Title: "Internal auth install question", URL: "https://github.com/openclaw/openclaw/issues/9", - Network accessline 536
Title: "Internal auth install question", URL: "https://github.com/openclaw/openclaw/issues/9", }, - Network accessline 537
URL: "https://github.com/openclaw/openclaw/issues/9", - Network accessline 560
Number: 10, Title: "Product migration failed", URL: "https://github.com/openclaw/openclaw/issues/10", - Network accessline 561
Title: "Product migration failed", URL: "https://github.com/openclaw/openclaw/issues/10", }, - Network accessline 562
URL: "https://github.com/openclaw/openclaw/issues/10", - Network accessline 588
ctx := EvidenceContext{ ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 589
ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, {Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 590
{Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 591
{Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 592
}, BuyerEvidence: []BuyerEvidence{ {Kind: "costly_issue_behavior", Actor: "github_issue_author", Claim: "blocked production install", Source: "https://example.com/issue"}, - Network accessline 593
BuyerEvidence: []BuyerEvidence{ {Kind: "costly_issue_behavior", Actor: "github_issue_author", Claim: "blocked production install", Source: "https://example.com/issue"}, }, - Network accessline 594
{Kind: "costly_issue_behavior", Actor: "github_issue_author", Claim: "blocked production install", Source: "https://example.com/issue"}, - Network accessline 613
ctx := EvidenceContext{ ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 614
ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, {Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 615
{Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 616
{Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 617
}, BuyerEvidence: []BuyerEvidence{ {Kind: "costly_issue_behavior", Actor: "github_issue_author", Claim: "blocked production install", Source: "https://example.com/issue"}, - Network accessline 618
BuyerEvidence: []BuyerEvidence{ {Kind: "costly_issue_behavior", Actor: "github_issue_author", Claim: "blocked production install", Source: "https://example.com/issue"}, }, - Network accessline 619
{Kind: "costly_issue_behavior", Actor: "github_issue_author", Claim: "blocked production install", Source: "https://example.com/issue"}, - Network accessline 638
ctx := EvidenceContext{ ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 639
ExternalResults: []ExternalResult{ {Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, {Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 640
{Title: "OpenClaw deployment article", URL: "https://example.com/openclaw"}, - Network accessline 641
{Title: "OpenClaw Windows coverage", URL: "https://example.com/windows"}, - Network accessline 697
item := SourceItem{ ID: 99, SourceType: "aihot", ExternalID: "cm9abc456def789ghi012jkl3", URL: "https://openai.com/blog/gpt-oss", Permalink: "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", - Network accessline 698
ID: 99, SourceType: "aihot", ExternalID: "cm9abc456def789ghi012jkl3", URL: "https://openai.com/blog/gpt-oss", Permalink: "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", SourceName: "OpenAI Blog", Title: "OpenAI 开源 GPT-OSS-7 - Network accessline 699
URL: "https://openai.com/blog/gpt-oss", Permalink: "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", - Network accessline 844
} current = strings.Replace(ishellFixture, `<ol class="story-list" start="1">`, `<ol class="story-list" start="1"><li class="story" value="0"><div class="story-content"><div class="story-title-row"><a class="story-title" href="https://ex - Network accessline 845
current = strings.Replace(ishellFixture, `<ol class="story-list" start="1">`, `<ol class="story-list" start="1"><li class="story" value="0"><div class="story-content"><div class="story-title-row"><a class="story-title" href="https://examp - Network accessline 846
`<ol class="story-list" start="1"><li class="story" value="0"><div class="story-content"><div class="story-title-row"><a class="story-title" href="https://example.com/new-agent">Claude Code enterprise permission</a></div><p class="story-des - Network accessline 866
SELECT evidence_type, evidence_strength, actor_type, provenance_json FROM evidence WHERE source LIKE 'https://example.com/new-agent%'`, - Network accessline 867
FROM evidence WHERE source LIKE 'https://example.com/new-agent%'`, ).Scan(&evidenceType, &strength, &actorType, &provenance); err != nil { - Network accessline 868
WHERE source LIKE 'https://example.com/new-agent%'`, - Network accessline 940
defer func() { fetchURLWithHeaders = oldFetch }() fetchURLWithHeaders = func(rawURL string, headers map[string]string) ([]byte, error) { if headers["User-Agent"] != "sondar-test/1.0 (+https://example.com/contact)" { - Network accessline 941
fetchURLWithHeaders = func(rawURL string, headers map[string]string) ([]byte, error) { if headers["User-Agent"] != "sondar-test/1.0 (+https://example.com/contact)" { t.Fatalf("unexpected UA: %#v", headers) - Network accessline 942
if headers["User-Agent"] != "sondar-test/1.0 (+https://example.com/contact)" { - Network accessline 944
} if strings.Contains(rawURL, "/fingerprint") { return []byte(`{"selected":"f1-test","all":"f1-all","docs":"https://aihot.virxact.com/agent"}`), nil - Network accessline 945
if strings.Contains(rawURL, "/fingerprint") { return []byte(`{"selected":"f1-test","all":"f1-all","docs":"https://aihot.virxact.com/agent"}`), nil } - Network accessline 946
return []byte(`{"selected":"f1-test","all":"f1-all","docs":"https://aihot.virxact.com/agent"}`), nil - Network accessline 947
} if strings.Contains(rawURL, "/items") { return []byte(`{"count":1,"hasNext":false,"nextCursor":null,"items":[{"id":"cm9abc456def789ghi012jkl3","title":"OpenAI 开源 GPT-OSS-70B","url":"https://openai.com/blog/gpt-oss","permalink":"https - Network accessline 948
if strings.Contains(rawURL, "/items") { return []byte(`{"count":1,"hasNext":false,"nextCursor":null,"items":[{"id":"cm9abc456def789ghi012jkl3","title":"OpenAI 开源 GPT-OSS-70B","url":"https://openai.com/blog/gpt-oss","permalink":"https://a - Network accessline 949
return []byte(`{"count":1,"hasNext":false,"nextCursor":null,"items":[{"id":"cm9abc456def789ghi012jkl3","title":"OpenAI 开源 GPT-OSS-70B","url":"https://openai.com/blog/gpt-oss","permalink":"https://aihot.virxact.com/items/cm9abc456def789ghi01 - Network accessline 959
aihot: enabled: true base_url: https://aihot.test - Network accessline 960
enabled: true base_url: https://aihot.test user_agent: "sondar-test/1.0 (+https://example.com/contact)" - Network accessline 961
base_url: https://aihot.test - Network accessline 962
user_agent: "sondar-test/1.0 (+https://example.com/contact)" - Network accessline 1019
defer func() { fetchURLWithHeaders = oldFetch }() fetchURLWithHeaders = func(rawURL string, headers map[string]string) ([]byte, error) { if headers["User-Agent"] != "sondar-hnrss-test/1.0 (+https://example.com/contact)" { - Network accessline 1020
fetchURLWithHeaders = func(rawURL string, headers map[string]string) ([]byte, error) { if headers["User-Agent"] != "sondar-hnrss-test/1.0 (+https://example.com/contact)" { t.Fatalf("unexpected UA: %#v", headers) - Network accessline 1021
if headers["User-Agent"] != "sondar-hnrss-test/1.0 (+https://example.com/contact)" { - Network accessline 1025
t.Fatalf("unexpected URL: %s", rawURL) } return []byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News: Show HN","items":[{"id":"https://news.ycombinator.com/item?id=48831262","title":"Show HN: GUI tool for AI agent de - Network accessline 1026
} return []byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News: Show HN","items":[{"id":"https://news.ycombinator.com/item?id=48831262","title":"Show HN: GUI tool for AI agent desktop automation","content_html":"<p>Arti - Network accessline 1027
return []byte(`{"version":"https://jsonfeed.org/version/1","title":"Hacker News: Show HN","items":[{"id":"https://news.ycombinator.com/item?id=48831262","title":"Show HN: GUI tool for AI agent desktop automation","content_html":"<p>Article - Network accessline 1034
hnrss: enabled: true base_url: https://hnrss.test - Network accessline 1035
enabled: true base_url: https://hnrss.test user_agent: "sondar-hnrss-test/1.0 (+https://example.com/contact)" - Network accessline 1036
base_url: https://hnrss.test - Network accessline 1037
user_agent: "sondar-hnrss-test/1.0 (+https://example.com/contact)" - Network accessline 1107
Evidence: []Evidence{{ Claim: "AIHOT source item.", Source: "https://openai.com/blog/gpt-oss", - Network accessline 1108
Claim: "AIHOT source item.", Source: "https://openai.com/blog/gpt-oss", Confidence: 0.45, - Network accessline 1109
Source: "https://openai.com/blog/gpt-oss", - Network accessline 1121
"artifact_launch", "curated_index", "https://openai.com/blog/gpt-oss", - Network accessline 1122
"curated_index", "https://openai.com/blog/gpt-oss", } { - Network accessline 1123
"https://openai.com/blog/gpt-oss", - Network accessline 1136
ctx := EvidenceContext{ BuilderStars: []BuilderStar{ {Builder: "simonw", Repo: "mdn/mcp", URL: "https://github.com/mdn/mcp"}, - Network accessline 1137
BuilderStars: []BuilderStar{ {Builder: "simonw", Repo: "mdn/mcp", URL: "https://github.com/mdn/mcp"}, {Builder: "jxnl", Repo: "mnfst/manifest", URL: "https://github.com/mnfst/manifest"}, - Network accessline 1138
{Builder: "simonw", Repo: "mdn/mcp", URL: "https://github.com/mdn/mcp"}, - Network accessline 1139
{Builder: "jxnl", Repo: "mnfst/manifest", URL: "https://github.com/mnfst/manifest"}, - Network accessline 1140
}, ExternalResults: []ExternalResult{ {Title: "Claude Code cost routing roundup", URL: "https://example.com/generic", Snippet: "general model routing discussion"}, - Network accessline 1141
ExternalResults: []ExternalResult{ {Title: "Claude Code cost routing roundup", URL: "https://example.com/generic", Snippet: "general model routing discussion"}, {Title: "Manifest provider routing setup", URL: "https://example.com/mani - Network accessline 1142
{Title: "Claude Code cost routing roundup", URL: "https://example.com/generic", Snippet: "general model routing discussion"}, - Network accessline 1143
{Title: "Manifest provider routing setup", URL: "https://example.com/manifest", Snippet: "mnfst/manifest provider preset"}, - Network accessline 1150
t.Fatalf("expected only repo-matching builder star, got %#v", scoped.BuilderStars) } if len(scoped.ExternalResults) != 1 || scoped.ExternalResults[0].URL != "https://example.com/manifest" { - Network accessline 1151
} if len(scoped.ExternalResults) != 1 || scoped.ExternalResults[0].URL != "https://example.com/manifest" { t.Fatalf("expected only repo-matching external result, got %#v", scoped.ExternalResults) - Network accessline 1152
if len(scoped.ExternalResults) != 1 || scoped.ExternalResults[0].URL != "https://example.com/manifest" { - Network accessline 1201
func TestBuildSignalUsesObservableMetric(t *testing.T) { signal := buildSignal( RepoSnapshot{FullName: "owner/repo", URL: "https://github.com/owner/repo"}, - Network accessline 1202
signal := buildSignal( RepoSnapshot{FullName: "owner/repo", URL: "https://github.com/owner/repo"}, nil, - Network accessline 1203
RepoSnapshot{FullName: "owner/repo", URL: "https://github.com/owner/repo"}, - Network accessline 1224
func TestBuildSignalUsesConfiguredWatchExpiry(t *testing.T) { signal := buildSignal( RepoSnapshot{FullName: "owner/repo", URL: "https://github.com/owner/repo"}, - Network accessline 1225
signal := buildSignal( RepoSnapshot{FullName: "owner/repo", URL: "https://github.com/owner/repo"}, nil, - Network accessline 1226
RepoSnapshot{FullName: "owner/repo", URL: "https://github.com/owner/repo"}, - Network accessline 1245
RepoSnapshot{ FullName: "owner/agent-skills", URL: "https://github.com/owner/agent-skills", - Network accessline 1246
FullName: "owner/agent-skills", URL: "https://github.com/owner/agent-skills", Description: "Agent skills registry and marketplace for Claude Code", - Network accessline 1247
URL: "https://github.com/owner/agent-skills", - Network accessline 1253
map[string]int{"novelty": 2, "adoption_velocity": 2, "commercial_relevance": 3, "evidence_quality": 2, "urgency": 2}, `buyer_evidence=1, discovery_query="agent skills", artifact_terms=agent,skill,skills, Total score 11.`, EvidenceContex - Network accessline 1254
`buyer_evidence=1, discovery_query="agent skills", artifact_terms=agent,skill,skills, Total score 11.`, EvidenceContext{BuyerEvidence: []BuyerEvidence{{Claim: "Team asks how to install skills.", Source: "https://example.com/issue", Confid - Network accessline 1255
EvidenceContext{BuyerEvidence: []BuyerEvidence{{Claim: "Team asks how to install skills.", Source: "https://example.com/issue", Confidence: 0.7}}}, - Network accessline 1278
RepoSnapshot{ FullName: "owner/codex-model-dump", URL: "https://github.com/owner/codex-model-dump", - Network accessline 1279
FullName: "owner/codex-model-dump", URL: "https://github.com/owner/codex-model-dump", Description: "Codex model weights and benchmark notes", - Network accessline 1280
URL: "https://github.com/owner/codex-model-dump", - Network accessline 1334
snap := RepoSnapshot{ FullName: "builders/opentag", URL: "https://github.com/builders/opentag", - Network accessline 1335
FullName: "builders/opentag", URL: "https://github.com/builders/opentag", Description: "Open-source @agent mentions for Slack and GitHub. Routes tagged requests to Codex and Claude Code.", - Network accessline 1336
URL: "https://github.com/builders/opentag", Description: "Open-source @agent mentions for Slack and GitHub. Routes tagged requests to Codex and Claude Code.", Stargazers: 371, - Network accessline 1371
snap := RepoSnapshot{ FullName: "noise/codex-orange-book", URL: "https://github.com/noise/codex-orange-book", - Network accessline 1372
FullName: "noise/codex-orange-book", URL: "https://github.com/noise/codex-orange-book", Description: "Codex guide from install to examples, unofficial PDF download", - Network accessline 1373
URL: "https://github.com/noise/codex-orange-book", Description: "Codex guide from install to examples, unofficial PDF download", Stargazers: 2375, - Network accessline 1400
snap := RepoSnapshot{ FullName: "noise/repo-qwdkp0n8", URL: "https://github.com/noise/repo-qwdkp0n8", - Network accessline 1401
FullName: "noise/repo-qwdkp0n8", URL: "https://github.com/noise/repo-qwdkp0n8", CreatedAt: "2026-06-30T03:31:02Z", - Network accessline 1402
URL: "https://github.com/noise/repo-qwdkp0n8", - Network accessline 1429
snap := RepoSnapshot{ FullName: "blackhorse/sandbox", URL: "https://github.com/blackhorse/sandbox", - Network accessline 1430
FullName: "blackhorse/sandbox", URL: "https://github.com/blackhorse/sandbox", Description: "Hermetic environments for long-running autonomous tasks", - Network accessline 1431
URL: "https://github.com/blackhorse/sandbox", - Network accessline 1465
Source: "bocha_web", Title: "Teams ask pricing for agent workflow automation", URL: "https://example.com/agent-pricing", - Network accessline 1466
Title: "Teams ask pricing for agent workflow automation", URL: "https://example.com/agent-pricing", Snippet: "enterprise team pricing and workflow automation pain", - Network accessline 1467
URL: "https://example.com/agent-pricing", - Network accessline 1482
t.Fatalf("external-only signal must not STRIKE: %#v", signal) } if signal.Sources[0] != "https://example.com/agent-pricing" { - Network accessline 1483
} if signal.Sources[0] != "https://example.com/agent-pricing" { t.Fatalf("expected external source URL, got %#v", signal.Sources) - Network accessline 1484
if signal.Sources[0] != "https://example.com/agent-pricing" { - Network accessline 1580
"pushedAt":"2026-06-29T08:00:00Z", "updatedAt":"2026-06-29T08:00:00Z", "url":"https://github.com/owner/repo", - Network accessline 1581
"updatedAt":"2026-06-29T08:00:00Z", "url":"https://github.com/owner/repo", "repositoryTopics":[{"name":"agent"}] - Network accessline 1582
"url":"https://github.com/owner/repo", - Network accessline 1667
"pushedAt":"2026-07-30T08:00:00Z", "updatedAt":"2026-07-30T08:00:00Z", "url":"https://github.com/owner/shared", - Network accessline 1668
"updatedAt":"2026-07-30T08:00:00Z", "url":"https://github.com/owner/shared", "repositoryTopics":[{"name":"agent"}] - Network accessline 1669
"url":"https://github.com/owner/shared", - Network accessline 1761
SignalID: "sig-overflow", CapturedAt: "2026-06-29T09:00:00Z", Sources: []string{"https://github.com/owner/overflow"}, - Network accessline 1762
CapturedAt: "2026-06-29T09:00:00Z", Sources: []string{"https://github.com/owner/overflow"}, Evidence: []Evidence{{Claim: "x", Source: "https://github.com/owner/overflow", Confidence: 0.7}}, - Network accessline 1763
Sources: []string{"https://github.com/owner/overflow"}, - Network accessline 1764
Evidence: []Evidence{{Claim: "x", Source: "https://github.com/owner/overflow", Confidence: 0.7}}, - Network accessline 1778
SignalID: "sig-ignore", CapturedAt: "2026-06-29T09:00:00Z", Sources: []string{"https://github.com/owner/ignore"}, - Network accessline 1779
CapturedAt: "2026-06-29T09:00:00Z", Sources: []string{"https://github.com/owner/ignore"}, Evidence: []Evidence{{Claim: "x", Source: "https://github.com/owner/ignore", Confidence: 0.7}}, - Network accessline 1780
Sources: []string{"https://github.com/owner/ignore"}, - Network accessline 1781
Evidence: []Evidence{{Claim: "x", Source: "https://github.com/owner/ignore", Confidence: 0.7}}, - Network accessline 2255
CreatedAt: "2026-06-27T09:00:00Z", UpdatedAt: "2026-06-29T09:00:00Z", URL: "https://github.com/topic/repo", - Network accessline 2256
UpdatedAt: "2026-06-29T09:00:00Z", URL: "https://github.com/topic/repo", }} - Network accessline 2257
URL: "https://github.com/topic/repo", - Network accessline 2265
CreatedAt: "2026-06-24T09:00:00Z", UpdatedAt: "2026-06-29T09:00:00Z", URL: "https://github.com/query/repo", - Network accessline 2266
UpdatedAt: "2026-06-29T09:00:00Z", URL: "https://github.com/query/repo", }} - Network accessline 2267
URL: "https://github.com/query/repo", - Network accessline 2309
CreatedAt: "2026-07-29T09:00:00Z", UpdatedAt: "2026-07-30T09:00:00Z", URL: "https://github.com/query/black-horse", - Network accessline 2310
UpdatedAt: "2026-07-30T09:00:00Z", URL: "https://github.com/query/black-horse", }} - Network accessline 2311
URL: "https://github.com/query/black-horse",
internal/sondar/schema_test.go
- Executable scriptline 1
Executable file
internal/sondar/source_items.go
- Executable scriptline 1
Executable file
internal/sondar/source_items_test.go
- Executable scriptline 1
Executable file - Network accessline 12
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items?mode=selected", - Network accessline 13
SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items?mode=selected", RunKey: "aihot:selected:2026-07-08T12:00:00Z", - Network accessline 14
Locator: "https://aihot.virxact.com/api/public/items?mode=selected", - Network accessline 27
SourceType: "aihot", ExternalID: "cm9abc456def789ghi012jkl3", URL: "https://www.anthropic.com/news/claude-opus-4-7", - Network accessline 28
ExternalID: "cm9abc456def789ghi012jkl3", URL: "https://www.anthropic.com/news/claude-opus-4-7", Permalink: "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", - Network accessline 29
URL: "https://www.anthropic.com/news/claude-opus-4-7", - Network accessline 30
Permalink: "https://aihot.virxact.com/items/cm9abc456def789ghi012jkl3", - Network accessline 67
state := openTestState(t) run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items", - Network accessline 68
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items", RunKey: "aihot:test", StartedAt: "2026-07-08T12:00:00Z", MetadataJSON: "{}", - Network accessline 69
SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items", - Network accessline 75
item := SourceItem{ SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "same", URL: "https://example.com/original", Title: "First", CanonicalText: "First text", - Network accessline 76
SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "same", URL: "https://example.com/original", Title: "First", CanonicalText: "First text", ItemKind: "artifact_launch", CapturedAt: "2026-07-08T12:00:00Z", - Network accessline 77
URL: "https://example.com/original", Title: "First", CanonicalText: "First text", - Network accessline 98
state := openTestState(t) run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://example.com/items", - Network accessline 99
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://example.com/items", RunKey: "aihot:changes", StartedAt: "2026-07-24T08:00:00Z", - Network accessline 100
SourceType: "aihot", Locator: "https://example.com/items", - Network accessline 106
item := SourceItem{ SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "stable", URL: "https://example.com/story", Title: "Story", CanonicalText: "Story first", - Network accessline 107
SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "stable", URL: "https://example.com/story", Title: "Story", CanonicalText: "Story first", ItemKind: "curated_attention", CapturedAt: "2026-07-24T08:00:00Z", - Network accessline 108
URL: "https://example.com/story", Title: "Story", CanonicalText: "Story first", - Network accessline 145
} run, err := state.StartSourceRun(SourceRunInput{ SourceType: "ishell", Locator: "https://ishell.online/", - Network accessline 146
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "ishell", Locator: "https://ishell.online/", RunKey: "ishell:first", StartedAt: "2026-07-24T08:00:00Z", - Network accessline 147
SourceType: "ishell", Locator: "https://ishell.online/", - Network accessline 153
_, err = state.SaveSourceItems([]SourceItem{{ SourceID: run.SourceID, RunID: run.RunID, SourceType: "ishell", ExternalID: "one", URL: "https://example.com/one", Title: "One", CanonicalText: "One", - Network accessline 154
SourceID: run.SourceID, RunID: run.RunID, SourceType: "ishell", ExternalID: "one", URL: "https://example.com/one", Title: "One", CanonicalText: "One", ItemKind: "curated_article", CapturedAt: "2026-07-24T08:00:00Z", - Network accessline 155
URL: "https://example.com/one", Title: "One", CanonicalText: "One", - Network accessline 169
state := openTestState(t) run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items", - Network accessline 170
run, err := state.StartSourceRun(SourceRunInput{ SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items", RunKey: "aihot:evidence", StartedAt: "2026-07-08T12:00:00Z", MetadataJSON: "{}", - Network accessline 171
SourceType: "aihot", Locator: "https://aihot.virxact.com/api/public/items", - Network accessline 177
item := SourceItem{ SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "item-1", URL: "https://example.com/original", Title: "Model launch", CanonicalText: "Model launch", - Network accessline 178
SourceID: run.SourceID, RunID: run.RunID, SourceType: "aihot", ExternalID: "item-1", URL: "https://example.com/original", Title: "Model launch", CanonicalText: "Model launch", ItemKind: "artifact_launch", CapturedAt: "2026-07-08T12:00:0 - Network accessline 179
URL: "https://example.com/original", Title: "Model launch", CanonicalText: "Model launch", - Network accessline 192
signal.Evidence = []Evidence{{ Claim: "AIHOT curated artifact launch.", Source: "https://example.com/original", - Network accessline 193
Claim: "AIHOT curated artifact launch.", Source: "https://example.com/original", Confidence: 0.45, - Network accessline 194
Source: "https://example.com/original",
internal/sondar/sources.go
- Executable scriptline 1
Executable file - Network accessline 18
var fetchURL = defaultFetchURL var fetchURLWithHeaders = defaultFetchURLWithHeaders var httpClient = &http.Client{Timeout: 10 * time.Second} - Network accessline 19
var fetchURLWithHeaders = defaultFetchURLWithHeaders var httpClient = &http.Client{Timeout: 10 * time.Second} var commandTimeout = 20 * time.Second - Network accessline 20
var httpClient = &http.Client{Timeout: 10 * time.Second} - Network accessline 90
} if payload.URL == "" { payload.URL = "https://github.com/" + fullName - Network accessline 91
if payload.URL == "" { payload.URL = "https://github.com/" + fullName } - Network accessline 92
payload.URL = "https://github.com/" + fullName - Network accessline 160
rawURL := item.URL if rawURL == "" { rawURL = "https://github.com/" + fullName - Network accessline 161
if rawURL == "" { rawURL = "https://github.com/" + fullName } - Network accessline 162
rawURL = "https://github.com/" + fullName - Network accessline 180
return nil, nil } rawURL := "https://github.com/trending" - Network accessline 181
} rawURL := "https://github.com/trending" if strings.TrimSpace(language) != "" { - Network accessline 182
rawURL := "https://github.com/trending"
internal/sondar/state.go
- Executable scriptline 1
Executable file - Network accessline 327
} _ = json.Unmarshal([]byte(topicsJSON), &snap.Topics) snap.URL = "https://github.com/" + snap.FullName - Network accessline 328
_ = json.Unmarshal([]byte(topicsJSON), &snap.Topics) snap.URL = "https://github.com/" + snap.FullName return &snap, nil - Network accessline 329
snap.URL = "https://github.com/" + snap.FullName - Network accessline 459
) VALUES(?, ?, ?, ?, ?, '{}')`, repo, capturedAt, snap.ReadmeSHA, "https://github.com/"+repo+"#readme", string(payload)) - Network accessline 460
VALUES(?, ?, ?, ?, ?, '{}')`, repo, capturedAt, snap.ReadmeSHA, "https://github.com/"+repo+"#readme", string(payload)) return err - Network accessline 461
repo, capturedAt, snap.ReadmeSHA, "https://github.com/"+repo+"#readme", string(payload))
internal/sondar/state_test.go
- Executable scriptline 1
Executable file - Network accessline 489
current.Evidence = append(current.Evidence, Evidence{ Claim: "new independent buyer clue", Source: "https://example.com/buyer", - Network accessline 490
Claim: "new independent buyer clue", Source: "https://example.com/buyer", Confidence: 0.8, - Network accessline 491
Source: "https://example.com/buyer", - Network accessline 551
SignalID: id, CapturedAt: "2026-06-29T09:00:00Z", Sources: []string{"https://github.com/example/repo"}, - Network accessline 552
CapturedAt: "2026-06-29T09:00:00Z", Sources: []string{"https://github.com/example/repo"}, Entities: []string{"example/repo", "thesis"}, - Network accessline 553
Sources: []string{"https://github.com/example/repo"}, - Network accessline 556
Summary: "test signal", Evidence: []Evidence{ {Claim: "snapshot", Source: "https://github.com/example/repo", Confidence: 0.7}, - Network accessline 557
Evidence: []Evidence{ {Claim: "snapshot", Source: "https://github.com/example/repo", Confidence: 0.7}, }, - Network accessline 558
{Claim: "snapshot", Source: "https://github.com/example/repo", Confidence: 0.7},
internal/sondar/types.go
- Executable scriptline 1
Executable file
internal/sondar/util.go
- Executable scriptline 1
Executable file
references/examples.md
- Network accessline 8
"captured_at": "2026-06-23T09:00:00Z", "sources": [ "https://github.com/example/router/issues/12", - Network accessline 9
"sources": [ "https://github.com/example/router/issues/12", "https://x.com/example/status/123", - Network accessline 10
"https://github.com/example/router/issues/12", - Network accessline 11
"https://x.com/example/status/123", - Network accessline 12
"https://pypi.org/project/example-router/" - Network accessline 18
{ "claim": "Three independent users requested Qwen provider support.", "source": "https://github.com/example/router/issues/12", - Network accessline 19
"claim": "Three independent users requested Qwen provider support.", "source": "https://github.com/example/router/issues/12", "confidence": 0.8 - Network accessline 20
"source": "https://github.com/example/router/issues/12", - Network accessline 46
"signal_id": "sig-20260623-eval-harness", "captured_at": "2026-06-23T10:00:00Z", "sources": ["https://github.com/example/eval-harness"], - Network accessline 47
"captured_at": "2026-06-23T10:00:00Z", "sources": ["https://github.com/example/eval-harness"], "entities": ["example/eval-harness"], - Network accessline 48
"sources": ["https://github.com/example/eval-harness"], - Network accessline 53
{ "claim": "Maintainer added three model comparison scripts in one day.", "source": "https://github.com/example/eval-harness/commits/main", - Network accessline 54
"claim": "Maintainer added three model comparison scripts in one day.", "source": "https://github.com/example/eval-harness/commits/main", "confidence": 0.6, - Network accessline 55
"source": "https://github.com/example/eval-harness/commits/main", - Network accessline 129
"signal_id": "sig-20260623-awesome-list", "captured_at": "2026-06-23T11:00:00Z", "sources": ["https://github.com/example/awesome-ai-tools"], - Network accessline 130
"captured_at": "2026-06-23T11:00:00Z", "sources": ["https://github.com/example/awesome-ai-tools"], "entities": ["example/awesome-ai-tools"], - Network accessline 131
"sources": ["https://github.com/example/awesome-ai-tools"], - Network accessline 136
{ "claim": "Stars increased but there are no issues, buyers, or original artifacts.", "source": "https://github.com/example/awesome-ai-tools", - Network accessline 137
"claim": "Stars increased but there are no issues, buyers, or original artifacts.", "source": "https://github.com/example/awesome-ai-tools", "confidence": 0.7 - Network accessline 138
"source": "https://github.com/example/awesome-ai-tools", - Network accessline 164
"signal_id": "sig-20260623-fake-agent", "captured_at": "2026-06-23T12:00:00Z", "sources": ["https://github.com/example/agent-wrapper"], - Network accessline 165
"captured_at": "2026-06-23T12:00:00Z", "sources": ["https://github.com/example/agent-wrapper"], "entities": ["example/agent-wrapper"], - Network accessline 166
"sources": ["https://github.com/example/agent-wrapper"], - Network accessline 171
{ "claim": "README and code are copied from two older repos.", "source": "https://github.com/example/agent-wrapper", - Network accessline 172
"claim": "README and code are copied from two older repos.", "source": "https://github.com/example/agent-wrapper", "confidence": 0.9 - Network accessline 173
"source": "https://github.com/example/agent-wrapper",
schemas/signal.schema.json
scripts/ai-builders-daily.sh
- Executable scriptline 1
#!/usr/bin/env bash
scripts/build-release.sh
skills/finding-ai-builders/SKILL.md
- Network accessline 121
Input: "Find real AI builders like https://github.com/steipete and monitor what they are building."
skills/finding-ai-builders/evals/evals.json
- Network accessline 4
{ "id": 1, "prompt": "https://github.com/steipete 帮我找真正类似 Peter 的 AI Builder,并把他们正在构建和关注的事监控起来。", - Network accessline 5
"id": 1, "prompt": "https://github.com/steipete 帮我找真正类似 Peter 的 AI Builder,并把他们正在构建和关注的事监控起来。", "expected_output": "Defines the seed builder pattern, identifies builders with shipped artifacts, updates or proposes Sondar watchli - Network accessline 6
"prompt": "https://github.com/steipete 帮我找真正类似 Peter 的 AI Builder,并把他们正在构建和关注的事监控起来。",
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 3 facts
- Contacts aihot.virxact.com, which SKILL.md, the README and the plugin manifest do not mentioninternal/sondar/aihot.go:10High confidence
- Contacts hnrss.org, which SKILL.md, the README and the plugin manifest do not mentioninternal/sondar/hnrss.go:14High confidence
- Contacts ishell.online, which SKILL.md, the README and the plugin manifest do not mentioninternal/sondar/ishell.go:16High confidence
Signal confidence: 497 facts
- Network access in prose of documentationCHANGELOG.md:20Low confidence
- Executable script in code of a file that runsMakefile:1High confidence
- Dangerous shell operation in code of a file that runsMakefile:44High confidence
- Network access in prose of documentationREADME.md:7Low confidence
- Network access in prose of documentationREADME.md:8Low confidence
- Network access in prose of documentationREADME.md:9Low confidence
- Network access in prose of documentationREADME.md:120Low confidence
- Network access in code of the SKILL.mdSKILL.md:148High confidence
- Network access in code of the SKILL.mdSKILL.md:149High confidence
- Network access in code of the SKILL.mdSKILL.md:150High confidence
- Network access in code of the SKILL.mdSKILL.md:155High confidence
- Network access in code of the SKILL.mdSKILL.md:156High confidence
- Network access in code of the SKILL.mdSKILL.md:157High confidence
- Executable script in code of a file that runscmd/sondar/main.go:1High confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:29Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:30Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:31Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:32Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:33Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:39Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:40Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:41Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:42Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:43Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:44Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:45Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:46Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:47Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:48Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:49Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:50Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:51Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:52Low confidence
- Network access in prose of documentationdocs/ai-builder-watchlist.md:53Low confidence
- Network access in code of documentationdocs/source-adapters.md:77Low confidence
- Network access in code of documentationdocs/source-adapters.md:78Low confidence
- Network access in code of documentationdocs/source-adapters.md:79Low confidence
- Network access in code of documentationdocs/source-adapters.md:80Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:160Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:248Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:249Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:250Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:254Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:255Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:256Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:259Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:260Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:261Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:267Low confidence
- Network access in code of documentationdocs/superpowers/plans/2026-07-24-ishell-source.md:268Low confidence
and 447 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.