Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/sparq-org/sparqnpx agentmods add skills/sparq-org/sparq/full-text-searchWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/sparq-org/sparq/full-text-search)<a href="https://agentmods.dev/skills/sparq-org/sparq/full-text-search"><img src="https://agentmods.dev/badge/skills/sparq-org/sparq/full-text-search/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/sparq-org/sparq/full-text-search"><img src="https://agentmods.dev/badge/skills/sparq-org/sparq/full-text-search.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00066 | $0.06279 |
| Opus 5 | $0.00033 | $0.03139 |
| Sonnet 5 | $0.00013 | $0.01256 |
| Haiku 4.5 | $0.00007 | $0.00628 |
Grade A, and why
full-text-search scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 202 lines — stays where its author put it; the contents beside it link to each section on GitHub.
sparq full-text search (sparq-text)
sparq-text is an opt-in, separate crate that adds full-text search over the string literals of a sparq Graph. It gives you two surfaces: a low-level owned BM25 inverted index (TextIndex) keyed by dictionary term id, and text: magic predicates that you write inside ordinary SPARQL and that query_text rewrites into inline VALUES over the index's hits. The engine, planner, and the lean sparq-wasm bundle carry zero text-search code — full-text support exists only when you depend on sparq-text (or load its dedicated tier-b sparq-text-wasm browser bundle; see below).
Quickstart
Cargo.toml:
[dependencies]
sparq-core = { path = "../sparq-core" }
sparq-text = { path = "../sparq-text" } # default features: ["engine", "parallel"]
use sparq_core::Graph;
use sparq_text::{query_text, TextIndex};
let g = Graph::load_str(r#"
<http://ex/post1> <http://ex/title> "The quick brown fox" .
<http://ex/post2> <http://ex/title> "Fox hunting banned" .
"#, "ntriples").unwrap();
// 1. Library-level: build the BM25 index (one dict scan), search returns Hit { id, score }.
let index = TextIndex::build(&g);
for hit in index.search("quick fox") { // AND of tokens, BM25 best-first
let literal = g.dict.term(hit.id); // hit.id IS the dict id of the literal
println!("{literal} (bm25 {})", hit.score);
}
// 2. SPARQL-level: text: magic predicates, rewritten + executed by the engine.
let r = query_text(&g, r#"
PREFIX text: <http://sparq.dev/text#>
SELECT ?post ?s WHERE {
?post <http://ex/title> ?title .
?title text:matches "fox" .
?title text:score ?s .
} ORDER BY DESC(?s)"#, &index).unwrap();
assert_eq!(r.rows.len(), 2); // r.rows: Vec<Vec<Option<oxrdf::Term>>>, r.vars
The dictionary term id of a string literal is its document id, so search results join back to subjects/predicates through the store's ordinary permutation indexes — that join is what the SPARQL surrounding the magic pattern does.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 202 lines · 66 tokens per session scan A 564ec05b90b0
full-text-search is a skill published in the GitHub repository sparq-org/sparq (12 stars, last pushed yesterday), licensed MIT. It adds 66 tokens to every session and 6,279 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
event-store-design
Design and implement event stores for event-sourced systems. Use when building event sourcing infrastructure, choosing event store technologies, or implementing event persistence patterns.
convex-explain-app
Explain an existing Convex app — data model + relationships, public vs internal functions, auth/ownership model, components, a request→data flow — read from the schema and function surface. Read-only.
platform-custom-field-generate
Use this skill when users need to create, generate, or validate Salesforce Custom Field metadata. Trigger when users mention custom fields, field types, Roll-up Summary fields, Master-Detail relationships, Lookup relationships, formula fields, picklists, dependent (controlling) picklists, referencing a value set from…
field-service-sobject-create-configure
Headless 360 REST API deployment step for creating sObject records. Handles describe-based field discovery, required-field derivation, entity-relationship ordering, and composite graph transactions. Use this skill when a designer skill (or a user directly) needs to create sObject records after design confirmation…
durable-objects
Build, debug, or review Cloudflare Durable Objects code for persistent state and coordination.
nornicdb-grpc
Drive NornicDB over gRPC — the Qdrant-compatible surface (Collections, Points, Snapshots) plus the additive NornicSearch service. Use when ingesting via Qdrant SDKs, migrating from Qdrant, or running hybrid text+vector search from a non-Bolt client. Covers connection, RPC catalog, collection→database mapping…