Skip to content

Docs: Add an orchestrator agent, two skills and MCP server tests - #1699

Open
DawidWesierski4 wants to merge 1 commit into
mainfrom
ai/agents-skills-mcp
Open

Docs: Add an orchestrator agent, two skills and MCP server tests#1699
DawidWesierski4 wants to merge 1 commit into
mainfrom
ai/agents-skills-mcp

Conversation

@DawidWesierski4

Copy link
Copy Markdown
Collaborator

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:

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

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant