{
  "markdown": "# Agent Runway\n\nA Claude Code plugin that gives subagents architectural awareness before they write code.\n\n## The Problem\n\nWhen Claude Code delegates work to subagents, those agents operate in complete isolation. They receive no CLAUDE.md rules, no memory, no understanding of your project structure. A subagent asked to \"reduce complexity in the router\" will happily extract helpers inline instead of moving them to your `helpers/` module. It will add comments to \"explain\" its changes. It will slap `# noqa` on a linting error instead of fixing it.\n\n## The Fix\n\nAgent Runway works in two layers:\n\n1. **Prevention**: Intercepts every subagent spawn and injects your project's architectural context into its prompt. The subagent knows your module boundaries before writing a single line.\n2. **Correction**: Validates every file write and tells the agent to fix violations. The agent self-corrects without human intervention.\n\nInstall it, forget about it, and your subagents stop creating tech debt.\n\n## What Happens\n\nOn **session start**, the plugin scans your project: directory structure, module purposes, CLAUDE.md rules. It caches this as an architectural map.\n\nWhen Claude **spawns a subagent**, the plugin intercepts the `Agent` tool call and prepends the map to the subagent's prompt via `updatedInput`. The subagent now knows which directories exist, what each is for, what's forbidden where, and your project's rules.\n\nThis is what a subagent sees before its task:\n\n```\n=== AGENT RUNWAY: ARCHITECTURAL CONTEXT ===\n\nProject: my-project\n\nModule Boundaries:\n- routers/ -> HTTP route/endpoint definitions. NO: helper functions, business logic\n- services/ -> Business logic and orchestration. NO: route definitions\n- helpers/ -> Shared utility/helper functions\n- tests/ -> Test suite. NO: production code\n\nMandatory Conventions:\n- NO INLINE COMMENTS [warn]\n- NO LINT SUPPRESSIONS [warn]\n- NO HELPERS IN ROUTERS [warn]\n\nCLAUDE.md Rules (MANDATORY):\n- DO NOT LEAVE ANY COMMENTS IN THE CODE\n- ASK QUESTIONS BEFORE YOU DO ANYTHING\n\n=== END ARCHITECTURAL CONTEXT ===\n\n[original task prompt follows]\n```\n\nNo extra tokens in your main conversation. No agent definitions to modify. It just works.\n\n## Installation\n\n### From GitHub\n\n```bash\n/plugin marketplace add rennf93/agent-runway\n/plugin install agent-runway@rennf93\n```\n\n### Local development\n\n```bash\nclaude --plugin-dir /path/to/agent-runway\n```\n\n## Zero Config Required\n\nAgent Runway works out of the box. It auto-discovers your project structure by matching directory names against 25+ known patterns (`routers/`, `services/`, `helpers/`, `models/`, `tests/`, `middleware/`, `adapters/`, etc.) and infers purpose for unknown directories by sampling code files. It extracts imperative rules from your CLAUDE.md automatically.\n\nNo `.agent-runway.yml` needed unless you want explicit control.\n\n## Self-correction\n\nThe pre-flight injection prevents most violations — subagents that know the architecture write code in the right place. But when something slips through, Agent Runway catches it and tells the agent to fix it.\n\nAfter every Write/Edit, two validators run:\n\n- **Convention validator**: Catches comments, lint suppressions, and custom patterns across 13 languages\n- **Placement validator**: Catches code written in the wrong module (helpers in routers, business logic in controllers)\n\nWhen a violation is found, the agent receives a directive like:\n\n```\n[Agent Runway] You wrote code with convention violations in routers/users.py. Fix these before moving on:\n  - L6: # Helper function to format user data\n  - L19: Lint suppression (noqa): if \"@\" not in email:  # noqa: E712\nEdit routers/users.py to resolve these violations, then continue with your task.\n```\n\nThis is injected as `additionalContext` — Claude treats it as an instruction, not a suggestion. The agent fixes the issue and continues. No human intervention needed.\n\nAll rules are **enabled in warn mode by default**. The edit is never blocked — the agent self-corrects. Block mode (hard rejection of the edit) is available but disabled by default:\n\n```yaml\nconventions:\n  no_inline_comments:\n    enabled: true\n    enforcement: block\n```\n\n### Supported Languages\n\n| Language | Comment Style | Suppressions Detected |\n|----------|--------------|----------------------|\n| Python | `#` | `noqa`, `type: ignore`, `pylint: disable`, `pragma: no cover`, `fmt: off`, `isort: skip`, `mypy: ignore` |\n| TypeScript/JS | `//` | `@ts-ignore`, `@ts-nocheck`, `@ts-expect-error`, `eslint-disable`, `biome-ignore`, `prettier-ignore`, `c8/istanbul/v8 ignore` |\n| Go | `//` | `nolint`, `nosec`, `go:nosplit`, `go:noinline`, `exhaustive:ignore` |\n| Java | `//` | `@SuppressWarnings`, `CHECKSTYLE: OFF`, `NOSONAR`, `NOPMD`, `spotbugs:ignore` |\n| Kotlin | `//` | `@Suppress`, `ktlint-disable`, `@file:Suppress` |\n| Scala | `//` | `scalafix:off`, `scalastyle:off`, `@SuppressWarnings` |\n| C/C++ | `//` | `NOLINT`, `NOLINTNEXTLINE`, `pragma warning(disable)`, `GCC/clang diagnostic ignored` |\n| C# | `//` | `pragma warning disable`, `ReSharper disable`, `SuppressMessage` |\n| Rust | `//` | `#[allow(...)]`, `#![allow(...)]` |\n| Swift | `//` | `swiftlint:disable`, `swift-format-ignore` |\n| PHP | `//` | `phpcs:ignore`, `@phpstan-ignore`, `@noinspection`, `psalm-suppress` |\n| Shell | `#` | `shellcheck disable` |\n| Ruby | `#` | `rubocop: disable`, `steep:ignore`, `sorbet: ignore` |\n\nSee [Built-in Rules](docs/rules.md) for details on each rule.\n\n## Configuration\n\nCreate `.agent-runway.yml` in your project root only if you need to:\n\n- Override auto-discovered module purposes or forbidden definitions\n- Set specific rules to `block` enforcement\n- Add custom regex patterns\n- Tune context injection size\n\nSee [Configuration Reference](docs/configuration.md) for the full schema and [Examples](docs/examples.md) for ready-to-use configs for FastAPI, Django, Flask, Next.js, Express, Go, and monorepos.\n\n## Skills\n\n| Skill | Description |\n|-------|-------------|\n| `/agent-runway:runway-status` | Display the current architectural map, active conventions, and enforcement levels |\n\n## Documentation\n\n| Document | Description |\n|----------|-------------|\n| [Configuration Reference](docs/configuration.md) | Full `.agent-runway.yml` schema |\n| [Architecture](docs/architecture.md) | How the plugin works internally |\n| [Built-in Rules](docs/rules.md) | All convention rules and what they catch |\n| [Examples](docs/examples.md) | Per-language and monorepo configs |\n| [Contributing](CONTRIBUTING.md) | How to contribute |\n| [Testing](TESTING.md) | How to test locally |\n\n## Known Limitations\n\n**Comment detection is regex-based.** String literals are stripped before checking (preventing most false positives), but edge cases with complex interpolation may slip through.\n\n**Placement heuristics use function names.** Route decorators are detected and excluded, but undecorated functions with ambiguous names may be misclassified.\n\n**No Windows CI.** Path handling is cross-platform (`os.tmpdir()`, `path.join`), but untested in CI.\n\n## Requirements\n\n- Claude Code CLI\n- Node.js >= 18\n\n## License\n\nMIT\n",
  "bytes": 7101,
  "sha": "2f9ca7f4fb77a6644e09d0cce93842aa2ef55c0dd953a1f8724cb161b55398f8",
  "repo_slug": "rennf93/agent-runway",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_rennf93_agent_runway_agent_runway_2b24f80b/readme"
}