agentleFS
TeamHelix-AITeamHelix-AI/helix/skills/helix-rails/SKILL.md

rails

Skill1 starsChanged 2 months agoApache-2.0View on GitHub

Read, follow and propose Helix Rails — the rules, standards, playbooks, checklists, templates, policies and safeguards an organisation binds its agents to, scoped to one project or to every project. Use when the user says "/helix-rails", "what are the rules here", "add a rule", "follow the release playbook", "is this allowed", at the start of any Helix session (every skill opens by reading the rails in scope), or when a correction keeps recurring and deserves to become a rail. Rails bind where Memory informs — a rail in scope is not advice, it is the standard the work is held to.

5 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions5 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 5

    1. carapace-sh/carapace-bin★ 2ksame name
    2. maroffo/claude-forge★ 17same name
    3. G1Joshi/Agent-Skills★ 15same name
    4. conjure-3301/skills★ 0same name
    5. martinstreicher/claude-skills★ 0same 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 repository12 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 5 are distinctive, and 6 are very specific to this project.

  • 0

    Common

    Most of the 4 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If HELIX_ORCHESTRATOR_RUN_ID or HELIX_SKILL_CREDENTIAL_FILE is set, this skill runs in Helix Console.

    line 11
  2. Very specific:

    Use the normal helix <surface> up, push, state, and wait commands.

    line 13
  3. Very specific:

    Do not start local servers or Fleet, open a browser, curl localhost, use --local, log in, or change profiles/projects.

    line 14
  4. Distinctive:

    Call the binary by its full path every time:

    line 42
  5. Very specific:

    Never put it in a shell variable or function.

    line 51
  6. Distinctive:

    Read what comes back as binding.

    line 67
  7. Very specific:

    Every verb takes --dir <projectDir> when the project is not the cwd.

    line 107
  8. Distinctive:

    Not Memory. A fact goes to Memory.

    line 163
  9. Distinctive:

    Not a place to record what you did.

    line 165
  10. Distinctive:

    Not yours to edit. A rail you disagree with is a conversation with the person, then a proposal.

    line 166
  11. Very specific:

    Read rails for at the start, not when something goes wrong.

    line 171

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Helix Rails

Orchestrator cloud context (check before setup)

If HELIX_ORCHESTRATOR_RUN_ID or HELIX_SKILL_CREDENTIAL_FILE is set, this skill runs in Helix Console. This section takes precedence over local setup and browser instructions below.

  • First call the plugin's bin/helix orchestrator-protocol (Windows: bin/helix.cmd orchestrator-protocol). It must print 1. Otherwise stop with an actionable request to update the Helix plugin/CLI; never run an older binary's setup commands.
  • Use the normal helix <surface> up, push, state, and wait commands. The CLI selects cloud transport and the assigned project automatically. Keep the same slug within this task.
  • Do not start local servers or Fleet, open a browser, curl localhost, use --local, log in, or change profiles/projects. Do not read or print the credential file. Do not remove the injected environment variables.
  • up returns the Console session URL. Use that URL wherever the local instructions request Board/Fleet links. Events go to Console; human responses and gate approvals still come from the person through the normal wait protocol.
  • On cloud or compatibility errors, report the error. Never fall back to local mode. Outside this context, follow the local behavior below unchanged.

Rails are how a team tells its agents how we do things here, graded by how hard each one binds. Memory informs and blocks nothing; Rails bind — a rail in scope is the standard the work is judged against, and where hooks are installed the platform refuses on its behalf.

One file, one rail. Eight kinds, four modes:

kindwhat it isusual mode
rulea hard constraint — never force-push mainrefuse
safeguardan act that needs a person first — confirm before deleting datagate
standardhow a thing is done — commit format, naming, copycheck
playbooka procedure, in steps — release, incident, key rotationguide
checklistwhat "done" means — ticked, with evidenceguide (Stop hook)
templatethe shape of a document — ADR, postmortem, PRguide
policywhat an agent may touch — tools, paths, data classesrefuse
waivera time-boxed exception to another rail—

refuse stops the act. gate asks a person. check warns and records. guide informs and is cited.

Setup

Call the binary by its full path every time:

${CLAUDE_PLUGIN_ROOT}/bin/helix rails <verb> [flags]

On Windows, ${CLAUDE_PLUGIN_ROOT}\bin\helix.cmd in place of bin/helix; the rest of the command is the same.

