Docs: Add an orchestrator agent, two skills and MCP server tests - #1699
Open
DawidWesierski4 wants to merge 1 commit into
Open
Docs: Add an orchestrator agent, two skills and MCP server tests#1699DawidWesierski4 wants to merge 1 commit into
DawidWesierski4 wants to merge 1 commit into
Conversation
DawidWesierski4
requested review from
Sakoram,
awilczyns,
moleksy and
soopel
as code owners
August 28, 2026 14:10
The agent knowledge base of this repository holds two parallel trees: `.github/agents/`, `.github/copilot-instructions.md` and `.github/copilot-docs/` for Copilot, and `.github/claude/` for Claude Code, with one shared copy of every skill in `.github/skills/`. This change touches only those trees. It changes no library, no test and no workflow. Both sides had five agents, and no agent that could invoke another one. The user had to hold the task list, pick the next task, decide what could run at the same time, and fire the two exit gates that `mtl-developer` can only name. `mtl-orchestrator` now owns all four. It writes code itself: nothing. `.github/claude/agents/mtl-orchestrator.md` and `.github/agents/mtl-orchestrator.agent.md` are the two sides of the same agent. `mtl-developer` and `mtl-planner` said "the user" where they meant "whoever invoked me". Both now say invoker, and name the orchestrator as one. `mtl-planner` may still spawn nothing but `Explore`, and still may not implement. `.github/copilot-instructions.md` adds the orchestrator to the agent list and to the routing matrix, with the rule that it is the only agent that may invoke the others. `mtl-cicd` holds the CI/CD design contract that was until now only readable from the shape of the workflows: YAML orchestrates, it does not implement; every operation sits behind a named root `Taskfile.yml` task; substantial shell goes in a human-runnable script that the task calls; a local run and an Actions run enter through the same task; third-party actions are pinned to a commit SHA. `mtl-ste-writing` holds the ASD-STE100 Simplified Technical English rule set that the prose of this repository already follows. It applies to documents, READMEs, pull-request text, error messages and comments, and not to code, identifiers or command syntax. Rules are cited by tag, such as `[S-LEN]`, because a line number moves. Both are one copy in `.github/skills/`, which Claude Code reads through a symbolic link in `.github/claude/skills/`, so the two sides cannot drift. `requirements.txt` asked for `mcp[cli]>=1.0.0` with no ceiling. mcp 2.x removed `mcp.server.fastmcp`, which both servers import, so a fresh venv made every `mtl-system-setup` and `mtl-acceptance-setup` tool fail with `ModuleNotFoundError`. The requirement is now `>=1.0.0,<2.0.0`, and the comment says to port the servers before that ceiling is lifted. The two launcher scripts installed dependencies only when `import mcp` failed. An mcp 2.x venv imports `mcp` and has no `fastmcp`, so the guard skipped pip and the new ceiling never applied. They now test for `mcp.server.fastmcp`, which is the module the servers actually import. `.github/mcp/test_mtl_mcp_server.py` covers the part of the server that can be tested without a host: the argv lists it builds, the output it parses, and the two test tools with `_run_rc` replaced by a stub. It starts no binary, needs no NIC and calls no sudo, so it runs anywhere: ```bash .github/mcp/.venv/bin/python -m unittest discover -s .github/mcp -v ``` It uses the standard library `unittest` on purpose, so it adds no line to `requirements.txt` — the file that already broke every MCP tool once by floating a version. * `mtl-gtest.instructions.md`: the `--pacing_way` list held two of the six modes, and said `auto` uses RL. `auto` picks RL only when the driver advertises TM, and TSC otherwise. `--log_level`, `--no_ctx_tests` and `--port_list` were missing. `gtest.sh` no longer prepares the host, so the entry now says what it discovers and names the two tasks that build that state. `run_pf.sh` and `run_noctx_pf_tests` are recorded with the cooldown of each. * `mtl-c-coding.instructions.md` and `mtl-acceptance-tests.instructions.md` follow the same code they describe. * `copilot-instructions.md` said `clang-format-14` enforced by CI. The version now comes from `.pre-commit-config.yaml`, and `pre-commit` installs that copy itself, so the entry says to never `apt install` a clang-format package. * `tests/unit/CLAUDE.md` said ASan checks the whole unit suite. It does not: `enable_asan` reaches the `libmtl.so` compile arguments only, so a production `.c` file that a harness includes is not covered. The two server files also take ruff's formatting of a `textwrap.dedent` call, so a format run leaves them alone. This change touches no library file, no test tier and no workflow, so it has no mechanical dependency on the CI, style or driver pull requests. Merge it after the style pull request all the same. The entry above that sends the reader to `.pre-commit-config.yaml` for the clang-format version is only true once that change makes the file the one source of the lint rules; the file on the default branch today pins no clang-format at all. Signed-off-by: Wesierski, Dawid <dawid.wesierski@intel.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The agent knowledge base of this repository holds two parallel trees:
.github/agents/,.github/copilot-instructions.mdand.github/copilot-docs/for Copilot, and.github/claude/for Claude Code, with one shared copy of every skill in.github/skills/. This change touches only those trees. It changes no library, no test and no workflow.Both sides had five agents, and no agent that could invoke another one. The user had to hold the task list, pick the next task, decide what could run at the same time, and fire the two exit gates that
mtl-developercan only name.mtl-orchestratornow owns all four. It writes code itself: nothing..github/claude/agents/mtl-orchestrator.mdand.github/agents/mtl-orchestrator.agent.mdare the two sides of the same agent.mtl-developerandmtl-plannersaid "the user" where they meant "whoever invoked me". Both now say invoker, and name the orchestrator as one.mtl-plannermay still spawn nothing butExplore, and still may not implement..github/copilot-instructions.mdadds the orchestrator to the agent list and to the routing matrix, with the rule that it is the only agent that may invoke the others.mtl-cicdholds the CI/CD design contract that was until now only readable from the shape of the workflows: YAML orchestrates, it does not implement; every operation sits behind a named rootTaskfile.ymltask; substantial shell goes in a human-runnable script that the task calls; a local run and an Actions run enter through the same task; third-party actions are pinned to a commit SHA.mtl-ste-writingholds the ASD-STE100 Simplified Technical English rule set that the prose of this repository already follows. It applies to documents, READMEs, pull-request text, error messages and comments, and not to code, identifiers or command syntax. Rules are cited by tag, such as[S-LEN], because a line number moves.Both are one copy in
.github/skills/, which Claude Code reads through a symbolic link in.github/claude/skills/, so the two sides cannot drift.requirements.txtasked formcp[cli]>=1.0.0with no ceiling. mcp 2.x removedmcp.server.fastmcp, which both servers import, so a fresh venv made everymtl-system-setupandmtl-acceptance-setuptool fail withModuleNotFoundError. The requirement is now>=1.0.0,<2.0.0, and the comment says to port the servers before that ceiling is lifted.The two launcher scripts installed dependencies only when
import mcpfailed. An mcp 2.x venv importsmcpand has nofastmcp, so the guard skipped pip and the new ceiling never applied. They now test formcp.server.fastmcp, which is the module the servers actually import..github/mcp/test_mtl_mcp_server.pycovers the part of the server that can be tested without a host: the argv lists it builds, the output it parses, and the two test tools with_run_rcreplaced by a stub. It starts no binary, needs no NIC and calls no sudo, so it runs anywhere:It uses the standard library
unitteston purpose, so it adds no line torequirements.txt— the file that already broke every MCP tool once by floating a version.mtl-gtest.instructions.md: the--pacing_waylist held two of the six modes, and saidautouses RL.autopicks RL only when the driver advertises TM, and TSC otherwise.--log_level,--no_ctx_testsand--port_listwere missing.gtest.shno longer prepares the host, so the entry now says what it discovers and names the two tasks that build that state.run_pf.shandrun_noctx_pf_testsare recorded with the cooldown of each.mtl-c-coding.instructions.mdandmtl-acceptance-tests.instructions.mdfollow the same code they describe.copilot-instructions.mdsaidclang-format-14enforced by CI. The version now comes from.pre-commit-config.yaml, andpre-commitinstalls that copy itself, so the entry says to neverapt installa clang-format package.tests/unit/CLAUDE.mdsaid ASan checks the whole unit suite. It does not:enable_asanreaches thelibmtl.socompile arguments only, so a production.cfile that a harness includes is not covered.The two server files also take ruff's formatting of a
textwrap.dedentcall, so a format run leaves them alone.This change touches no library file, no test tier and no workflow, so it has no mechanical dependency on the CI, style or driver pull requests.
Merge it after the style pull request all the same. The entry above that sends the reader to
.pre-commit-config.yamlfor the clang-format version is only true once that change makes the file the one source of the lint rules; the file on the default branch today pins no clang-format at all.