sails-ethexe-architecture
Skill17 starsChanged 7 months agoMITView on GitHub
Use when a builder needs to design or review architecture for a Sails ethexe app with dual-transport, payable methods, Solidity interface generation, or Ethereum-style events. Do not use for standard Gear/Vara Sails apps without ethexe.
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 8 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
If the app does NOT need ethexe, use ../sails-architecture/SKILL.md instead.
- Very specific: line 24
Write the result to docs/plans/YYYY-MM-DD-<topic>-architecture.md.
- Distinctive: line 39
Document the transport choice per method in the architecture artifact.
- Distinctive: line 64
Do method names, parameter types, and return types map cleanly to Solidity types?
- Distinctive: line 74
If the design depends on signals or system gas reservation, it cannot run under ethexe.
- Distinctive: line 97
If the spec is missing, stop and create it first.
- Distinctive: line 98
Do not design around signals or system gas reservation — they are gated out.
- Distinctive: line 99
Do not assume all methods need dual transport — name the strategy per method.
- Very specific: line 100
Do not exceed 3 #[indexed] fields per event variant.
- Distinctive: line 101
Do not use reserved event variant names.
- Distinctive: line 102
Keep implementation detail out of the architecture note unless it changes the public contract.
≈ “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
Sails Ethexe Architecture
Goal
Turn an approved spec into an ethexe-specific architecture artifact before implementation, covering transport strategy, payable design, event model, Solidity interface generation, and the constraints the ethexe feature imposes.
If the app does NOT need ethexe, use ../sails-architecture/SKILL.md instead.
Inputs
../../references/sails-ethexe-patterns.md— ethexe diff table, transport rules, type requirements, gated syscalls../../references/sails-header-wire-format.md— interface ID stability, entry ID derivation../../references/sails-idl-v2-syntax.md— IDL v2 annotations../../assets/architecture-template.md../../references/vara-domain-overview.md../../references/sails-program-and-service-architecture.md../../references/gear-messaging-and-replies.md
Write the result to docs/plans/YYYY-MM-DD-<topic>-architecture.md.
Architecture Decisions Specific to Ethexe
Transport Strategy
The architecture must name the transport per service and per method:
| Pattern | When to use |
Dual transport (default #[export]) | Methods callable from both Gear programs and EVM |
Scale-only (#[export(scale)]) | Internal program-to-program calls, no EVM exposure needed |
Ethabi-only (#[export(ethabi)]) | Methods only meaningful from EVM side |
Payable (#[export(ethabi, payable)]) | Methods that accept value — requires ethabi |
Document the transport choice per method in the architecture artifact. Dual transport is the default but not always desirable — scale-only methods reduce the ABI surface.
Payable Design
- Which methods accept value? Name each one.
- What happens to received value? (stored in program, forwarded, refunded on error?)
- Non-payable methods panic if value > 0 — is this acceptable for all non-payable paths?
- Constructors can also be payable — document if the program requires initial funding.
Event Model
Decide between:
emit_event()— standard Gear event (visible to Gear tooling, explorers)emit_eth_event()— Ethereum-style event (visible to EVM tooling, indexed topics)- Both — if the same event must be visible to both ecosystems (requires two separate emissions)
For emit_eth_event():
- Which fields are
#[indexed]? (max 3 per variant, these become topics) - Are any reserved variant names used? (forbidden list in reference)
- Is the event inventory aligned with what
sails-sol-genwill produce in the Solidity interface?
Solidity Interface
sails-sol-gen generates Solidity contract interfaces from the IDL. Architecture must consider:
- Will EVM consumers use the generated Solidity interface directly?
- Do method names, parameter types, and return types map cleanly to Solidity types?
- Are
payableandindexedannotations in the IDL correct for the generated interface?
Gated Syscalls
Three syscalls are unavailable under ethexe:
Syscall::signal_from()— no signal handlingSyscall::signal_code()— no signal handlingSyscall::system_reserve_gas()— no system gas reservation
If the design depends on signals or system gas reservation, it cannot run under ethexe.
Workspace Structure
Ethexe apps use a separate workspace (rs/ethexe/ in the Sails repo). The architecture must name:
- Whether this is a new ethexe workspace or an addition to an existing one
- The dependency pattern:
sails-rs = { ..., features = ["ethexe"] }for deps, build-deps, and dev-deps - Whether the build script needs
features = ["ethexe", "wasm-builder"]
Review Checklist
- Is the transport strategy (scale/ethabi/dual) explicit per method?
- Are payable methods named, and is value handling documented?
- Is the event model clear (Gear events vs eth events vs both)?
- Are
#[indexed]fields chosen and within the 3-field limit? - Are there any signal or system_reserve_gas dependencies? (incompatible)
- Are service names PascalCase and free of Solidity reserved keywords?
- Is interface ID stability considered for contract evolution?
- Does the Solidity interface generation produce the expected ABI?
- Are type requirements met? (types in ethabi methods must be ABI-encodable)
Guardrails
- If the spec is missing, stop and create it first.
- Do not design around signals or system gas reservation — they are gated out.
- Do not assume all methods need dual transport — name the strategy per method.
- Do not exceed 3
#[indexed]fields per event variant. - Do not use reserved event variant names.
- Keep implementation detail out of the architecture note unless it changes the public contract.
- Route implementation to
../sails-ethexe-implementer/SKILL.mdafter architecture approval.
In this repository27 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- vara-skillsSkill
- vara-skillsSkill
- awesome-sails-vftSkill
- gear-architecture-plannerSkill
- gear-builtin-actorsSkill
- gear-gstd-api-mapSkill
- gear-message-executionSkill
- gtest-tdd-loopSkill
- idea-to-specSkill
- sails-architectureSkill
- sails-dev-envSkill
- sails-ethexe-implementerSkill
- sails-feature-workflowSkill
- sails-frontendSkill
- sails-gtestSkill
- sails-idl-clientSkill
- sails-indexerSkill
- sails-local-smokeSkill
- sails-new-appSkill
- sails-program-evolutionSkill
- sails-rust-implementerSkill
- ship-sails-appSkill
- task-decomposerSkill
- vara-skills-upgradeSkill
- vara-walletSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

