Rail-Connector-MCP: Skill for Codex

.agents/skills/rail-operator/SKILL.md

rail-operator is a skill for Codex from SNComrade/Rail-Connector-MCP. It costs 99 tokens per session (5,109 once invoked), scanned A, original, MIT.

A control layer for operating Claude Code Remote Control sessions through Rail Connector, a connection service for managing those sessions.

In plain words
What is it for?
Starting, finding, inspecting, resuming, prompting, waiting for, renaming, archiving, reconnecting to, and stopping Claude sessions.
Why use it?
It removes the need to manually track session states, names, prompts, and reconnections when working with Claude remotely.

Skill for Codex

Written for Codex: agents/openai.yaml present. Also seen: names the NotebookEdit tool; mentions Claude Code; installed under .agents/ (shared by several agents).

This is SNComrade/Rail-Connector-MCP's own configuration. It tells Codex how to work on Rail-Connector-MCP itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything Rail-Connector-MCP configures →

Reuse

Borrowing it

Nothing to install: this file belongs to SNComrade/Rail-Connector-MCP. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/SNComrade/Rail-Connector-MCP/main/.agents/skills/rail-operator/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/SNComrade/Rail-Connector-MCP

Made for: Codex.

Wrote 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.

agentmods badge for rail-operator

README.md
[![agentmods](https://agentmods.dev/badge/skills/sncomrade/rail-connector-mcp/rail-operator/github.svg)](https://agentmods.dev/skills/sncomrade/rail-connector-mcp/rail-operator)
Your own site
<a href="https://agentmods.dev/skills/sncomrade/rail-connector-mcp/rail-operator"><img src="https://agentmods.dev/badge/skills/sncomrade/rail-connector-mcp/rail-operator/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for rail-operator

Your own site · 80×15
<a href="https://agentmods.dev/skills/sncomrade/rail-connector-mcp/rail-operator"><img src="https://agentmods.dev/badge/skills/sncomrade/rail-connector-mcp/rail-operator.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 99 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 5,109 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00099 $0.05109
Opus 5.5 $0.00040 $0.02044
Sonnet 5.5 $0.00020 $0.01022
Haiku 4.5 $0.00010 $0.00511

Measured 12d ago against content hash 3afbe2e77556, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

rail-operator 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 12d 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.

.agents/skills/rail-operator/SKILL.md · 337 lines

How it starts

The opening of the file, as written. The whole thing — 337 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Rail Connector Operator

Operate Claude through the exposed mcp__rail_connector tools. Use the actual task project as cwd, even when this skill is loaded from the MCP repo.

Rules

  • Do not simulate an MCP result. If tools are missing after an install or update, explain that Codex needs a fresh task or restart.
  • Keep Codex, this MCP, Claude, paths, credentials, and logs in the same OS context.
  • Call status when lifecycle is unclear and get_claude_capabilities before permission, effort, or Ultracode launch decisions.
  • Use debug: true only for an explicit, bounded diagnostic run. Inspect the returned debugLog provenance and size; the MCP never returns contents, and the retained file is sensitive local evidence.
  • Give parallel jobs unique managedSession names. A Windows broker session persists across MCP/Codex task refresh and must be explicitly stopped.
  • On native Windows a managed name can come to belong to a new generation, for example after a replacement or a start by another agent. To make sure a call reaches the session you started or inspected, pass its generation pair as expectedGenerationId and expectedStartedAtMs, always together, to capture_remote_control, wait_for_claude_turn, submit_prompt, rename_claude_session and stop_remote_control. Take the pair from the start result's sessionBinding (existingSession on already_running) or from the status entry with that name (generationId, startedAtMs). A paired wait also needs the waitAfterCursor returned for that generation; without one, wait by name. A paired call can fail with a stale-generation error (code ESTALE, which callers do not see; the text says the generation changed, refuses a stale operation, or rejects the afterCursor). The name now belongs to another generation or none, or the cursor or conversation does not match. Such a call reached no other generation, and one refused at its start did nothing at all. Only if Claude exited during the call and another start took the name can input sent earlier in that call have reached the old session (from the code; not seen live). Call status; do not repeat the call by name. Other tools take no pair. On Linux and macOS leave it out: tmux rejects it.
  • Treat managed terminal name, Remote Control remoteName, conversation title, and conversation UUID as different identities.
  • Prefer submit_prompt plus wait_for_claude_turn. Use terminal capture for attention states and low-level diagnosis, not as the clean answer channel.
  • Claude spinner phrases are variable. Trust the returned structured state, completion ordering, and transcript cursor rather than matching a particular phrase.
  • Treat workflowPending: true as busy even when the composer appears idle. The MCP combines the exact dynamic-workflow wait control line with sanitized session-log task lifecycle evidence and blocks submit, low-level text/Enter, rename, replacement, and ordinary stop with reason workflow_pending. On Claude 2.1.289 the Waiting for N dynamic workflows to finish row stays on screen after the workflow ends. Once a complete, certain session log (workflowObservationCoverage: "full") has seen the workflow launch, the log decides and the stale row is neither pending nor busy evidence. With head_tail coverage, or before the log has seen a launch, the row still holds workflowPending. Then confirm in Claude that the workflow finished; with authorization, and only when terminalState is otherwise idle and the composer is empty, repeat the blocked submit_prompt, send_text, send_key, rename_claude_session, or stop_remote_control call with force: true (a replacement uses forceKillExisting: true; wait_for_claude_turn takes no force).
  • Read terminalState separately from the combined state. Workflow activity can make state busy while terminalState remains idle. When workflowPending is false, workflowPendingEvidence is intentionally empty; use workflowObservationCoverage and workflowObservationSkippedBytes to tell a full scan from a bounded head/tail recovery of a large session log. Treat workflowObservationUncertain: true as a fail-closed pending state: skipped-middle history cannot prove current workflow completion or current model, effort, or permission posture. A current explicit workflow counter or bound interruption in the observed tail can restore current-state certainty, but a counter alone cannot clear known pending workflows. The skipped middle is never replayed, and coverage stays head_tail.
  • Treat C-m, C-j, KPEnter, and other documented Enter equivalents as submissions. They use the same pending-workflow gate as Enter and Return.
  • Do not infer workflow completion from a final assistant record, worker results, an idle composer, or a pending count. The MCP releases a tracked workflow whose launch bound a task ID and a run ID only on current evidence for it: a direct terminal record with the matching run ID, a completed TaskOutput retrieval (older CLIs; Claude 2.1.289 has no TaskOutput tool) or Claude's own task notification for that task (a run ID may be absent but must match if present; notification statuses completed, failed, killed, or an older terminal word release, while blocked and unknown statuses stay pending), or the workflow snapshot of a fresh native-Windows managed conversation. A current bound interruption can also clear the tracked set. Keep waiting until workflowPending clears or handle a bounded timeout. If Claude shows the workflow finished but it stays pending, use the authorized force recovery described above.
  • Treat tool_use as in progress. Check textTruncated, textSha256, and textCharacters before assuming a large report was returned in full. Use get_claude_result with resultId for exact chunks until hasMore is false.
  • Never type over a busy or non-empty composer unless the user deliberately authorizes an inspected force action. Native-Windows keyword mode never crosses a draft or paste placeholder: pasteMode: "keyword" needs an empty composer even with force: true, and otherwise returns preflight_blocked (active_input_not_empty or paste_pending, plus forceRefused: true when force was requested) without sending anything.

Read the full file on GitHub · 337 lines

Files

What ships with it

2 files 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.

Changes

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.

  1. 12d ago Changed · +166 lines · +16 tokens per session 3afbe2e77556
  2. 1mo ago Changed · +27 lines 393ca46dd35f
  3. 2mo ago First seen · 144 lines · 83 tokens per session scan A cede58012595

Subscribe to this mod's changes

rail-operator is a skill published in the GitHub repository SNComrade/Rail-Connector-MCP (0 stars, last pushed 4d ago), licensed MIT. It adds 99 tokens to every session and 5,109 once invoked, about $0.0004 per session on Opus 5.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.

Related

Other skills, from other repositories

claude-api

Build, debug, and optimize Claude API / Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements). TRIGGER when: code imports anthropic/@anthropic-ai/sdk; user asks for…

warpdotdev/warp · 193 tokens

create-skill

Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.

warpdotdev/warp · 64 tokens

figma-generate-design

Use this skill alongside figma-use when the task involves translating an application page, view, or multi-section layout into Figma. Triggers: 'write to Figma', 'create in Figma from code', 'push page to Figma', 'take this app/page and build it in Figma', 'create a screen', 'build a landing page in Figma', 'update the…

warpdotdev/warp · 160 tokens

figma-create-design-system-rules

Generates custom design system rules for the user's codebase. Use when user says "create design system rules", "generate rules for my project", "set up design rules", "customize design system guidelines", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server…

warpdotdev/warp · 71 tokens

figma-generate-library

Build or update a professional-grade design system in Figma from a codebase. Use when the user wants to create variables/tokens, build component libraries, set up theming (light/dark modes), document foundations, or reconcile gaps between code and Figma. This skill teaches WHAT to build and in WHAT ORDER — it…

warpdotdev/warp · 95 tokens

figma-use

MANDATORY prerequisite — you MUST invoke this skill BEFORE every usefigma tool call. NEVER call usefigma directly without loading this skill first. Skipping it causes common, hard-to-debug failures. Trigger whenever the user wants to perform a write action or a unique read action that requires JavaScript execution in…

warpdotdev/warp · 114 tokens