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 skills add sonichi/sutando --skill learning-windowgit clone --depth 1 https://github.com/sonichi/sutandoWrote 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/sonichi/sutando/learning-window)<a href="https://agentmods.dev/skills/sonichi/sutando/learning-window"><img src="https://agentmods.dev/badge/skills/sonichi/sutando/learning-window/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/sonichi/sutando/learning-window"><img src="https://agentmods.dev/badge/skills/sonichi/sutando/learning-window.svg" alt="Reviewed on agentmods" width="80" 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.1 | $0.00016 | $0.01926 |
| Opus 5.5 | $0.00006 | $0.00770 |
| Sonnet 5.5 | $0.00003 | $0.00385 |
| Haiku 4.5 | $0.00002 | $0.00193 |
Grade A, and why
learning-window 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 8d 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 — 157 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Learning window state
This optional workflow component owns learning collection checkpoints, not a resident gateway event cursor, task inbox, or transport lifecycle. It starts no resident daemon. Network reads delegate adapter-supplied capabilities and the existing cloud auth/HTTP owner. Core services do not depend on it.
The dispatcher supplies current joined membership for every configured scope.
scripts/window_state.py:plan_windows returns each scope's earliest unread
timestamp, including the immutable bootstrap timestamp for a newly joined room
or newly configured scope. Never initialize a new room from another room's or
scope's current timestamp.
After a trusted bounded collector returns a scope-qualified receipt, the
dispatcher calls record_collection with the dedicated private state directory.
The writer locks and validates state, atomically persists the complete receipt,
then records collection progress only for rooms with covered available history.
Failures and exhausted page budgets leave unread rooms at their prior position.
The receipt's overall success flag cannot override a failed room. The persisted
receipt contains unlearned events and must survive until its consumer commits
them to a durable facts store.
Collection is not learning. This writer never advances a learned-facts cursor or claims dossiers changed. A recency-only update does not consume facts. Consumer acknowledgment and receipt retention need their own tested contract before unattended operation; never prune unlearned receipts to make a size gate pass.
scripts/collection_pass.py:collect_pass accepts an explicit configured scope list
and injected membership/collector capabilities. It validates exact membership and
window binding, persists partial receipts, and admits a consumer only when every
configured scope has covered available history. It does not invoke a consumer or
acknowledge facts. The optional dispatcher delegates to this contract. Direct model-authored
receipt files are not trusted collector evidence. Same-user filesystem access can
bypass any optional writer; do not claim this is all-provider authorization or
mandatory protection of a legacy cursor.
command_collection.py:collect_commands invokes adapter-injected argument vectors
for each configured hostname scope with strict rooms and bounded history
commands. Credential/environment resolution belongs to those adapters. Partial
strict failures are persisted with unread coverage; command timeouts and scope
mismatches prevent consumer admission. No network command was exercised by its
offline tests; adapter deployment and scheduled live runs need separate evidence.
Scope exceptions retain their type and a fixed error_stages label for membership
read/validation, history read, window order/validation or receipt persistence.
Labels contain no exception text, command output or credentials; a history-read
label alone does not distinguish network failure from command-output validation.
launch.sh manifest directory log detaches dispatch_collection.py with explicit
manifest config, a dedicated private collection state directory and a caller
resolved log path. It delegates interpreter selection to the repository Python
resolver. A launch receipt means dispatcher requested, not consumer completion.
The locked dispatcher performs collection before invoking the configured consumer
argument vector and supplies every retained digest-verified bundle. No fact
acknowledgment or receipt deletion is implemented; consumer exit stays unverified.
Scope keys must match the canonical collector gateway hostname, not a Matrix
homeserver alias. Private dispatcher wiring belongs to the caller's adapter.
Consumers run in their own process group. Before final readback and lock release, the dispatcher kills remaining group members and reaps its direct child, including on timeout, normal exit, and SIGTERM/SIGINT cancellation. A child deliberately escaping the group is outside this guarantee; this is not a sandbox.
What ships with it
14 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- manifest.json 562 B
- scripts/check_return.py 1.6 KB runs code
- scripts/cloud_person_read.py 1.2 KB runs code
- scripts/collection_claims.py 4.8 KB runs code
- scripts/collection_pass.py 2.5 KB runs code
- scripts/command_collection.py 2.5 KB runs code
- scripts/consumer_return.py 3.5 KB runs code
- scripts/dispatch_collection.py 9.1 KB runs code
- scripts/document_effect.py 1.1 KB runs code
- scripts/launch.sh 706 B runs code
- scripts/pending_candidates.py 4.1 KB runs code
- scripts/readback_adapter.py 3.1 KB runs code
- scripts/receipt_status.py 2.5 KB runs code
- scripts/window_state.py 6.2 KB runs code
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.
- 8d ago First seen · 157 lines · 16 tokens per session scan A e1b8ab657bb5
learning-window is a skill published in the GitHub repository sonichi/sutando (396 stars, last pushed today), licensed MIT. It adds 16 tokens to every session and 1,926 once invoked, about $0.0001 per session on Opus 5.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-10-08.
Other skills, from other repositories
vellum-memory-v3-migration
One-time migration of an existing memory-v2 concept corpus into the memory-v3 section-grain "wiki" — topical articles with a stand-alone lead and queryable sections — with loss-proof staging, assistant-reviewed authoring, and a retrieval-eval gate before cutover.
vellum-memory-v2-migration
Perform a one-time migration from memory v1, to memory v2, which was introduced in 0.8.0.
daily-briefing
Proactive daily briefing that fires on a recurring schedule, pulls recent memory and workspace context, composes a structured summary (action items, progress, radar, next steps), and delivers it to all active channels. Enable with a time like "set up my daily briefing at 9am". Disable, reschedule, or check status at…
openclaw-lite
On first message, check if /.loci/lite/tasks/active.md exists.
loci
Use a shared local Loci brain for personal memory, tasks, notes and project context.
memory-corpus-ingest
Ingest a large dataset into memory as a skimmed map. Cold-store the raw files under a workspace imports directory, census them into a slice plan, skim each slice into compact map pages that point back at the raw files, ingest the map with the memory ingest CLI, and author a drill-in retrieval skill so the corpus stays…