riko CLAUDE.md

riko CLAUDE.md is an instructions file for coding agents from nerevu/riko. It costs 8,098 tokens per session, scanned A, original, MIT.

Repository instructions for riko, a Python stream-processing engine modeled after Yahoo! Pipes. They map important files and document rules that preserve its behavior and public interfaces.

In plain words
What is it for?
Use them when changing riko's pipe modules, collections, public imports, internal implementation, or documentation.
Why use it?
They give agents the project layout and correctness constraints needed to avoid breaking exports, asynchronous processing, or documentation conventions.

Instructions file

About the project

nerevu/riko is a Python engine for processing streams of data, modeled after Yahoo! Pipes. It is intended for building data and ETL workflows that can handle sources such as RSS feeds with asynchronous and parallel processing.

nerevu/riko · 1,606 stars · on GitHub

Install

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.

agentmods
npx agentmods add instructions/nerevu/riko/claude-md
Clone the repo
git clone --depth 1 https://github.com/nerevu/riko

Wrote 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.

agentmods badge for riko CLAUDE.md

README.md
[![agentmods](https://agentmods.dev/badge/instructions/nerevu/riko/claude-md.svg)](https://agentmods.dev/instructions/nerevu/riko/claude-md)
Your own site
<a href="https://agentmods.dev/instructions/nerevu/riko/claude-md"><img src="https://agentmods.dev/badge/instructions/nerevu/riko/claude-md.svg" alt="Measured on agentmods" height="20"></a>
Per session 8,098 This file is loaded in full into every session.
When invoked 8,098 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5 $0.08098 $0.08098
Opus 5 $0.04049 $0.04049
Sonnet 5 $0.01620 $0.01620
Haiku 4.5 $0.00810 $0.00810

Measured 2d ago against content hash 2613917eef5e, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

riko CLAUDE.md 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 2d 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.

CLAUDE.md · 116 lines

How it starts

The opening of the file, as written. The whole thing — 116 lines — stays where its author put it; the contents beside it link to each section on GitHub.

riko

Python stream processing engine modeled after Yahoo! Pipes.

This file holds the index plus the correctness invariants. Long-form detail lives in _docs/:

  • _docs/INTERNALS.md — codegen rules, discovery/export surfaces, tooling gotchas
  • _docs/DOCUMENTATION_STANDARD.mdread before writing docstrings/doctests
  • _docs/PHASE_CHECKLISTS.md — live status (start here); _docs/ROADMAP.md — gameplan index

Key Paths

Path Role
riko/collections.py SyncPipe, AsyncPipe, SyncCollection, AsyncCollection; Targets export enum, export(), list_targets()
riko/modules/ individual pipe implementations (fetch, filter, hash, etc.)
riko/modules/__init__.py narrow module-dev facade — __all__ is exactly 9 names: processor/operator/splitter, list_modules/get_module_metadata/describe_module, ModuleMetadata/ModuleSubtype/ModuleType. Everything else (PreparedModule, parse_and_cast, get_casters, broadcast, objectify, the types.general aliases, …) is private — import from its defining module (from riko.modules._prepare import PreparedModule), never through this package
riko/modules/_decorators.py Module base + processor/operator/splitter decorators; sync/async wrappers, incl. implicit-looping auto-map: a processor maps over any non-mapping/non-primitive iterable (list/tuple/range/generator/iterator, gated by _iterutils.is_listlike); a mapping/primitive/None stays one item so None still invokes source pipes
riko/modules/_loop.py loop execution — _run_loop_sync/_run_loop_async, loop_embed_sync/loop_embed_async, per-parent _fold_parent/_take/_take_first. LoopRawConf/LoopConf (count/assign/field + compact embed) belong to the explicit loop module — kept, not vestigial, distinct from implicit looping. The legacy nested conf.embed.value form is gone
riko/modules/_derive.py init-time type/subtype derivation (derive_loopable/derive_subtypes) — a leaf (no riko.ext imports) split out of _metadata so decorators can pull it during riko.modules init
riko/modules/_names.py generated discovery surface: flat Modules + Sources/Transforms/Sinks bucket StrEnums (Modules.FILTER is Transforms.FILTER); re-exported from riko. Never hand-edit (run gen-names)
riko/parsers.py sync XML/HTML parsing (xml2etree, LinkParser, etc.)
riko/dates.py + riko/_date_utils.py date helpers. _date_utils is the leaf half (parse_date_string, ensure_tzinfo, date_to_datetime, tt_to_datetime, date_to_tt, tz lookup) — imports nothing from riko outside types, so _iterutils can use it for sort keys without a cycle; dates.py keeps the riko-aware half (NOW/TODAY, get_date, tt_to_datedict)
riko/bado/__init__.py async backend detection (AnyIO or empty fallback)
riko/bado/io.py async file/URL I/O (async_url_read, async_url_open, async_write, get_async_temp_file). async_write is the anyio-native counterpart of meza.io.write (chunk/mode/encoding parity, no sync fallback); get_async_temp_file is a plain def returning anyio's NamedTemporaryFile CM, so async with needs no await. async_url_open is likewise a plain def returning an _AsyncURLStream handle that is both awaitable (await async_url_open(url) → open stream, caller closes) and an async CM (async with async_url_open(url) as f → auto-closes on exit). It is eager-read, lazy-parse — the full body is buffered via response.content/Path.read_bytes (no read-time backpressure), only parsing stays lazy. The fetch parsers pair await async_url_open with _io.auto_close (close-on-iteration); never "tidy" them into async with, which closes the handle before the returned lazy iterator is read. True httpx.stream() body reads + AsyncClient reuse are unimplemented (_docs/IMPLEMENTED.md §2)
riko/bado/itertools.py async itertools: async_map + streaming async_map_stream/async_map_ordered_stream, async_merge, coop_reduce/async_reduce, async_iter
riko/bado/_util.py async utilities (async_sleep, defer_to_process)
riko/_pubsub/ pub/sub package (send/receive/coroutine, reset_pubsub) — state via contextvars; _sync.py/_async.py. (riko/utils.py/helpers.py are gone — decomposed into _io/_iterutils/_serialize/_strutils/_logging, graph→compile.py, parse_contextcontext.py, pub/sub→_pubsub)
riko/exceptions.py hierarchy rooted at RikoError (ModuleError/PipelineError/PubSubError bases): UnsupportedModuleError (unresolved leaf module) / UnsupportedPipelineError (unresolved pipe_* sub-pipeline) — both from resolve_module in compile.py; PipelineStateError; pub/sub ReceiverUnavailableError/DuplicateReceiverError. Only RikoError/PipelineStateError/Unsupported* are stable (ROOT_EXCEPTIONS in riko/_api_surface.py) — bases + pub/sub errors are not
riko/_api_surface.py private declaration of the supported import contract — STABLE (= BADO/COLLECTIONS/COMPILE/MODULES/OTHER/ROOT_EXCEPTIONS), EXTENSION, TYPES, PRIVATE_RESOLUTION frozensets. Source of truth for _docs/API_SURFACE.md + tests/public/test_imports.py; not itself public
riko/dotdict.py DotDict — case-insensitive nested dict for pipe items (dotted keys = nested paths; see _docs/gameplans/dotdict-parsing.md for the data-derived-key footgun)
riko/cli/ compile.py (compile-pipe), convert_dag.py (convert-dag), gen_config.py (gen-config), gen_names.py (gen-names), manage.py (manage). compile-pipe reads stdin when its path is -/omitted (pipe name anonymous) so it chains off convert-dag; -v reports deps + bytes to stderr, keeping stdout a clean source stream. The legacy bin/compile is gone — it had been dead since riko.utils was decomposed, and its -p/-o/-s options scraped Yahoo! Pipes (retired 2015). Don't resurrect it
riko/types/configs.py fully generated per-module <Name>Objconf(DynamicConf) parse-time types; imports + re-exports DynamicConf from riko/types/base.py (edit modules.py contracts, run gen-config — never hand-edit)
riko/types/base.py hand-maintained DynamicConf(Objectify[Any]) base, kept out of generated configs.py so it can regenerate safely
riko/types/_module_ids.py generated ModuleId (every built-in id) + LoopableModuleId (loopable subset); pure typing-only leaf. Never hand-edit (run gen-names)
riko/ext/names.py ModuleName(StrEnum) base + ModuleNameLike/normalize_module_name; derive_category/SINK_NAMES
riko/ext/codegen.py codegen — enum_member_name, catalog_entries, generate_module_names, plus ruff_format(str)->str, the shared formatter for all three generators
riko/transform.py column transformation helpers (shelved; ideas folded into _docs/gameplans/)

Read the full file on GitHub · 116 lines

Changes

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.

  1. 2d ago Changed · +4 lines · +1,175 tokens per session 2613917eef5e
  2. 5d ago First seen · 112 lines · 6,923 tokens per session scan A 01977193fd62

Subscribe to this mod's changes

riko CLAUDE.md is an instructions file published in the GitHub repository nerevu/riko (1,606 stars, last pushed yesterday), licensed MIT. It adds 8,098 tokens to every session, about $0.0405 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-30.