Tomáš Kubica

Skills jako týmová schopnost

Jak centrálně spravovat a řídit skills pro agenty

Stáhnout centrální skill, při potřebě zlepšení udělat lokální PoC, poslat návrh do GitHubu, nechat agenty triážovat i připravit PR po lidském schválení a vylepšený skill distribuovat všem.

Pointa Skill je skvělý pro znalost, instrukce a governance. CLI nebo jiný nástroj je skvělý pro opakovanou, vícekrokovou a měřitelnou práci. GitHub je přirozené místo, kde se z lokální zkušenosti stane týmově řízená schopnost.

Idea

Pro účely dema jsem si vyrobil vlastní API pro správu tasků. Není to GitHub API a nejde o skutečné firemní systémy. Je to simulovaný, kontrolovaný problém: tasky, komentáře, stav waiting-for-response, občasné 429 a workflow, které je dost reálné na to, aby agent narazil na stejné potíže jako v praxi. Celý demo katalog je veřejně v repozitáři tkubica12/skills-demo-catalog.

V katalogu je skill task-api-helper, který obsahuje:

  • SKILL.md s instrukcemi a popisem schopnosti.
  • scripts/task_cli.py jako CLI wrapper nad Task API.
  • references/API.md pro pochopení podkladového API, když CLI nestačí.
  • references/IMPROVEMENT-PROCESS.md s pravidly, jak skill vylepšovat přes centrální proces.

Typická evoluce skillu nad API je podle mě tahle:

Cesta od znalosti ke sdílené schopnosti

  1. 1Skill jako kontext

    Markdown vysvětlí API, business kontext a dobrý postup použití.

  2. 2Přidání CLI

    Agent používá stabilní příkazy místo skládání curl, JSON escapingu a ručních retry.

  3. 3Vyšší operace v CLI

    Opakované vícekrokové workflow se přesune do kódu, aby ho agent nemusel pokaždé znovu skládat.

Tady se objevila zásadní otázka: pokud takové skilly začnou vznikat lokálně, jak je spravovat centrálně pro tým? Nechci, aby každý kopíroval soubory ručně. Chci governance, návrhy změn, schválení, benchmarky a jasnou distribuci.

Lokální zkušenost

V novém, úplně obyčejném repozitáři nainstaluji skill z centrálního katalogu pomocí gh skill:

Instalace z centrálního katalogu
gh skill install tkubica12/skills-demo-catalog task-api-helper --scope project --agent github-copilot

Pak v nainstalovaném skillu nastavím .env, aby CLI vědělo, kde běží demo Task API:

.agents/skills/task-api-helper/.env
TASK_API_URL=https://task-api-demo.example.azurecontainerapps.io

Konzumentský repozitář je pořád čistý. Schopnost přišla z katalogu, ne z lokálního copy-paste promptu.

Agent umí Task API použít. Umí vypsat tasky čekající na odpověď, otevřít konkrétní task a přidat komentář. Problém začne ve chvíli, kdy chci stejný komentář přidat ke všem taskům ve stavu waiting-for-response.

> List tasks waiting for response and summarize what needs attention.

The Task API is responding, but the first request hit a rate limit. I’m checking the response shape and then retrying with a short pause so I can give you the actual waiting items instead of a guess.

5 tasks are waiting for response. The ones needing the most attention are the two high-priority items stalled on external confirmation or approval.

  ┌──────────────────────────────────────────────────────────────────┬──────────┬───────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Task                                                             │ Priority │ Assignee          │ Needs attention                                                                                                        │
  ├──────────────────────────────────────────────────────────────────┼──────────┼───────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ task-1 — Waiting on customer confirmation — order #8821          │ High     │ alice@example.com │ Customer still has not confirmed after the initial outreach and a 48-hour follow-up.                                   │
  │ task-3 — Awaiting legal sign-off on NDA amendment                │ High     │ carol@example.com │ Legal review is pending after the NDA draft was forwarded.                                                             │
  │ task-2 — Pending vendor reply for Q3 renewal                     │ Medium   │ bob@example.com   │ Vendor has not replied since the renewal quote was sent.                                                               │
  │ task-5 — Infrastructure cost review — ops team response needed   │ Medium   │ eve@example.com   │ Ops response is pending, and there is no comment history, so this likely needs owner context or a first follow-up.     │
  │ task-4 — Customer reported login failure — needs repro steps     │ Low      │ dave@example.com  │ Blocked waiting for the customer to provide reproduction steps.                                                        │
  └──────────────────────────────────────────────────────────────────┴──────────┴───────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

