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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

View on GitHubAdd to my skills

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>/
13GitHub stars
0stars in 7 days
2skills in this repository
0commits in 30 days

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

Oct 25, 2026Oct 25, 202613

30-day change not yet available: not enough history.

Individual skills in this repository

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 tokens

Always available to the agent

SKILL.md

2,479 tokens

When the skill is activated

Reference documents

47,954 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Purpose
  2. Trigger Contexts
  3. Operating Model
  4. Evidence Sources
  5. Scoring
  6. Required Output Contract
  7. Human Delivery Contract
  8. Decision Rules
  9. 🔴 CHECKPOINT · Before STRIKE Execution
  10. Daily Workflow
  11. Weekly Workflow
  12. Red-Team Safeguards
  13. Blacklist
  14. Reference Loading

Scripts executed separately

  • Makefile
  • cmd/sondar/main.go
  • internal/sondar/aihot.go
  • internal/sondar/aihot_test.go
  • internal/sondar/command.go
  • internal/sondar/command_test.go
  • internal/sondar/config.go
  • internal/sondar/explanation.go
  • internal/sondar/explanation_test.go
  • internal/sondar/hnrss.go
  • internal/sondar/hnrss_test.go
  • internal/sondar/ishell.go
  • internal/sondar/ishell_test.go
  • internal/sondar/report.go
  • internal/sondar/report_test.go
  • internal/sondar/repository_contract_test.go
  • internal/sondar/runner.go
  • internal/sondar/runner_test.go
  • internal/sondar/schema_test.go
  • internal/sondar/source_items.go
  • internal/sondar/source_items_test.go
  • internal/sondar/sources.go
  • internal/sondar/state.go
  • internal/sondar/state_test.go
  • internal/sondar/types.go
  • internal/sondar/util.go
  • scripts/ai-builders-daily.sh
  • scripts/build-release.sh

Files

  • .github/workflows/release.ymlasset3,229 bytes
  • .gitignoreasset397 bytes
  • AGENTS.mddoc1,453 bytes
  • CHANGELOG.mddoc945 bytes
  • LICENSEasset34,523 bytes
  • Makefileruns1,535 bytes
  • README.mddoc4,610 bytes
  • SKILL.mdcore10,558 bytes
  • SKILL.mdcore10,558 bytes
  • SKILL.mdcore10,558 bytes
  • SKILL.mdcore10,558 bytes
  • assets/readme/hero.svgasset4,998 bytes
  • cmd/sondar/main.goruns134 bytes
  • config/ai-builders.watchlist.ymlasset15,329 bytes
  • config/watchlist.example.ymlasset8,938 bytes
  • docs/ai-builder-watchlist.mddoc8,360 bytes
  • docs/sop-buyer-evidence.mddoc3,781 bytes
  • docs/sop.mddoc11,142 bytes
  • docs/source-adapters.mddoc4,037 bytes
  • docs/superpowers/plans/2026-07-24-ishell-source.mddoc54,468 bytes
  • docs/superpowers/plans/2026-07-24-readme-noise-reduction.mddoc8,515 bytes
  • docs/superpowers/plans/2026-07-24-readme-redesign.mddoc21,868 bytes
  • docs/superpowers/plans/2026-07-26-human-evidence-chain-output.mddoc13,077 bytes
  • docs/superpowers/specs/2026-07-24-ishell-source-design.mddoc14,214 bytes
  • docs/superpowers/specs/2026-07-24-readme-noise-reduction-design.mddoc5,603 bytes
  • docs/superpowers/specs/2026-07-24-readme-redesign-design.mddoc9,117 bytes
  • docs/superpowers/specs/2026-07-26-human-evidence-chain-output-design.mddoc8,537 bytes
  • evals/evals.jsonasset1,527 bytes
  • go.modasset159 bytes
  • go.sumasset690 bytes
  • internal/sondar/aihot.goruns5,307 bytes
  • internal/sondar/aihot_test.goruns4,598 bytes
  • internal/sondar/command.goruns8,725 bytes
  • internal/sondar/command_test.goruns4,647 bytes
  • internal/sondar/config.goruns3,945 bytes
  • internal/sondar/explanation.goruns12,375 bytes
  • internal/sondar/explanation_test.goruns7,361 bytes
  • internal/sondar/hnrss.goruns6,581 bytes
  • internal/sondar/hnrss_test.goruns5,505 bytes
  • internal/sondar/ishell.goruns6,789 bytes
  • internal/sondar/ishell_test.goruns3,979 bytes
  • internal/sondar/report.goruns14,612 bytes
  • internal/sondar/report_test.goruns8,510 bytes
  • internal/sondar/repository_contract_test.goruns9,577 bytes
  • internal/sondar/runner.goruns55,787 bytes
  • internal/sondar/runner_test.goruns80,318 bytes
  • internal/sondar/schema.sqlasset6,745 bytes
  • internal/sondar/schema_test.goruns2,275 bytes
  • internal/sondar/source_items.goruns901 bytes
  • internal/sondar/source_items_test.goruns7,565 bytes
  • internal/sondar/sources.goruns11,108 bytes
  • internal/sondar/state.goruns27,916 bytes
  • internal/sondar/state_test.goruns20,549 bytes
  • internal/sondar/types.goruns9,519 bytes
  • internal/sondar/util.goruns1,292 bytes
  • references/examples.mddoc5,952 bytes
  • references/scoring.mddoc2,599 bytes
  • schemas/signal.schema.jsonasset3,658 bytes
  • schemas/state.schema.sqlasset6,745 bytes
  • scripts/ai-builders-daily.shruns883 bytes
  • scripts/build-release.shruns1,075 bytes
  • templates/sondar-action-brief.mddoc730 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills 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 shell

Automated 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:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/finding-ai-builders/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/finding-ai-builders/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/finding-ai-builders/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
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/>.

Makefile

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 44
    rm -rf bin dist

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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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

  • Executable scriptline 1
    Executable file
  • Network accessline 10
    const defaultAIHOTBaseURL = "https://aihot.virxact.com"

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

  • Executable scriptline 1
    Executable file
  • Network accessline 14
    const defaultHNRSSBaseURL = "https://hnrss.org"

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

  • Executable scriptline 1
    Executable file
  • Network accessline 16
    const defaultIshellBaseURL = "https://ishell.online"

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

  • Network accessline 1
    {   "$schema": "http://json-schema.org/draft-07/schema#",
  • Network accessline 2
    "$schema": "http://json-schema.org/draft-07/schema#",

scripts/ai-builders-daily.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

scripts/build-release.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 27
    rm -rf "$PACKAGE_DIR"
  • Dangerous shell operationline 28
    rm -f "$ARCHIVE"

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
Signal confidence: 497 facts

and 447 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexNativeManifest AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.