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 instructions/samoylenkodmitry/cranpose/agents-mdgit clone --depth 1 https://github.com/samoylenkodmitry/CranposeWrote 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/instructions/samoylenkodmitry/cranpose/agents-md)<a href="https://agentmods.dev/instructions/samoylenkodmitry/cranpose/agents-md"><img src="https://agentmods.dev/badge/instructions/samoylenkodmitry/cranpose/agents-md.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.02936 | $0.02936 |
| Opus 5 | $0.01468 | $0.01468 |
| Sonnet 5 | $0.00587 | $0.00587 |
| Haiku 4.5 | $0.00294 | $0.00294 |
Grade A, and why
Cranpose AGENTS.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 3d 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 — 124 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Agent Notes for cranpose
- no unsafe
- just test, just clippy, just fmt #
justlists every gate; CI runs these same recipes - KISS, DRY, SOLID. don't copy-paste lazily
- Use
cargo add <crate>to add dependencies. - Use
cargo upgradeto upgrade dependencies. - Use
anyhowfor error handling in application code; usethiserrorfor library code. - Write unit tests for all public functions and methods.
- Write integration tests in the
testsdirectory. - Follow idiomatic Rust naming conventions (snake_case for variables and functions, CamelCase for types and traits).
- CamelCase for #[composable] functions
- Use
Result<T, E>for functions that can fail; prefer specific error types overBox<dyn Error>. - Use
Option<T>for values that can be absent. - Use
async/awaitfor asynchronous code; prefertokioas the async runtime. - do proper review mitigation; don't short-cut and do a honest professional work; be very strict to your code & architecture decisions; keep repo clean and don't put unfinished parts here; fix everything
- do not create a half-migrated state of the repo; don't "deprecate"; always change the existing code
- just android # :app:assembleRelease in apps/android-demo/android
- just web # always --release; the fast path skips the wasm size budget
- (+robot tests)
- instead of accepting the shortcut always choose to fix the underlying architecture issue
- do not avoid and do not defer the big architecture refactoring when necessary
- if there is a bug start with writing a failing test that will catch it so we never regress to it again in the future
- do a code review; look for any shortcuts, laziness, taking the easy path instead of doing the hard necessary work, poor architectural choices, everything that will shoot in the foot, poorly written code like it was a deadline 1 minute before end of the work day; but not invent the problems if there arent any- don't fear the significant arch change; everything is still pre-alpha; this is the right time for a big change
- do not ever git reset, always stash if needed
- do not ever remove recursively by \r\m -\r\f, prefer mv to some _old name
- never chain a delete with anything else. A removal runs as its own command,
never joined by
&&,;or|, never inside a loop body that also does other work, and never after acdin the same command. A chained delete is reviewed as one line but executes with whatever state the earlier part left behind, so a failedcdor an unset variable silently changes what gets removed. Run the delete alone, then verify the result in a separate command - all tests should pass, its never not yours
- zero warnings on all build/clippy/test commands, never was pre-existing
- the #[cfg(feature = "robot-app")] is forbidden
- reference JC kt repo (androidx/androidx, the actual Jetpack Compose source) on
samarch-1 at /media/huge/projects/android/androidx -- NOT /media/huge/composerepo/,
which does not exist and misdirected an earlier session. It is a fork (
origin= samoylenkodmitry/androidx,upstream= androidx/androidx) on branch androidx-main, and it is STALE: as of 2026-08-29 its compose/*/api/current.txt is still at commit be18a1188a13a253d2a6784f812815c88454775c, dated 2023-06-26 (~Compose 1.5.0-beta era). Treat anything read from it as true as of mid-2023, not current, until someone re-syncs it -- see docs/compose_api_parity.md for what that staleness costs. - use samarch-1 or the mac by ssh for builds where possible:
ssh samarch-1(Linux, Android SDK at /home/s/develop/sdk, X11 for the robot suite) andssh macm3(macOS, Apple toolchains). They are faster than this machine and keep long compiles off it. Note both hosts log in over ssh with zsh -- samarch-1 is Linux but its login shell is zsh as well -- and zsh does not word-split unquoted expansions, so wrap remote scripts inbash -lc "...". Skipping that on the Linux host does not error: loops iterate once over the whole string and report success having done nothing. - the CI runner names mislead.
mac-idle-Cranposeis this Mac: it registers only while nobody is at the keyboard and exists for signing, so offline is its normal state, it is not spare macOS capacity, and bringing it up is not a way to speed CI. macm3 hosts two runners for this repo,dmitriis-mac-Cranposeandmacm3-cranpose-2, so macOS jobs run two at a time there rather than serialising on one. The Linux heavy pool is two --samarch-1-cranposeandsamarch-1-cranpose-2; the Macs carrycranpose-heavyas well but do not match[self-hosted, Linux, ...]. A deep queue is queueing, not a stall: the jobs API lags the runner by minutes, so read that runner's own_diag/Runner_*.logfor JobDispatcher lines and check its load before diagnosing one. - reclaim build artifacts with
just gc(report) andjust gc-apply(reclaim); never hand-delete atarget/orbuild/directory. Each agent worktree builds a full Rust target tree (15-100GB for this workspace) and nothing used to reclaim them; on 2026-08-29 they reached ~350GB across.claude/worktrees/and filled this Mac to 100%, which hard-stopped a running agent mid-investigation. Do not judge for yourself when a worktree is finished:cargo testwrites nothing totarget/while it RUNS the binaries it has already built, so an idle-lookingtarget/may belong to a suite that is mid-run, and deleting it gives a neighbourcould not execute process target/ci/deps/<test>-<hash> ... No such file or directory (os error 2), which reads exactly like a test bug and is not one.just gcdecides from live processes and write recency instead of from anyone's belief about being done: it protects any worktree with a live process, protects any target written recently, only ever removes directories carrying cargo's ownCACHEDIR.TAGmarker, and is dry-run by default. It sweeps the repository you are standing in, so run it from the worktree you mean. Never remove a worktree's source or anything uncommitted. Checkdf -h /before a large build --just test,just clippy,just web,just androidandjust robotdo it for you and refuse rather than dying asNo space left on device scripts/ci/with_host_lock.shgates samarch-1's CPU:--sharedfor a build (any number concurrently),--exclusivefor a measurement or a robot suite (one at a time, nothing else running beside it). It is flock-based, so a crash or a cancelled job releases it immediately -- no stale PID file, no cleanup step to skip. This applies to work done byssh samarch-1exactly as much as to CI; it is the same machine and the same two runners either way. Take the lock rather than watching load and waiting for a quiet moment -- the lock queues you, and waiting for quiet on a shared host is polling for a moment that may never arrive.- perf scripts are perf*.sh at project root
- e2e robot headless tests is
just robot(should all pass) - run_robot_test.sh manages the samarch-1 host lock itself; wrapping it in with_host_lock.sh self-deadlocks (the inner acquisition waits forever on your outer hold) and starves every CI job on the host while it hangs. Invoke it bare — the lock exists to serialize robot suites, and the script is already the lock taker
- do not use big models as subagents (opus, codex xhigh thinking, etc), only small fast & cheap to not waste tokens
- no 'backwards compatibility' is allowed; we in a pre-alpha
- no comments in style "now it is like that" - we are not writing history
- code comments are forbidden; documentation of the public API surface is required.
//////!stay only on items reachable aspubfrom a crate root of a published crate; everything else, including doc comments on private or test-only items, is a comment and goes - duplicated code (10+ lines) without architecture is forbidden
- 'legacy'/'old way' etc not allowed. we are in a pre-alpha, everything is fresh, clean, single instance
- be aware of what you've done by looking at git status
- don't call anything 'migration'. Say no to half-states. Only complete entropy annihilation is allowed.
- don't hardcode things
- parallelization and SIMD where appropriate (note: the wasm target must not be forgotten)
- if you spot you wasted too much time on something, please put the discovered info into TIME_WASTERS.md so save future time for everyone
- not "if you want to"; should be "the proper fix for production-grade ui-framework"; not "I WANT"; should be "this is wrong, this is right, this is the cause, this has to be re-architectured and be rewritten"
- for non-trivial bugs: explore → document findings → rank suspicions with evidence → propose re-architecture options → implement → diagnostic verify → iterate until confirmed fixed. no one-shot guessing.
- confirm a suspected cause by REMOVING it and re-running, before writing the fix. (binary search by cutting half of the code until the only thin cause left)
- performance should not degrade correctness: a performance change ships with a correctness test that fails when the optimization is wrong -- a benchmark proving it is fast is not that test. Prove the test red first by deliberately breaking the optimization; a correctness test that has never failed is decoration. If you cannot write a test that would catch your optimization being wrong, you do not know what work it is skipping, and it does not ship. When speed and correctness genuinely conflict, correctness wins and the speed is given back until a design has both. (2026-08-29: four optimizations landed, three caused user-visible regressions -- an unreadable nav bar, rows frozen under an expanded action strip, a blur cache showing a stale image during scroll -- each validated only by an instrument measuring the optimized thing, not the risk)
- for a UI bug that reproduces on a device, write the robot e2e test FIRST.
- device testing on the Pixel Watch over adb: the watch dozes between commands and silently drops injected input, and a dozing screen captures as black PNG. Send
input keyevent KEYCODE_WAKEUPbefore every step and checkdumpsys power | grep mWakefulnessbefore believing a screenshot. The rotary crown isadb shell input rotaryencoder scroll --axis SCROLL,<n>, and ring menus also take taps on the screen edge. ghhas more than one account here and the active one flips. When a repo starts 404ing or a rerun says "must have admin rights", rungh auth switch --user samoylenkodmitry- should never workaround bugs instead of fixing the root issue
- gates live in the justfile and CI calls the same recipes; change a gate there, never inline in a workflow
- frame-rate numbers measured under xvfb are software presentation, not the GPU (26 fps against 67 on the same scene); measure fps on a real display
- before diagnosing any red test,
git fetch origin mainand rebase: a stale base is indistinguishable from a regression, and today four "broken on main" robot tests were four commits already fixed upstream - never invent a feature subset to check a target; run the exact command CI runs.
--features ioswithoutrenderer-wgpugatesios.rsout and invents three dead-code warnings that exist in no shipped build, and the same slip on the web target invents a compile error - a system dialog (iOS document picker, permission sheets) can only be checked on a device: it decides what to enable from what the app asked for and hands nothing back. Do not ask a human to eyeball it once per iteration — drive it from a UI test. cranamp's
platform/ios/run-uitests.shis the shape: launch args open the dialog so no coordinate-tapping is needed, and it prints every row withenabled= - iOS on-device UI tests need USB and
Settings > Developer > Enable UI Automation. Over a network pairing the runner dies with "Timed out while enabling automation mode" before any test body runs, which reads exactly like the toggle being off
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.
- 3d ago First seen · 124 lines · 2,936 tokens per session scan A 8e295eef1c36
Cranpose AGENTS.md is an instructions file published in the GitHub repository samoylenkodmitry/Cranpose (22 stars, last pushed 4d ago), licensed Apache-2.0. It adds 2,936 tokens to every session, about $0.0147 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.
Other instructions, from other repositories
turso AGENTS.md
Instructions for tursodatabase/turso, covering turso agent guidelines, quick reference, testing, running tests and test organization.
intelligent-terminal rust.instructions.md
Concise Rust coding conventions for this repository.
azure-sdk-for-rust resourcemanager.instructions.md
Instructions for Azure/azure-sdk-for-rust, a project described as: This repository is for the active development of the Azure SDK for Rust. For consumers of the SDK we recommend visiting Docs.rs and looking up the docs for any of libraries in the SDK.
Browser4 CLAUDE.md
Instructions for platonai/Browser4, covering browser4 — project context for claude, architecture, key dispatch chain (cli → browser), batch commands and e2e test structure.
bifrost AGENTS.md
Instructions for bifrost-proxy/bifrost, covering bifrost 项目开发规则, 执行心法, 执行模式与完成定义, 任务模式判定 and 变更类型与验证路由(先判定,后执行).
nanocodex AGENTS.md
Instructions for gakonst/nanocodex, covering nanocodex development, commands, product boundary, account, connect, and walletconnect and workflow.