> Open task-1 and add this comment: "Following up - please provide an update."

Added the comment to task-1. The API accepted it as comment c-c0d260d5.

> Add the same comment to every task waiting for response.

The bulk run hit rate limits mid-stream. I’m reading the exact output and then I’ll finish only the tasks that didn’t get updated.
task-5 was the only one not updated. I’m retrying that single task with a slower cadence to get it through cleanly.
Done. The comment was added to all other tasks currently in waiting-for-response, and task-1 was skipped because it already had the same comment.

Přesně v tomhle momentu dává smysl zeptat se agenta, co by šlo udělat lépe. Ne proto, aby rovnou změnil centrální katalog, ale aby nejdřív popsal opakovanou bolest a navrhl ověřitelný lokální experiment.

Best improvement: add a first-class bulk command to the shared CLI, for example:

python task_cli.py bulk-add-comment --status waiting-for-response --text "Following up - please provide an update." --skip-existing

That would help because this workflow currently requires list -> get each task -> detect duplicates -> post comment, which is slow and exposed to 429 rate limits. A bulk command could make it both faster and more reliable by handling:

- built-in retry/backoff for rate limits
- duplicate-comment detection (--skip-existing)
- a single summary of which tasks were updated or skipped

Per the skill’s process, the right next step would be a local proof of concept that captures before/after evidence: fewer API calls, fewer retries, and cleaner operator output.

Tady je důležitý governance detail: konzumentský agent si může udělat dočasný lokální PoC, aby ověřil hypotézu. Nemá ale trvale forkovat centrální skill. Po ověření má lokální změnu zahodit a otevřít issue v katalogu s důkazy.

Výsledek v demu: skills-demo-catalog issue #15.

Původní postup musel dělat list -> get jednotlivých tasků -> kontrolu duplicit -> komentář po jednom. V PoC měření zvládl 4/5 tasků, trval asi 29.96s a narazil na 1 rate-limit failure.

> OK, this make sense. Follow improvement guide, test this idea locally as PoC and if it is good, publish this is detailed issue into skills-demo-catalog repository.

I’m setting up a proper local PoC in the installed skill, capturing before/after evidence, and then I’ll revert the local patch before opening the upstream issue if the results hold.
I’ve got a clean baseline: 11 calls over ~30s, one 429, and only 4 of 5 tasks updated.
The first PoC run worked cleanly: all 5 tasks updated in about 6 seconds with no failures.
I’ve got enough evidence now: the PoC fixed the partial-failure case and validated duplicate skipping. I’m writing the findings down, restoring the installed skill to the published baseline, and then I’ll open the upstream issue from that evidence.

https://github.com/tkubica12/skills-demo-catalog/issues/15

Centrální governance

Lokální PoC je dobrý pro učení. Pro tým potřebujeme repozitář, který je katalog, audit trail, distribuční mechanismus i místo, kde se rozhoduje o změnách.

Životní cyklus zlepšení

  1. 1
    Local experiment

    Konzumentský tým zkusí dočasný PoC proti workflow, které ho bolí.

  2. 2
    Benchmark

    Zachytí před/po evidenci: čas, retry, méně ručních kroků, čistší výstup.

  3. 3
    Issue with template

    Lokální změny se zahodí a otevře se issue v katalogu.

  4. 4
    Advisory triage

    Agentická workflow přidá doporučení a případně copilot-recommended.

  5. 5
    Human triage

    Maintainer rozhodne, jestli změna patří do sdíleného kontraktu.

  6. 6
    Copilot implementation

    Po accepted implementuje změnu cloud agent.

  7. 7
    Pull request

    PR mění CLI, dokumentaci, testy a benchmark spec.

  8. 8
    Catalog release

    Po merge se katalog taguje a vydává.

  9. 9
    Consumer update

    Konzumenti aktualizují skill a zahodí lokální workaround.