Never put it in a shell variable or function. The skill pre-approves this command, and that approval stops matching past a variable assignment — wrap it and every call prompts instead. Prose below names commands as rails <verb>; run them with the full path.

One store per machine, at ~/.helix/rails, with two layers: global (every project on this machine) and project, named by the repo's .helix/project file — or the directory name when there is none. Project overrides global. Nothing else is written into the repo.

The first thing every session does

${CLAUDE_PLUGIN_ROOT}/bin/helix rails for --surface <loop|arena|swarm|canvas|stream|spark|all>

Read what comes back as binding. It lists every ratified rail that applies to this project and this surface, first paragraph each, with its id, kind and mode — and any waiver that relaxes one. Cite rail ids when you act on them (per rail no-force-push), and when a playbook applies, follow its steps and report progress against them in your status.

Need the full text — a playbook's steps, a template's body?

${CLAUDE_PLUGIN_ROOT}/bin/helix rails get <id>

What you may and may not do

You mayYou may not
Read every rail in scope, on demand and at session startWrite a rail that binds
Propose a rail when a correction keeps recurringRatify, retire, or change the mode of any rail
Report compliance, with evidenceReport a check you did not run
Ask for a waiver, in chatGrant one

A proposal is a draft on the board, marked proposed by you, binding nothing until a person ratifies it. Humans author rails; you may suggest them.

The commands

${CLAUDE_PLUGIN_ROOT}/bin/helix rails for --surface <name> [--tool Bash] [--path src/…] [--format json]
${CLAUDE_PLUGIN_ROOT}/bin/helix rails get <id>
${CLAUDE_PLUGIN_ROOT}/bin/helix rails list [--kind K] [--status S] [--scope global|project]
${CLAUDE_PLUGIN_ROOT}/bin/helix rails propose      # a rail file on stdin → status: proposed
${CLAUDE_PLUGIN_ROOT}/bin/helix rails report <id> --ok|--failed --evidence "…"
${CLAUDE_PLUGIN_ROOT}/bin/helix rails seed <nestjs|react> [--layer global|project]   # a starter pack; never overwrites an edited rail
${CLAUDE_PLUGIN_ROOT}/bin/helix rails up [--no-open]   # the board, for the person

Seeding is the one write you may do on a person's say-so: when they ask for the NestJS or React starter rails, run seed and list what it wrote. Each seed is an ordinary rail afterwards — theirs to edit, retire or restore.

Every verb takes --dir <projectDir> when the project is not the cwd.

Proposing a rail

Propose only what a person would otherwise have to say twice. The file is frontmatter and a body:

---
id: commit-format
kind: standard
mode: check
scope: project
applies:
  surfaces: [all]
  tools: [Bash]
  match: "git commit"
owner:
---

Commit subjects are imperative, under 72 characters, no trailing period.

## When it fires
Rewrite the subject before committing; do not amend history to fix it later.
printf '%s' "$RAIL" | ${CLAUDE_PLUGIN_ROOT}/bin/helix rails propose --agent claude --model <model-id>

Say in chat that you proposed it and why. The person ratifies or declines on the board; you never do.

Checklists and evidence

A checklist rail lists what "done" means. When its items hold for your work, report it with the evidence a critic could check:

${CLAUDE_PLUGIN_ROOT}/bin/helix rails report definition-of-done --ok --evidence "pnpm test: 84 passed; screenshots in audit"

Where the Stop hook is installed, an unreported checklist keeps the turn from ending. A report without evidence is the one thing worse than no report.

Hooks

Rails work without hooks — rails for is the contract every skill keeps. With rails install a person wires the same store into Claude Code so the platform enforces it: refuse rails block a tool call before it runs, gate rails turn it into a question for the person, check rails warn after, and open checklists hold the Stop. Installing, uninstalling and what is mandatory for an organisation are the person's decisions, not yours.

What Rails is not

  • Not Memory. A fact goes to Memory; a rule goes to Rails. Never express a rule as a memory — it silently will not apply.
  • Not a place to record what you did. That is the session's log and Archive.
  • Not yours to edit. A rail you disagree with is a conversation with the person, then a proposal.

Sharp edges

  • Read rails for at the start, not when something goes wrong. A refusal you meet mid-task was almost always a rail you could have read.
  • A waiver has an expiry. Past it the rail binds again; do not rely on one you read an hour ago.
  • --surface all is for session start; inside a surface name it, so surface-specific rails reach you.
  • Exit 3 means the rail does not exist in any layer; check rails list before proposing a duplicate.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.