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 rules/vendelieu/telegram-bot/ktnip-ksp-testsgit clone --depth 1 https://github.com/vendelieu/telegram-botWrote 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/rules/vendelieu/telegram-bot/ktnip-ksp-tests)<a href="https://agentmods.dev/rules/vendelieu/telegram-bot/ktnip-ksp-tests"><img src="https://agentmods.dev/badge/rules/vendelieu/telegram-bot/ktnip-ksp-tests.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.1 | $0.00000 | $0.00651 |
| Opus 5 | $0.00000 | $0.00326 |
| Sonnet 5 | $0.00000 | $0.00130 |
| Haiku 4.5 | $0.00000 | $0.00065 |
Grade A, and why
ktnip-ksp-tests 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 7d 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 — 80 lines — stays where its author put it; the contents beside it link to each section on GitHub.
KSP Processor Test Rules
Test Base
- Extend AbstractKspTest
- Kotest AnnotationSpec with
@Test
class ProcessorTest : AbstractKspTest() {
@Test
fun defaultHandlers() = runTest("test-data/DefaultHandlers.kt")
}
runTest vs compile
- runTest(path): Load from
jvmTest/resources/test-data/<name>.kt, compile with ActivityProcessorProvider, assert exitCode OK, verify generated files (ActivitiesData.kt, KtGramCtxLoader.kt, BotCtx.kt) - compile(vararg SourceFile): Inline sources, custom processors; returns JvmCompilationResult for custom assertions
Golden Output
Hybrid: If test-data/golden/<TestName>/<FileName>.gold exists, full-file comparison is used. Otherwise, fall back to G-EXPECT.
G-EXPECT optional: When golden files exist, the G-EXPECT block can be omitted — expectations are discovered from golden files.
Update: ./gradlew :ktnip:updateGolden — run when generated output changes intentionally.
G-EXPECT (fallback)
Add /* G-EXPECT ... */ block comments to test data when no golden file exists. One block can contain multiple checks:
/* G-EXPECT
file=ActivitiesData.kt
contains="Activity"
file=KtGramCtxLoader.kt
contains="registerCommand"
contains="registerActivity"
file=BotCtx.kt
contains="userData"
contains="getState"
notContains="TODO"
noError
*/
Directives:
file=FileName.kt— target generated file (can appear multiple times)contains="..."— file must contain substringnotContains="..."— file must not contain substringmatches="regex"— file must contain a substring matching the regexnotMatches="regex"— file must not contain any substring matching the regexnoError— expect compilation success (default when no error directives)error contains="..."— expect compilation error, message containserror exact="..."— error message equalserror count=N— exactly N error lineserror file=Foo.kt line=12 contains="..."— error at file/line contains
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.
- 7d ago First seen · 80 lines · 651 tokens per session scan A 594f06427485
ktnip-ksp-tests is a cursor rule published in the GitHub repository vendelieu/telegram-bot (248 stars, last pushed 10d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 651 tokens. 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.
Other cursor rules, from other repositories
testing
Cursor rule "testing" from groupultra/telegram-search, covering testing (vitest), general guidelines, core & db tests and client & web tests.
architecture
这是一个把 Telegram 消息导入、导出到数据库中并提供搜索的服务。支持向量搜索和语义匹配,基于 OpenAI 的语义向量技术。.
backend-server
Cursor rule "backend-server" from groupultra/telegram-search, covering backend server (apps/server), bootstrap & lifecycle, http & websocket design, configuration & environment and error handling & observability.
client
Cursor rule "client" from groupultra/telegram-search, covering client adapters (packages/client), core runtime & bridge, events & type safety, pinia stores & composables and logging & error handling.
core
Cursor rule "core" from groupultra/telegram-search, covering core (packages/core), events & corecontext, database & drizzle, message resolvers & pipelines and error handling & logging.
events
When adding a new event, ensure all of the following are updated in one change.