AI coding agents¶
Start the demo stack (The demo application), open your agent in the repository,
and describe what you want built. AGENTS.md is the contract it works
to: it initializes Orbitron before anything else, so it works from this
project’s installed Kinetis versions and verified layout rather than
from recalled framework knowledge.
Getting a session ready¶
The agent can only initialize on a turn, never between turns, so it
checks on every turn until the orbitron tools and resources are
listed. Until then it answers questions about setup and these
instructions, and nothing else.
Complete the stack’s initial setup,
docker compose up --build -d, so theappimage exists and its vendor volume is populated. The MCP server runs in a disposable container built from that image. The launcher can do this part itself on a fresh clone (below), but its first launch then takes as long as the build and the install.Reload, restart or reconnect the client when the MCP configuration arrived or changed after the session started, or when an earlier launch failed before step 1 completed.
Approve the project-local
orbitronserver under your client’s own policy (Trust and approval).The agent reads
kinetis://orbitron/contextandkinetis://docs/agent-workflow, callsorbitron_inspect, checks that thecheckoutRootit reports is this checkout’spwd -P, and callsorbitron_verify.It reports readiness in one line, then gets on with your request:
Orbitron ready — kinetis/framework <installed-version>, layout pass (App\, App\Tests\).
An agent with a shell does step 1 itself. Steps 2 and 3 are yours: it cannot reconnect the server it runs inside, or approve itself. When a step fails it stops, names the step, quotes the error and points you to Diagnostics. A refusal to start is the contract working.
What is checked in¶
AGENTS.md, the agent contract and the only place it is written.CLAUDE.mdandGEMINI.mdimport it.bin/orbitron-mcp, and one configuration per client:.mcp.json,.codex/config.tomland.gemini/settings.json. Each registers the stdio serverorbitron, launched as./bin/orbitron-mcp, plus the Nuxt, Vuetify and Vue documentation servers for frontend work.
bin/orbitron-mcp runs vendor/bin/kinetis-orbitron-mcp through
docker compose --progress quiet run --rm -T --no-deps --entrypoint sh
on the app service: a one-off container from app’s image, sharing
its project and vendor mounts but not its lifetime. --entrypoint sh
skips the entrypoint’s composer install on every launch, and
--no-deps starts no other service. On a fresh clone the launcher sets
itself up: it copies a missing backend/.env from
backend/.env.example (set JWT_SECRET in it before the app itself
boots), and when the vendor volume has never been populated it runs
composer install under the entrypoint’s own vendor/.install.lock,
with its output on stderr, so it never writes the tree while app does.
Restarting, recreating or rebuilding app leaves a session connected.
The container sees every checkout as /workspace/demo/backend, so the
launcher passes the host path in KINETIS_ORBITRON_CHECKOUT_ROOT, which
orbitron_inspect reports as checkoutRoot. The host needs no PHP and
no Composer.
That one server is the whole registration. The Kinetis documentation
arrives on the same connection, as kinetis://docs/* pages. Those pages
describe Kinetis main, so orbitron_inspect and the installed-source
tools stay the authority for anything version-sensitive. The tools read
any installed package, kinetis/vector included; vendor/ is a Docker
volume, so they are also the way to reach it from the host. See
Orbitron for every tool.
Trust and approval¶
The checked-in files register a server and configure nothing else: no
credential, no trust override, no preapproved tool. Your client’s own
trust and approval policy applies, and it differs by client. Claude Code
prompts about a project-scoped .mcp.json in an interactive session.
Codex reads .codex/config.toml only for a trusted project. Gemini CLI
may ignore workspace settings in an untrusted workspace, where a server
without trust keeps its default, false.
Reload or restart the client when this configuration was added or changed after the current session started.
Client differences¶
Client |
Reads instructions from |
Project MCP configuration |
|---|---|---|
Claude Code |
|
|
Codex |
|
|
Gemini CLI |
|
|
Any other MCP client |
|
Register |
Without MCP¶
The four Orbitron documents are commands too, for an agent that only has a shell, or for you:
docker compose exec app vendor/bin/kinetis orbitron:context
docker compose exec app vendor/bin/kinetis orbitron:inspect
docker compose exec app vendor/bin/kinetis orbitron:verify
docker compose exec app vendor/bin/kinetis orbitron:scaffold
orbitron:scaffold --apply is the only one that writes, and it writes
two fixed files. Inside the container, orbitron:inspect reports
/workspace/demo/backend as both roots: the container’s view, not the
host checkout. See
Appendix: Orbitron.
Diagnostics¶
The server fails to start on a fresh clone. Its first launch
builds the app image when it is absent and installs the dependencies
into an empty vendor volume, and a client whose server start-up timeout
is shorter reports it as failed. Bring the stack up, then restart the
client:
docker compose up --build -d
docker compose ps
An app restart, recreation or rebuild. It does not disconnect
Orbitron, which runs in its own container. Nothing to do.
The server was there and is gone. Docker stopping, or the client ending its own process, removes the one-off container. Launch or connect the client again; the stack itself can still be healthy.
docker compose down fails with a network still in use. A live
session keeps its container on the project network, so down removes
app and then fails:
Network <project>_default Resource is still in use
End the client session, run down again, and relaunch the client once
the stack is back up.
The server shows as disconnected. Run the launcher yourself. A working server answers a handshake on stdin:
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"manual","version":"0"}}}' \
| ./bin/orbitron-mcp
A result naming kinetis-orbitron-mcp means the launcher and the server
work, and what remains is the client: its trust policy, or a tool
catalog that has not picked the server up yet.
A dependency change. It needs no restart. Orbitron reads the
installed-package inventory on every call, so after a composer require
the next orbitron_inspect already sees it.
orbitron_verify reports an error. The code of each failed check
names the outcome. This project keeps the layout Orbitron admits, one
autoload.psr-4 prefix mapped to src/ and one autoload-dev.psr-4
prefix mapped to tests/, so an error means demo/backend/composer.json
moved away from it. See
Appendix: Orbitron
for every code.
See also¶
Working on Vector — the tests and checks a change must pass.
The demo application — the stack the agent works in.
Vector for coding agents — what an agent working on an application that installs Vector reads, as
kinetis://docs/vectorfrom the Kinetis documentation.