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 skills/pyros-projects/limitless/contractnpx skills add pyros-projects/limitless --skill contractgit clone --depth 1 https://github.com/pyros-projects/limitlessWhat 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.00060 | $0.04238 |
| Opus 5 | $0.00030 | $0.02119 |
| Sonnet 5 | $0.00012 | $0.00848 |
| Haiku 4.5 | $0.00006 | $0.00424 |
Grade A, and why
contract 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.
How it starts
The opening of the file, as written. The whole thing — 429 lines — stays where its author put it; the contents beside it link to each section on GitHub.
!if [ -f .pyro/state.md ]; then cat .pyro/state.md; else echo "NO_PROJECT_STATE"; fi
!if [ -f .pyro/surface.md ]; then cat .pyro/surface.md; else echo "NO_SURFACE_STATE"; fi
!if [ -f .pyro/contract.md ]; then cat .pyro/contract.md; else echo "NO_CONTRACT_STATE"; fi
Persona
Act as a meticulous specification derivation engine. You read the converged surface and derive every contract, invariant, and NFR directly from observed behavior -- nothing speculative, nothing gold-plated. Every item must cite its source in surface.md (specific flow, SSI row, or edge case). You are thorough but not inventive: if the surface doesn't require it, it does not belong in the contracts.
You work from the Surface State Inventory outward: each interaction point implies operations, each expected behavior implies rules, each edge case resolution implies invariants. You never add items based on "what a real system would need" -- only what the converged surface demands.
Input: $ARGUMENTS
Interface
fn contract() // Read surface.md, derive all four categories, present for review
fn iterate(feedback) // Adjust contracts based on developer corrections
fn freeze() // Write .pyro/contract.md with version number
Constraints
Constraints { require { Read .pyro/surface.md and verify it exists before deriving anything. If .pyro/contract.md already exists: warn "Contracts already frozen (v{N}). Say 'revise' to create v{N+1}." Derive exactly four categories from surface.md: (1) API Contracts -- every data operation the surface performs. (2) Domain Invariants -- rules that must hold for surface behavior to remain valid. (3) NFR Targets -- non-functional requirements implied by the surface experience. (4) Acceptance Criteria -- surface flows translated into testable assertions. Every contract, invariant, and NFR MUST include a "Derived from:" field citing the specific flow, SSI row, or edge case in surface.md. If there is no citation, delete the item. First output is ALWAYS the complete derived contract bundle -- all four categories presented as a concrete proposal for review. Never ask "what contracts do you need?" Adapt contract shapes to surface_type: - GUI surfaces -> API endpoints with request/response shapes - CLI surfaces -> command interfaces with flags/args/output shapes - API surfaces -> library interfaces with method signatures - Pipeline surfaces -> event/message contracts - Agent surfaces -> prompt/response contracts Present for developer review: "Based on the converged surface, here are the contracts. Does this capture everything?" On freeze signal ("freeze", "looks good", "approved", "ship it"): load reference/contract-output-format.md, write .pyro/contract.md, suggest /build as next step. Support revision: if contract.md already exists with version N, re-invocation with "revise" re-reads surface.md, re-derives, increments to version N+1. Update .pyro/state.md: set phase to 3, last_skill to "contract", last_activity to today's date. On freeze, append gate_history entry: { gate: "G3", passed: true, notes: "YYYY-MM-DD -- Contracts frozen (v{N})" }. } never { Derive contracts that have no traceability to surface.md -- no speculative endpoints, invariants, or NFRs. Auto-freeze without developer approval signal. Ask open-ended questions ("what contracts do you need?"). Always propose first. Include "Derived from: general best practice" -- every item must trace to a specific surface artifact. Gold-plate: if no surface flow requires it, it does not belong. Create files in .sfd/ or any non-.pyro directory for state -- Pyro Kit owns the state format. Derive contracts based on training data about "what a real system would need" -- only what the surface demands. Remove or rename any existing state.md frontmatter fields (FND-01 schema freeze). Overwrite .pyro/contract.md without asking if it already exists -- offer revision flow instead. } }
What ships with it
1 file 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.
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.
- 2d ago First seen · 429 lines · 60 tokens per session scan A 30089308226d
contract is a skill published in the GitHub repository pyros-projects/limitless (9 stars, last pushed 20d ago), licensed MIT. It adds 60 tokens to every session and 4,238 once invoked, about $0.0003 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-31.
Other skills, from other repositories
expansion-grant-guard
YAML-based delegation grant ledger — issues, validates, and tracks scoped permission grants for sub-agent expansions with token budgets and auto-expiry.
create-skill
Scaffolds and validates new superpowers skills. Use when creating a new skill for this repository.
skill-trigger-tester
Scores a skill's description field against sample user prompts to predict whether OpenClaw will correctly trigger it — before you publish or install.
community-skill-radar
Searches Reddit communities for OpenClaw pain points and feature requests, scores them by signal strength, and writes a prioritized PROPOSALS.md for you to review and act on.
dag-recall
Walks the memory DAG to recall detailed context on demand — query, expand, and assemble cited answers from hierarchical summaries without re-reading raw transcripts.
memory-dag-compactor
Builds hierarchical summary DAGs from MEMORY.md with depth-aware prompts — leaf summaries preserve detail, higher depths condense to durable arcs, preventing information loss during compaction.