Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/cratis/ai/observable-query-curlnpx skills add Cratis/AI --skill observable-query-curlgit clone --depth 1 https://github.com/Cratis/AIWrote 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/cratis/ai/observable-query-curl)<a href="https://agentmods.dev/skills/cratis/ai/observable-query-curl"><img src="https://agentmods.dev/badge/skills/cratis/ai/observable-query-curl.svg" alt="Measured on agentmods" height="20"></a>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 | $0.00082 | $0.01109 |
| Opus 5 | $0.00041 | $0.00554 |
| Sonnet 5 | $0.00016 | $0.00222 |
| Haiku 4.5 | $0.00008 | $0.00111 |
Grade A, and why
observable-query-curl scanned grade A with 1 finding 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 4d 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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
name: observable-query-curl Copies of this mod
1 near-identical copy found in the catalogue:
- observable-query-curl — 100% identical, 0 lines differ
How it starts
The opening of the file, as written. The whole thing — 157 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Debug Observable Queries with cURL
Use this skill to help the user work with observable query endpoints from a terminal.
The main choice is:
- Snapshot GET — return the current observable value once
- Wait for first payload — block until the first payload exists
- SSE stream — keep the connection open and follow updates
- Long polling — repeat blocking HTTP requests instead of keeping one stream open
Step 1 — Identify the endpoint style
Figure out whether the user has:
- a model-bound observable query route
- a controller-based observable query route
- the observable query demultiplexer SSE endpoint
If the user does not know the route yet, help them find it before suggesting commands.
Step 2 — Choose the correct cURL workflow
A. Get the current snapshot
Use a plain GET when the user wants the current observable value right now.
curl "https://localhost:5001/api/orders/observe-all"
Explain that this returns the current QueryResult snapshot once and then closes.
B. Wait for the first payload
Use waitForFirstResult=true when the observable might not have produced its first value yet.
curl "https://localhost:5001/api/orders/observe-all?waitForFirstResult=true"
If the user wants a custom timeout, add waitForFirstResultTimeout=<seconds>.
curl "https://localhost:5001/api/orders/observe-all?waitForFirstResult=true&waitForFirstResultTimeout=10"
Explain that:
- the timeout value is in seconds
- the response is still a normal JSON
QueryResult - if the observable is not ready and waiting is not enabled, the endpoint can return a not-ready response instead of blocking
C. Stream JSON continuously with SSE
Use SSE when the user wants the observable to keep pushing updates over one connection.
curl --no-buffer \
-H "Accept: text/event-stream" \
"https://localhost:5001/api/orders/observe-all"
Explain that:
- Arc sends SSE frames such as
data: {...} - each frame contains a serialized
QueryResult --no-bufferhelps cURL print each event as it arrives
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.
- 4d ago First seen · 157 lines · 82 tokens per session scan A ab5ab7d27f22
observable-query-curl is a skill published in the GitHub repository Cratis/AI (2 stars, last pushed yesterday), licensed MIT. It adds 82 tokens to every session and 1,109 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
ship-changes
Ship staged or unstaged local changes: create a branch, make logical commits, push to origin, open a PR with the correct description and label, merge it, close the issues it resolves, and delete the branch locally and on origin. Use whenever the user asks to commit, push, create a PR, ship, or land changes.
add-concept
Use this skill when asked to create a strongly-typed domain identifier or value (such as ProjectId, AuthorName, InvoiceNumber) in a Cratis-based project. Produces a ConceptAs record with the correct conversions and sentinel values.
skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
cratis-command
Step-by-step guidance for creating a Cratis Arc command — [Command] record, Handle() method, CommandValidator, proxy generation, and React .use() hook with CommandDialog. Use when adding or creating a command, wiring up a form or button to the backend, working with IEventLog, CommandResult, CommandValidator…
cratis-readmodel
Step-by-step guidance for creating a Cratis Chronicle read model from scratch — defining events, choosing between projection and reducer, [ReadModel] record with static query methods, and the generated TypeScript proxy in React. Use when creating a read model, working with [EventType], [ReadModel], IProjectionFor…
add-traces
Use this skill when asked to add OpenTelemetry tracing to a class in a Cratis Chronicle Kernel project. Produces Traces.cs companion files using the [Span] source-generator pattern from Cratis.Traces, registers IActivitySource as a keyed DI service, and injects it into the target class.