contract-authoring
Skill3.3k starsChanged 2 days agoApache-2.0View on GitHub
Author or extend a normative CONTRACT*.md - an exact, testable specification of an interface, protocol, or provider boundary that independent implementations and a conformance suite derive from. Use when designing a spec, contract, protocol document, or provider API that several components or backends must agree on.
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 5 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Read each reference implementation or host at a pinned version and record, per operation, whether it is native, argument mapping, …
- Very specific: line 21
Run every state-changing operation through references/critique-lenses.md.
- Distinctive: line 32
Every list exists once; a second copy may drift.
- Distinctive: line 39
Put the exception where the rule is: "terminal, except during pending-key recovery".
- Distinctive: line 42
Leave out one library's behaviour and numbers, admin and UI surfaces, mock and test-harness control surfaces (those are the intent of the …
- Very specific: line 47
Write each rule with one condition and one response ("when …", "while …", "if … then …") and one meaning per verb: declarative present for …
- Distinctive: line 51
Test vectors and suites are evidence for the rules, so their role, their pass conditions, the mapping of rules to tests, the review-only …
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
A contract defines a surface that two independently built parties must agree on: a backend author implements from it alone, and the conformance suite derives its expectations from it and the standards it cites, never from an implementation.
It names the parties in scope without schedule ("e.g.: Product A, Product B", not "A now, B later"), since a release stage is not a rule a party agrees to, and a statement belongs only if one of them must agree to it.
Of a party's own realisation (intent-files), only the parts a named second party depends on enter.
INTENT.md beside it explains the choices; the contract states the rules.
Name the file CONTRACT.<name>.md when the repository may hold more than one contract, and cite it everywhere as CONTRACT.<name>.md §<anchor>, because the file name is the one citation that is unique, searchable, and readable without a lookup.
Process
- Scout before writing.
Inventory every call site the contract will serve, with
file:line. Read each reference implementation or host at a pinned version and record, per operation, whether it is native, argument mapping, workaround, or unsupported, with evidence. Host conventions (naming case, pagination, proxies that rewrite paths) become rules; a reference you did not read becomes a false universal. - Settle the design by interview, one frontier of decisions per round as in
grill-intent; the human decides, and the agent may draft the normative wording for each decision, since a contract is agent-written under human approval. Number every clarification and log who decided it. - Draft, then critique with two lenses: overkill and gaps.
Run every state-changing operation through
references/critique-lenses.md. - Freeze once the design is approved. Afterwards it changes only for implementation defects, in its own PR ahead of the code that needs it, so the change is reviewed as a rule and not excused by the code it unblocks. Implementers never edit the contract or the test suite to make code pass; they escalate with evidence from the cited source.
Content rules
- Per operation: the valid domain, the must-support set, the exact error for each class of invalid input from a closed error set, and the precedence of outcomes. Phrase precedence as which outcome wins, not as an evaluation order, since only the outcome is observable and an order binds a backend's internal checks.
- Implementation-defined cases are listed with their exact allowed outcome set, never with examples, and are excluded from differential tests.
- For every stored field: who initialises it, which operations update it, and which must not.
- Every list exists once; a second copy may drift.
- A
Definitionssection with one entry per term the parties must share, in the glossary shape fromintent-files; one encoding per concept, and the same word for the same thing throughout. - The contract is the single source for the API it specifies; when it covers a code API, public items cite their section and a check keeps them in step.
- Each operation and normative section has an anchor as
intent-filesAnchors defines, because the conformance suite cites every rule and the code and the intent cite the operations they realise. - Detail beyond the intent is the contract's job, but when a contract rule needs a design decision the intent does not take, the human records that decision in
INTENT.mdfirst; a design decision made only in the contract is one nobody made. - A contract has no versions and no deferral markers: it describes the whole surface as it must be, and the subset realised today is a deferral in the co-located intent file, extended by editing; a version negotiated on the wire is content.
- An example is not a rule: state what is free (order, case, whitespace) and add vectors that vary it, or a conforming library will reproduce none of them.
- Put the exception where the rule is: "terminal, except during pending-key recovery".
- Strict where it matters, extensible elsewhere: optional fields older receivers ignore, but authentication data stays strict, since an ignored field in authentication data is an unverified input.
- A derivable operation stays out unless a written exception (performance, validated-module boundary, a security property) sits next to it, since each one widens what every backend must implement and test for a result the primitives already give.
- Leave out one library's behaviour and numbers, admin and UI surfaces, mock and test-harness control surfaces (those are the intent of the component that implements them), implementer choices, and process.
- A rationale must be as true as its rule, since a reader who finds the cause false drops the rule with it; measure before citing a cause.
Testability
Write each rule with one condition and one response ("when …", "while …", "if … then …") and one meaning per verb: declarative present for a requirement, should a recommendation, may a permission, can a capability.
Each rule maps to a conformance case, worded as an observable with a bound: "encode writes exactly size() bytes", never "handles" or "supports", which name no outcome a test could check and so let divergent implementations all comply.
"The backend supports RSA-PSS" is met by signing, by returning Unsupported, or by producing bytes nobody verifies; "signing with RSA-PSS returns a signature that verifies under the public key, or Unsupported before any key material is read" is one outcome and one test.
The contract's rules define conformance, and it has no conformance section, because defining conformance as passing a suite makes the evidence the rule, so a party that follows the contract stops conforming when the suite has a bug.
Test vectors and suites are evidence for the rules, so their role, their pass conditions, the mapping of rules to tests, the review-only claims, and the known gaps belong to the suite and the intent that governs it, never to the contract.
Beyond that, shape is free: order sections so a reader finds all of an operation's rules in one place.
references/patterns.md lists what review kept and what it fixed in two agent-written contracts; read it when revising one or checking a draft.
Trending
More talk lately.about the whole repository
Who's talking about Devolutions/IronRDP
- A Hacker News story“IronRDP: a Rust implementation of Microsoft's RDP protocol”Hacker News · Mar 21, 2025 · 545 points
- @github-trending.bsky.social“🚀 Skyrocketing! 🚀 (200+ new stars) 📦 Devolutions / IronRDP ⭐ 1,328 (+276) 🗒 Rust Rust implementation of …”Bluesky · Mar 23, 2025 · 19 likes
- @hacker-news-jp.bsky.social“IronRDP: MicrosoftのRDPプロトコルのRust実装 IronRDP: a Rust implementation of Microsoft's RDP protocol 🔺 328 💬 45 …”Bluesky · Mar 21, 2025 · 5 likes
- fosrl/pangolin“Browser RDP fails with GNOME Remote Desktop And Windows Connection Errors”GitHub · Jun 14, 2026 · 3 reactions
- @rusttrending.bsky.social“Devolutions / IronRDP: Rust implementation of the Microsoft Remote Desktop Protocol (RDP) ★1304 …”Bluesky · Mar 23, 2025 · 3 likes
The biggest 5 of 60 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 60
Talked about on GitHub, Bluesky and Hacker News (60 times).
On GitHub · 50
- Jun 14, 2026Browser RDP fails with GNOME Remote Desktop And Windows Connection Errors — fosrl/pangolin3 reactions · 19 comments
- Jul 29, 2026fix(kerberos): remove unnecessary sequence number incrementation — Devolutions/sspi-rs1 reaction
- Feb 25, 2026Can't connect to Ubuntu RDP host — totoshko88/RustConn1 reaction · 5 comments
- Nov 18, 2025build(deps): no zlib for flate2 on WASM — Devolutions/sspi-rs1 reaction
- Oct 7, 2025chore(webapp): bump VNC and RDP WASM packages — Devolutions/devolutions-gateway1 reaction · 2 comments
45 more on GitHub
- Aug 28, 2025fix(webapp)!: add manual clipboard mode for RDP, VNC and ARD — Devolutions/devolutions-gateway1 reaction · 3 comments
- Oct 29, 2026chore(deps): bump ironrdp-graphics from 0.9.0 to 0.10.0 — kihyun1998/justrdp0 reactions
- Oct 24, 2026Bug: (IronRDP) (Windows Server 2025) Screen tearing on resize — meanaverage/tabby-rdp0 reactions · 5 comments
- Oct 23, 2026Vendored forks: upstream drift or advisories need review — armaxri/termiHub0 reactions
- Oct 22, 2026Embedded RDP: distorted display when connecting to xrdp — totoshko88/RustConn0 reactions · 1 comment
- Oct 21, 2026Stalled transport retains an old session and blocks reconnect until service restart — MuNeNiCK/hypr-rdp0 reactions
- Oct 19, 2026Bump ironrdp-graphics from 0.6.0 to 0.9.0 — Antxj/termcraft0 reactions
- Oct 19, 2026Bump ironrdp-pdu from 0.6.0 to 0.9.0 — Antxj/termcraft0 reactions
- Oct 19, 2026Bump ironrdp-cliprdr from 0.4.0 to 0.7.0 — Antxj/termcraft0 reactions
- Oct 19, 2026Bump ironrdp-core from 0.1.5 to 0.2.1 — Antxj/termcraft0 reactions
- Oct 19, 2026Bump ironrdp-dvc from 0.4.1 to 0.8.0 — Antxj/termcraft0 reactions
- Oct 15, 2026Windows desktop service 18.11.x fails RDP license exchange on windows hosts with RDS CALs — gravitational/teleport0 reactions · 1 comment
- Oct 9, 2026Vendored forks: upstream drift or advisories need review — armaxri/termiHub0 reactions
- Oct 2, 2026feat(unattended): pivot to native Windows Devolutions Gateway and RDP readiness — hamburger-os/PalmTTY0 reactions · 1 comment
- Sep 28, 2026Bump ironrdp-pdu from 0.8.0 to 0.9.0 — athiedepayit/rustrdp0 reactions
- Sep 26, 2026[test] vendored-fork drift sync self-test (#3498) — armaxri/termiHub0 reactions · 1 comment
- Sep 26, 2026Vendored forks: upstream drift or advisories need review — armaxri/termiHub0 reactions · 1 comment
- Sep 26, 2026Vendored forks: upstream drift or advisories need review — armaxri/termiHub0 reactions · 1 comment
- Sep 26, 2026Vendored forks: upstream drift or advisories need review — armaxri/termiHub0 reactions · 1 comment
- Sep 24, 2026feat(kerberos): add support for IAKerb extension for Kerberos client — Devolutions/sspi-rs0 reactions · 9 comments
- Sep 24, 2026feat(picky-krb): add IAKerb proxy message encoding/decoding — Devolutions/picky-rs0 reactions · 1 comment
- Sep 11, 2026Support Linux user authentication through PAM — MuNeNiCK/hypr-rdp0 reactions
- Sep 7, 2026Bump ironrdp-displaycontrol from 0.7.0 to 0.8.0 — athiedepayit/rustrdp0 reactions · 1 comment
- Sep 7, 2026Bump ironrdp-input from 0.6.0 to 0.7.0 — athiedepayit/rustrdp0 reactions · 1 comment
- Sep 4, 2026[no ci]: Bump ironrdp-pdu from 0.8.0 to 0.9.0 — athiedepayit/rustrdp0 reactions · 1 comment
- Sep 4, 2026[no ci]: Bump ironrdp-cliprdr from 0.6.0 to 0.7.0 — athiedepayit/rustrdp0 reactions
- Sep 4, 2026[no ci]: Bump ironrdp-graphics from 0.8.1 to 0.9.0 — athiedepayit/rustrdp0 reactions · 1 comment
- Sep 4, 2026[no ci]: Bump ironrdp-dvc from 0.7.0 to 0.8.0 — athiedepayit/rustrdp0 reactions · 1 comment
- Sep 4, 2026[no ci]: Bump ironrdp-session from 0.10.0 to 0.11.0 — athiedepayit/rustrdp0 reactions
- Aug 26, 2026chore(deps): bump ironrdp-session from 0.8.0 to 0.11.0 in /src-tauri — voktty/voktty0 reactions · 1 comment
- Jul 28, 2026build(deps): bump ironrdp-egfx from 0.2.0 to 0.3.0 in /rdp-kotlin/rust — GlassHaven/Haven0 reactions · 2 comments
- Jul 28, 2026build(deps): bump ironrdp-displaycontrol from 0.7.0 to 0.8.0 in /rdp-kotlin/rust — GlassHaven/Haven0 reactions · 2 comments
- Jul 28, 2026build(deps): bump ironrdp-session from 0.10.0 to 0.11.0 in /rdp-kotlin/rust — GlassHaven/Haven0 reactions · 2 comments
- Jul 27, 2026Bump ironrdp-pdu from 0.7.0 to 0.9.0 in /android/yyslide-android/rdp-kotlin/rust — wuyan1337/yySlide0 reactions
- Jul 27, 2026Bump ironrdp-cliprdr from 0.5.0 to 0.7.0 in /android/yyslide-android/rdp-kotlin/rust — wuyan1337/yySlide0 reactions
- Jul 25, 2026build(deps): bump ironrdp-input from 0.6.0 to 0.7.0 in /rdp-kotlin/rust — SkyL9ne/Haven0 reactions
- Jul 25, 2026build(deps): bump ironrdp-session from 0.10.0 to 0.11.0 in /rdp-kotlin/rust — SkyL9ne/Haven0 reactions
- Jul 25, 2026build(deps): bump ironrdp-displaycontrol from 0.7.0 to 0.8.0 in /rdp-kotlin/rust — SkyL9ne/Haven0 reactions
- Jul 25, 2026build(deps): bump ironrdp-egfx from 0.2.0 to 0.3.0 in /rdp-kotlin/rust — SkyL9ne/Haven0 reactions
- Jul 25, 2026build(deps): bump ironrdp-svc from 0.7.0 to 0.8.0 in /rdp-kotlin/rust — SkyL9ne/Haven0 reactions
- Jul 25, 2026build(deps): bump ironrdp-cliprdr from 0.6.0 to 0.7.0 in /rdp-kotlin/rust — SkyL9ne/Haven0 reactions
- Jul 21, 2026build(deps): bump ironrdp-tls from 0.2.1 to 0.2.2 in /rdp-kotlin/rust — GlassHaven/Haven0 reactions · 4 comments
- Jul 21, 2026build(deps): bump ironrdp-cliprdr from 0.6.0 to 0.7.0 in /rdp-kotlin/rust — GlassHaven/Haven0 reactions · 3 comments
- Jul 21, 2026build(deps): bump ironrdp-core from 0.2.0 to 0.2.1 in /rdp-kotlin/rust — GlassHaven/Haven0 reactions · 3 comments
- Jul 16, 2026bump ironrdp-graphics from 0.8.0 to 0.9.0 — kihyun1998/justrdp0 reactions · 2 comments
On Bluesky · 9
- Mar 23, 2025🚀 Skyrocketing! 🚀 (200+ new stars) 📦 Devolutions / IronRDP ⭐ 1,328 (+276) 🗒 Rust Rust implementation of the Microsoft Remote Desktop… — @github-trending.bsky.social19 likes and reposts
- Mar 21, 2025IronRDP: MicrosoftのRDPプロトコルのRust実装 IronRDP: a Rust implementation of Microsoft's RDP protocol 🔺 328 💬 45 🔗 HN Post | Article — @hacker-news-jp.bsky.social5 likes and reposts · 1 reply
- Mar 23, 2025Devolutions / IronRDP: Rust implementation of the Microsoft Remote Desktop Protocol (RDP) ★1304 https://github.com/Devolutions/IronRDP — @rusttrending.bsky.social3 likes and reposts
- Mar 22, 2025IronRDP: a Rust implementation of Microsoft's RDP protocol https://github.com/Devolutions/IronRDP [comments] [334 points] — @hnfeed.bsky.social2 likes and reposts
- Mar 21, 2025IronRDP: a Rust implementation of Microsoft's RDP protocol https://github.com/Devolutions/IronRDP… — @newsyc200.bsky.social2 likes and reposts
4 more on Bluesky
- Mar 21, 2025IronRDP: a Rust implementation of Microsoft's RDP protocol Discussion — @hackernewsbot.bsky.social2 likes and reposts
- Oct 9, 2026I want to reach feature parity with the first-party RDP client with IronRDP: github.com/Devolutions/... — @awakecoding.com1 likes and repost · 1 reply
- Mar 22, 2025🌐IronRDP: Microsoft の RDP プロトコルの Rust 実装 https://github.com/Devolutions/IronRDP via #HackerNews — @kdmsnr.com1 likes and repost
- Mar 22, 2025https://github.com/Devolutions/IronRDP Rustで実装されたMicrosoft Remote Desktop Protocol (RDP)の紹介です。 IronRDPという名称でGitHubで公開されています。… — @topickapp.bsky.social1 likes and repost
On Hacker News · 1
- Mar 21, 2025IronRDP: a Rust implementation of Microsoft's RDP protocol545 points · 214 comments
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- sdageltc/letitloop★ 5same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository42 other files it gives its agents.
- AGENTS.mdAGENTS.md
- agents-md-reviewSkill
- agents-mdSkill
- blind-testsuiteSkill
- code-compressorSkill
- commit-and-pr-conventionsSkill
- commit-scopeSkill
- contract-reviewSkill
- contributeSkill
- crate-readme-writerSkill
- dependency-prunerSkill
- dependency-reviewerSkill
- docs-compressorSkill
- docs-writerSkill
- grill-intentSkill
- intent-drift-auditSkill
- intent-filesSkill
- intent-reviewSkill
- ironrdp-activex-mstsc-testingSkill
- leadSkill
- llm-comment-footerSkill
- markdown-writerSkill
- new-crateSkill
- orchestrate-effortSkill
- prose-verifierSkill
- prose-writerSkill
- protocol-reviewerSkill
- public-dependencySkill
- review-feedback-loopSkill
- rust-style-reviewerSkill
- rust-styleSkill
- skeptical-reviewerSkill
- skill-disciplineSkill
- tddSkill
- tessl-skill-lintingSkill
- test-oracle-reviewerSkill
- test-prunerSkill
- test-reviewerSkill
- test-writerSkill
- variantsSkill
- code-reviewSkill
- release-prepSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