Pro triáž jsem použil GitHub Agentic Workflows v GitHub Actions. Workflow si přečte issue, ověří, jestli má lokální PoC důkazy, a přidá stručné doporučení pro maintainera. Důležité: agent nepřidává accepted a nenahrazuje lidské rozhodnutí.

Issue s PoC evidence
Issue s PoC evidence.
Agentic triage workflow run
Agentic triage workflow run.
Accepted label jako signál pro další krok
Accepted label jako signál pro další krok.

Agentické doručení

Další krok je záměrně jednoduchý: po přidání labelu accepted se issue přiřadí Copilotovi v cloudu. Ten má z issue a katalogu dost kontextu, aby připravil změnu jako pull request. Člověk pořád rozhoduje, ale repetitivní implementační práce jde na agenta.

Workflow pro spuštění cloud agenta
Workflow pro spuštění cloud agenta.
Cloud agent začíná pracovat
Cloud agent začíná pracovat.

V tomhle pokusu jsem do agenta nijak dále nezasahoval. Výsledek nebyl dokonalý, ale byl dost dobrý na review: přidal vyšší CLI operaci, aktualizoval skill instrukce, doplnil testy a připravil benchmark spec. Přesně tak má podle mě vypadat první agentické doručení.

Pull request od agenta
Pull request od agenta.
Detail změn v PR
Detail změn v PR.

Benchmark je důležitý, protože jinak by šlo jen o dojem. V lokálním PoC už máme důkaz, že vyšší operace pomohla:

VariantaÚspěšnostČasRate-limit failure
Baseline loop4/529.96s1
Bulk PoC5/56.27s0

V PR jde demo ještě dál: workflow ci-benchmark.yml spustí agentický benchmark přes GitHub Copilot SDK a porovná stejný cílový úkol se skillem z main a se skillem z PR. Měří úspěch, počet aktualizovaných tasků, čas, input/output tokeny, LLM calls, Task API requests a 429.

Benchmark workflow
Benchmark workflow.
Benchmark summary
Benchmark summary.

Shrnutí a co si vyzkoušet

Pointa není v jednom hezčím promptu. Pointa je v tom, že lokální zjištění nezůstane lokálním hackem, ale projde přes důkaz, issue, lidské rozhodnutí, agentickou implementaci a měřené vydání zpět do sdíleného katalogu.

Katalog

skills-demo-catalog drží zdroj pravdy pro skill, CLI, API reference a improvement proces.

Governance

Lokální PoC vede do issue, triáže, lidského accepted a PR.

Měření

Benchmarky ukazují čas, tokeny, LLM calls, API requests a 429.

Distribuce

Konzumenti aktualizují centrální skill přes gh skill, místo aby udržovali lokální fork.

Checklist pro vlastní katalog

  • Používejte gh skill pro správu skillů a jejich verzování v centrálním repozitáři.
  • Přidejte ke skillu jasný improvement process: PoC, evidence, issue template.
  • Nechte agenta nejdřív zkusit lokální disposable PoC, ale nenechte ho tajně forkovat centrální skill.
  • Použijte GitHub Actions a labely jako explicitní governance signály.
  • Vyzkoušejte GitHub Agentic Workflows pro triáž, dokumentaci nebo agentické testování.
  • Používejte GitHub Copilot cloud agenta pro přetavení issue na kód a pull request.
  • Měřte kvalitu skillu přes Copilot CLI nebo SDK přímo v pipeline.
  • Prohlédněte si celé demo: tkubica12/skills-demo-catalog.

Lokální skill je začátek. Centrálně řízený proces je to, co z něj udělá týmovou schopnost.