memoryJedna statická binárka — nad vaším coding CLI

mcptask runner – AI vývojár na vašom stroji. Dotiahne úlohy až do zlúčeného PR.

mcptask_runner premení vaše coding CLI — Claude Code, Codex CLI alebo OpenCode — na samostatného člena tímu. Funguje s Claude, Kimi, DeepSeek, lokálnou ollamou alebo akýmkoľvek modelom — bez vendor lock-inu. Vyberie úlohu, napíše kód aj testy a otvorí PR. V režimoch auto-squash ho po zelenom CI zlúči; v manuálnych režimoch nechá PR otvorené na vašu kontrolu. Zadáte večer dobre špecifikovanú prácu, ráno ju nájdete hotovú.

verified_user30 dní zadarmo. Bez kreditnej karty. Kedykoľvek zrušíte.

terminal
mcptask_runnermcptask_runner run today
→ Triage: difficulty=13, model=opus, complexity=high
→ Picking next task#10959 (Nová veřejná stránka o mcptask_runner)
→ Snapshotstarting → triage → processing
→ Branchfeature/10959-runner-public-page
→ CI✓ green
→ PR auto-merged
→ Quota: 18% of daily budget used
1 príkazna štart
~2 mink prvej úlohe
infoČo to je

Plný autonómny harness nad vaším coding CLI

mcptask_runner je jedna statická binárka bez runtime závislostí — riadi coding CLI na vašom stroji a beží celý agentný cyklus: nájde úlohu → posúdi zložitosť → zvolí model → spustí coding CLI → stráži beh watchdogom → dodrží dennú kvótu → (voliteľne) po CI zlúči PR. Funguje s akýmkoľvek projektom, ktorý používa git, na GitHube, na Bitbucket Cloude, alebo na GitLabe — nič v ceste vykonávania nevyžaduje Ruby, bundler ani Gemfile, metadáta projektu sa berú z CLAUDE.md a `bin/ci` je konvencia (žiadny `bin/ci` → preskočí sa). Žiadny prompt, ktorý runner skladá, už nemenuje príkaz konkrétneho frameworku: projekt, ktorý sa pred browser testami potrebuje pripraviť, si to povie sám — vo svojom CLAUDE.md, alebo v príkaze, ktorý odovzdá `/test-runner`.

auto_awesome

Nie je to len „tupý spúšťač" coding CLI. Pridáva orchestráciu, dohľad, zotavenie a riadenie kvality, ktoré holé CLI nemá.

tuneVaše coding CLI

Vyberte CLI, ktoré bude riadiť váš projekt

Harness je coding CLI, ktoré runner riadi. V binárke sú tri profily — Claude Code, Codex CLI a OpenCode — a vlastný profil žije v ~/.mcptask/harnesses/. Voľba sa robí raz pre každý stroj a projekt, urobí ju init a zapíše harness: do config/mcptask_runner.yml. Ten súbor je per-stroj a je v .gitignore, takže dvaja vývojári nad rovnakým repozitárom môžu riadiť rozdielne CLI.

terminalJeden príkaz
mcptask_runner init --cli codex

layersTri pribalené profily

auto_awesome

Claude Code

mcptask_runner init --cli claude
Skills
12 v .claude/skills
MCP konfigurácia
.mcp.json
Instrukcie
CLAUDE.md
Modely
aliasy opus / sonnet / haiku
Oprávnenia
.claude/settings.local.json
terminal

Codex CLI

mcptask_runner init --cli codex
Skills
9 v .agents/skills
MCP konfigurácia
.codex/config.toml
Instrukcie
ukazovateľ v AGENTS.md
Modely
gpt-6-astra, gpt-5.6-terra, gpt-5.6-luna
Preflight
codex login status musí prejsť
code

OpenCode

mcptask_runner init --cli opencode
Skills
9 v .claude/skills
MCP konfigurácia
opencode.json
Instrukcie
CLAUDE.md
Modely
provider/model
Oprávnenia
permission mapu vloží runner

report_problemŽiadny default neexistuje

Projekt, ktorý CLI nikdy nepomenoval, runner odmietne menom — nepredpokladá ticho Claude Code. launcher.command zostáva override samotného argv a je krížovo kontrolovaný proti harness: — nemôže pretlačiť iné CLI, než aké projekt deklaroval.

hubČo je na všetkých troch rovnaké

Profil drží binárku, argv, resume flag, literály zlyhania, mená nástrojov a skillov a to, čo zapisuje init. Všetko, čo robí runner runnerom, je nad profilom a s voľbou CLI sa nemení.

enginewatchdogpracovná smyčkakarta na dashboardebug piecerun log

ruleLimity, povedané naplno

call_split

Fork skills sú len na Claude Code

discover, memory-search a mcptask-read forkujú lacného subagenta, aby sa surový výstup nikdy nedostal do rodičovského kontextu. To vie iba Claude Code, takže profily Codex a OpenCode majú deväť skillov namiesto dvanástich. Deväť helper skriptov je na všetkých troch rovnakých.

login

Codex potrebuje funkčný login

codex login status musí prejsť, než beh začne. Preflight radšej odmietne, než aby spotreboval kvótu na CLI, ktoré spadne pri prvom volaní.

lock_open

OpenCode nemá read-only flag

Nie je čo predať, takže runner namiesto toho vloží permission mapu. Read-only garancia je rovnaká; mechanizmus nie.

verifiedOverené, nie len tvrdené

Conformance a chaos suity bežia v CI proti všetkým trom dialektom a profily nie sú funkcia na papieri: reálny beh na Codexe dokončil úlohu 9. 9. 2026 a OpenCode má za sebou vlastné reálne behy.

storageVaše reálne prostredie

Na vašom stroji, proti realite

Cloud agenti bežia v očistených sandboxoch. Runner beží vo vašom reálnom projekte.

storage

Reálna databáza

Hovorí s databázou, ktorú váš projekt už používa — schému, seed dáta aj migračnú históriu, ktorá ju formovala. (PostgreSQL je jeden konkrétny príklad; runner riadi to, čo beží vo vašom projekte.)

fact_check

Reálne system testy

Bežia vstupné body testov vášho projektu, end-to-end — Capybara/Selenium proti vašej reálnej aplikácii ako jeden konkrétny príklad, so screenshotmi a prehliadačovými kontrolami, ktoré dokazujú, že sa zmena naozaj dostala do produkcie.

code

Reálne commity a PR

Vetvy, commity a pull requesty žijú vo vašom repu, s vaším CI, pod vašou Git históriou — na GitHube, na Bitbucket Cloude, alebo na GitLabe, a na všetkých ich otvára `mcptask_runner pr`. Runner spúšťa to, čo spúšťa váš `bin/ci`.

merge_typePull requesty

Pull requesty na GitHube, na Bitbuckete alebo na GitLabe

Runner pracuje s repozitárom na GitHube, na Bitbucket Cloude alebo na GitLabe (gitlab.com aj self-managed) a pull request na všetkých otvára jeden príkaz: mcptask_runner pr. Žiadny prompt ani pribalený skill už nemenuje CLI konkrétneho hosta — binárka sa hosta spýta sama, takže rovnaké instrukcie fungujú bez ohľadu na to, kde váš repozitár žije.

terminalPR neotvorí nič iné než mcptask_runner pr

Je to piaty verejný subcommand. Každý subcommand vypíše na stdout jeden JSON objekt, chyby idú na stderr s nenulovým exit kódom a --git-host prepíše hosta pre jedno zavolanie. Samotné git_host: je nepovinné — runner ho odvodí z git remote get-url origin a init --git-host bitbucket|gitlab je tu pre aliasy, mirrory a self-managed inštancie.

list_altŠesť subcommandov

pr create

Otvorí pull request pre aktuálnu vetvu.

pr list

Vypíše pull requesty, filtrované cez --task, --branch, --open alebo --state.

pr view

Prečíta jeden pull request ako JSON.

pr reviews

Prečíta review, ktoré na pull requeste zostali.

pr merge

Zlúči ho — --squash a --delete-branch sú default, pretože práve to auto-squash znamená.

pr checks

Spýta sa hosta, čo jeho checky hovoria o head commite.

keyTraja hostia, tri modely prihlásenia

hub

GitHub

Autentizácia cez gh a jeho vlastný login. Šablóna pull requestu sa číta z .github/pull_request_template.md, čo je cesta, ktorú pozná len GitHub.

cloud

Bitbucket Cloud

REST API 2.0, s jedným z dvoch prihlásení a nikdy s oboma: BITBUCKET_ACCESS_TOKEN pre stroj (Bearer), alebo BITBUCKET_EMAIL a BITBUCKET_API_TOKEN pre človeka (Basic). App passwords sú odmietnuté — Atlassian ich 9. 6. 2026 ukončil. init zapíše ~/.mcptask_env.d/bitbucket_credentials s právami 0600 (kontrola práv sa na Windows preskakuje), nikdy neprepíše existujúcu hodnotu ničím a nikdy prihlasovací údaj nevypíše. Mimo GitHubu sa šablóna deklaruje ako pr_template: path:.

account_tree

GitLab

Riadi ho CLI glab, ktoré si drží vlastné prihlásenie — glab auth login, a runner si žiadny GitLab credential neukladá. Funguje gitlab.com aj self-managed inštancie: self-managed projekt deklaruje git_host: gitlab (mcptask_runner init --git-host gitlab), pretože jeho origin URL nie je gitlab.com, a runner od vás URL inštancie nikdy nepýta — glab už vie, kam je prihlásený. To, čo tam pr create otvorí, je merge request.

fact_checkAuto-squash sa pred zlúčením spýta hosta

Zlúčenie nie je nádej, že CI bolo zelené. Runner si najprv prečíta checky hosta pre head commit: FAILED ukončí beh ako ci_failed a PR nechá otvorené, IN_PROGRESS skúsi desaťkrát po dvoch minútach a NONE — repozitár, ktorý u hosta žiadne checky nemá — spadne na lokálnu gate. GitLab hlási jeden stav pipeline na merge request, takže výpis checkov je tam jeden riadok, nie zoznam.

report_problemGitHub Enterprise nie je GitHub a je odmietnutý menom

Host sa rozpoznáva podľa presného hostname, takže inštanciu GitHub Enterprise runner odmietne so správou, ktorá to hovorí, namiesto toho, aby ju považoval za github.com. PR otvorené proti nesprávnemu API hosta je horšie než beh, ktorý odmietne začať.

info

Kde končí runner a začína mcptask.online

Tu ide o runner pracujúci s repozitárom na Bitbucket Cloude — nie o Bitbucket integráciu na úrovni mcptask.online. Párovanie commitov a pull requestov späť na pieces beží na webhookoch a tie zostávajú GitHub a GitLab.

loopSlučka + cieľ

Slučka berie úlohy, cieľ ich dokončuje

mcptask_runner spája pracovnú slučku (berie úlohu za úlohou z fronty) s cieľom (dokončí každú úlohu až do zeleného PR, nielen k „nejakým úpravám"). Zvoľte režim podľa toho, ako dlho má bežať:

Tvar slučkyRežimAuto-squash vs manuálPovinný prepínač
play_circleSpustí jedného vykonávateľa a skončíoncemanuál
once_drymanuál
once_auto_squashauto-squash
reviewmanuál
repeatIteruje, kým nenastane stop-statustodaymanuál
today_auto_squashauto-squash
queue_manual
aliasy: queue
manuál
queue_auto_squashauto-squash
workflowmanuál
reviewsmanuál
account_treePrejde podúlohy storystory_manual
aliasy: story
manuál--story-id
story_auto_squashauto-squash--story-id
task_manual
aliasy: task
manuál--task-id
task_auto_squashauto-squash--task-id
todayRobí to celý deň, každý deňdailymanuál

infoNiektoré režimy sa správajú inak, než napovedá tvar, v ktorom sú zaradené

  • boltonce_dry je jediný režim, ktorý úplne preskočí triage — len ukáže ďalšiu úlohu a skončí.
  • layersworkflow má dve fázy: najprv revízie (PR blokuje človeka), potom dnešné úlohy.
  • scheduledaily sa nikdy sám nevráti — slučku ukončí len pád, signál alebo nepodarené odovzdanie. Cestou do nočnej pauzy sa navyše môže odovzdať novšej binárke, ktorú už má na disku (pozri samoaktualizácia nižšie); slučka, ktorá sa zajtra zobudí, je stále tá istá slučka, len beží na novšom kóde.
  • all_inclusivequeue_manual a queue_auto_squash nemajú časovú bránu; bežia, kým prichádzajú úlohy.
buildKľúčové vlastnosti

Čo robí autonómiu skutočne autonómiou

Nižšie je technický detail za tvrdením, že runner je „viac než spúšťač". Každá vlastnosť existuje preto, že by sa bez nej reálny beh rozsypal.

bug_report

Keď narazí na cudzí bug, založí naň úlohu a pozastaví sa

Ak runner behom práce narazí na URGENTNÝ bug, ktorý nesúvisí s aktuálnou úlohou, commitne a pushne rozrobenú prácu na feature vetvu, prepne na main (čistý strom), založí novú urgentnú bug úlohu a vráti jej id a názov. Runner si bug pripne do súboru tmp/mcptask_runner/urgent_pin.txt v adresári projektu (pin prežije pád a nemôže kolidovať medzi projektmi), takže aj po reštarte ide najprv opraviť bug a až potom sa vracia k pôvodnej úlohe. Chaos z „narazil som na niečo cudzie" sa zmení na sledovateľnú, vlastnenú úlohu.

restore

Zotavenie po zaplnení kontextu alebo prerušení

Keď beh skončí kvôli preplneniu kontextu, kvóte alebo zásahu urgent bugu, úloha zostane in_progress a nedokončená práca zostáva na feature vetve. Ďalší beh ju naviaže: prečíta git log + stav vetvy, fetchne a zlúči origin/main, preskočí hotové kroky a povýši model na najsilnejšiu nakonfigurovanú úroveň, aby úlohu dokončil silnejší model. Dlhá úloha prežije naprieč behmi. Ako sa overflow deteguje a aký tlak na kontext runner meria, popisuje sekcia o overflow.

visibility

Watchdog a detekcia zaseknutia

Watchdog na nečinnosť killne beh po 20 minútach bez postupu, soft-warn na zamrznutý proces po 3 minútach a má nástrojovo špecifický strop na zaseknuté príkazy; absolútny backstop ticha je 50 minút, s 45-minútovým tool-floor, ktorý sa adaptívne zvyšuje podľa zaznamenaných dĺžok až po 90-minútový strop. Detektor zaseknutia číta stream CLI — dekódovaný podľa harnessu, takže rovnaký detektor funguje na Claude Code, Codex CLI aj OpenCode — riadok po riadku a spozná „točenie sa dokola" — opakované chyby Edit, opakované chyby Bash alebo rovnaký podpis nástroja opakovane naprieč slučkami; dlhé pomocné príkazy ako CI wait a test wait sú explicitne vyňaté. Pri zaseknutí proces zabije; úloha zostane in_progress a nabudúce sa resumuje na najsilnejšej úrovni. Brány denného rozpočtu nájdete v sekcii o kvóte a log behu v sekcii o observability.

psychology

Triage a voľba modelu (tri role)

Pred prácou prebehne Triage: posúdi zložitosť úlohy a odporučí rolu modelu. Tri role: najsilnejšia úroveň (ťažké kódovanie), stredná úroveň (triage, review) a najrýchlejšia úroveň (len čítanie). Runner sa dodáva s predvoleným nastavením na Anthropic hostiteľovi — CLI generické aliasy prekladá za behu, takže konkrétne ID modelov môžu byť vymenené bez prepisovania retry reťazcov. Codex CLI a OpenCode mapujú rovnaké tri role na svoje vlastné ID — gpt-6-astra / gpt-5.6-terra / gpt-5.6-luna, respektíve provider/model — takže triage sa s voľbou CLI nemení.

verified

Kvalita: testy, CI, auto-merge

Plný workflow beží end-to-end: vetva → kód → unit testy → screenshoty → system testy → push → `mcptask_runner pr create` → lokálne CI → `mcptask_runner pr merge`. Úloha nie je hotová, kým neprejde CI, a zlúčenie sa najprv spýta na checky hosta. V režimoch auto-squash runner po zelenom CI PR sám squash-merge; v manuálnych režimoch zostane PR otvorené na �udskú revíziu. Runner vie aj spracovať review feedback na existujúcom PR. Úplnú tabuľku režimov nájdete v sekcii loop a goal.

monetization_onKvótové brány

Jedno číslo, tri miesta, kde sa overuje

Runner nikdy neverí vlastnému odhadu. Každé rozhodnutie o kvóte číta živé číslo z mcptask.online cez REST a vynucuje ho pred, medzi a počas úloh.

sourceOdkiaľ sa číslo berie

Denný rozpočet sa načítava živo z mcptask.online cez REST (GET /api/{account}/users/current/time_status). Runner nikdy neodhaduje rozpočet cez agenta a nikdy nečíta cache — účet je jediný zdroj pravdy.

gpp_goodTri brány, v tomto poradí

KedyČo sa kontroluje
PRED BEHOM (po triazi)Znovu sa opýta živého REST endpointu po triagi. Triage sama trvá minúty; čerstvý dotaz zachytí čokoľvek, čo používateľ minul, zatiaľ čo runner úlohu triedil.
MEDZI ÚLOHAMI (decider)Zastaví slučku pri akomkoľvek zlyhaní úlohy, mid-task kvóta-kille alebo vyčerpanom dennom rozpočte. Žiadny tretí pokus o rovnaký deň.
POČAS ÚLOHY (každých 360 s)Pýta sa každý DefaultQuotaPollInterval. Pri prekročení zabije child a ukončí slučku s quota_exceeded_mid_task — bez retry. Kill streak (DefaultQuotaFailureKillStreak = 3) absorbuje asi 18-minútový REST výpadok, kým to runner vzdá.

tuneZámerný fail-closed / fail-open strih

Dve otázky sa neodpovedajú rovnako schválne. „Bola kvóta prekročená?" zlyháva ako CLOSED; „Môžem dnes pracovať?" zlyháva ako OPEN. Jedna chyba zablokuje beh; druhá nechá beh začať.

blockFail closed

Keď sa pýtame „už sme dnes minuli rozpočet?" a REST nevie odpovedať, odpoveď je NIE. Lepšie je preskočiť úlohu, než prečerpať.

check_circleFail open

Keď sa pýtame „zostáva mi dnes rozpočet?" a REST nevie odpovedať, odpoveď je ÁNO. Lepšie je spustiť beh, než premárniť pracovný deň kvôli prechodnému výpadku.

reportVýpadok vs vyčerpaný rozpočet

REST výpadok, ktorý zabil zdravú prácu, je iný bug než vyčerpaný denný rozpočet. Runner ich zámerne rozlišuje (ErrQuotaPollOutage) — jedno nie je nikoho vina, druhé je 20-minútový incident hodný založenia ticketu.

ScenárČo runner urobí
Denný rozpočet vyčerpanýDecider medzi úlohami zastaví slučku. Žiadny bug.
Výpadok REST (pod kill streak)Retry na ďalšom intervale. Slučka pokračuje.
Výpadok REST (nad kill streak, ~18 min)Ukončí slučku fail-closed so statusom error a vlastnou termináciou quota_poll_outage — nie s quota_exceeded_mid_task. Tá terminácia nie je na zozname mäkkých ukončení, takže bug úloha sa založí vždy, aby sa ten dvadsaťminútový incident sledoval.

--ignore-quota preskočí všetky tri brány. Runner sa nikdy nepýta REST a nikdy neodmietne úlohu; operátor preberá zodpovednosť za spend.

memoryPretečenie kontextu

Čo prežije, keď sa kontext pretečie

SESSION sa nedá obnoviť. PRÁCA áno — pretože práca je vetva a commity na disku. Dva nezávislé mechanizmy nesú zvyšok vpred a tretí verdikt hovorí harnessu, aby prestal zakladať šum.

check_circle

Prežije

Čo runner odovzdá ďalšiemu pokusu

  • account_tree

    Git vetva a jej commity

    Samotná práca je vetva s commitmi na disku. Aj keď sa stratí každý bajt kontextu session, diff je stále reviewovateľný, PR stále otvárateľné a zmeny stále obnoviteľné.

  • history

    Posledné 3 akcie (restart vnútri procesu)

    Keď je rozpočet čerstvý a proces sa reštartuje na mieste, preamble reštartu nesie posledné tri akcie (RecentActionsCap = 3) a namerané závery o cene kontextu, takže nový pokus pokračuje s hybnosťou, nie naslepo.

  • rule

    Rulebook ContextBudget

    Každý reštart zdedí zdieľané pravidlá handoff.ContextBudget() — čo sa počíta do limitu, čo nie, a ako runner rozhodne, že je ďalší pokus bezpečné spustiť.

block

Stratené

Čo žiadny mechanizmus nezachráni

  • chat_bubble_outline

    Celý kontext konverzácie

    --continue by znovu načítal rovnaký prerastený kontext, takže SESSION je neobnoviteľná. V preamble reštartu idú len posledné tri akcie; všetko predtým je preč.

layersDva nezávislé mechanizmy

MechanizmusRozsahČo sa nesie ďalej
In-process fresh restartVnútri toho istého runner procesu (retry.go, handleContextOverflow)Rozpočet = 1 reštart na proces (maxOverflowRestarts = 1, zámerne — preskúmané v tasku #11474, ponechané na 1 v commite f6bce1e). Nový pokus číta posledné 3 akcie, cenové nálezy a rulebook rozpočtu.
Cross-process TaskHandoffinternal/handoff/ — jedna poznámka na úlohu (engine.go, recordTaskHandoff)Zapíše log/handoffs/task_<id>.json na OBOCH vetvách — reštart aj terminálna (terminálna koniec tohto procesu, nie úlohy). Ďalší NOVÝ proces ju číta ako preamble promptu pre prvý pokus — nikdy na --continue retry. overflow_count sa akumuluje NAPRIEČ runner procesmi. Poznámky sa vyradia, hneď ako beh skončí inak, a prerezávajú sa po 30 dňoch.

gavelTretí verdikt: overflow_pr_open

Keď je rozpočet reštartu vyčerpaný A existuje otvorené PR k úlohe, status je overflow_pr_open, NIE error. PR je deliverable; otvorené PR so zelenými checkmi znamená, že práca prešla. Zakladať tu error stojí celý denný loop na úlohe, ktorá je už hotová (úloha #11466 stratila 79a6f6aa + PR #1659 + zvyšok dňa presne nad týmto nesprávnym zaradením, ktoré jej navyše automaticky založilo bug #11467, aký si nezaslúžila).

overflow_pr_open (nie error)error (čo to bývalo)
rozpočet reštartu vyčerpaný + PR otvorené → overflow_pr_openrozpočet reštartu vyčerpaný + bez PR → error
memoryPre vývojárov

Prečo to nie je kúzlo

Štyri concerns bežia súčasne: child vo vlastnej process group, čítačka streamu, watchdog a event stream. Stavový automat pod nimi má desať pomenovaných stavov a explicitný allow-list - zamietnutý prechod je varovanie, nikdy dôvod na zastavenie.

lan

Child vo vlastnej process group

Runner spúšťa coding CLI v novej process group (syscall.SysProcAttr{Setpgid: true}, internal/executor/process_unix.go, configureProcessGroup), takže SIGTERM a SIGKILL z runnera zasiahnu celý strom a nikdy neprebublajú k rodičovi. Čitateľské joiny sú obmedzené na 30 s (engine.go, stderrJoinTimeout + defaultStdoutJoinTimeout), aby zaseknutý child nemohol zablokovať shutdown.

stream

Čítačka streamu

Číta výstup CLI (stream-json) riadok po riadku, ako vzniká, v tom dialekte, ktorý deklaruje profil harnessu. Parsuje eventy, hľadá TASKRUNNER_RESULT completion contract a kŕmi StallDetector. Nečaká na koniec procesu — reaguje priebežne na každý riadok, ktorý pristane.

timer

Watchdog

Nezávislé strážiace vlákno s 30-sekundovým heartbeatom. Kill po 20 minútach nečinnosti, soft-warn na frozen po 3 minútach, strohy zaseknutých nástrojov (quick / long), absolútny backstop a live REST quota poll každých 6 minút. Jediný externý dozorca nad child procesom.

wifi

Event stream

Perzistentný WebSocket na mcptask.online cez ActionCable (RunnerSessionChannel). Snapshoty throttlované na ~0,5 s; zmena stavu FSM pretlačí okamžite. Pri výpadku asynchrónny reconnect s throttlom 30 s a grace okno 0,5 s na finálnom „closed" snímku, aby živá karta nezamrzla na starom stave. Premenná MCPTASK_RUNNER_DISABLE nie je len vypínač streamu — je to globálny kill switch celej prevádzky na mcptask.online: stream, polly kvót aj hlásenia chýb (internal/mcptask/endpoint.go, DisableEnv).

hubStavový automat pod tým

schema verzia 3

Desať pomenovaných stavov. Každý prechod je na allow-liste; čokoľvek iné sa zapíše ako warning a práca beží ďalej. Frozen, pending, stalled a closed sú vždy povolené ciele prechodu z ľubovoľného stavu; vynucuje ich watchdog (frozen, pending), detektor zaseknutia (stalled) a uzavretie session v slučke (closed).

Stavy

startingtriageprocessingwaitingfinishedstalledfrozenpendingerrorclosed

Allow-list (ukážka)

Pár prechodov, ktoré slučka používa každú minútu — a vynútené prechody, ktoré odpaľujú watchdogy samé od seba.

zdokýmpoznámka
startingtriageslučkaPo spawne, než sa vyberie prvý úloha
triageprocessingslučkaÚloha zvolená, kontext odovzdaný CLI
processingwaitingslučkaBackoff medzi pokusmi o tú istú úlohu
processingstalleddetektor zaseknutiaOpakované chyby nástroja Edit, opakované rovnaké chyby Bashu alebo ten istý podpis nástroja v kĺzavom okne
ľubovoľnýfrozenwatchdogNečinnosť cez FROZEN_WARN_THRESHOLD, žiadne aktívne nástroje
ľubovoľnýpendingwatchdogJeden nástroj cez svoj warn strop
ľubovoľnýclosedslučkaend_session — finálny snímok
visibilityPozorovateľnosť

Čo je viditeľné počas behu

Tri nezávislé plochy — run log na disku, prevádzkový log procesu a živá karta cez ActionCable — plus explicitné opt-out premenné. Sú best-effort zo svojej podstaty: samotné pozorovanie — snapshoty a logy — beh nikdy nepreruší.

data_object

Run log — jeden JSON súbor na spustenie child procesu

Najužitočnejšia plocha, keď je otázka „prečo runner visí už deväťdesiat minút". Súbor sa otvorí IHNED pri spawne, takže aj okamžitý pád zanechá niečo čitateľné.

folderKde
log/runs/run_*.json (jeden súbor na spustenie child procesu)
  • lock_open

    Otvorený

    Pri spawne — skôr, než sa prečíta prvý riadok stream-json

  • favorite

    Heartbeat

    Obnovuje stream_events, inactive_s a stream_quiet_s každý tick, takže zaseknutý beh zanechá svoj in-flight stav na disku

  • task_alt

    Finalizácia

    Orazítkuje, prečo pokus skončil

Zmení „prečo runner visí už 90 minút" z grepu nad 268 000 riadkami stream logu na prečítanie jedného súboru.

description

Prevádzkový log procesu — širší než run log

Nie je to ľudsky formátovaná kópia JSON run logu. Je to chronologický textový log celého procesu: každý podsystém doň zapisuje svoje volania Debug/Info/Warn/Error, takže obsahuje aj to, čo sa v žiadnom run logu neobjaví — a naopak nenesie polia run logu ako session_id či stream_events.

folderKde
log/mcptask_runner_YYYYMMDD_HHMMSS.log
short_textTvar riadku
[timestamp] SEVERITY - message (internal/observe/logger.go)
wifi

Živá karta — jeden ActionCable WebSocket

Jeden perzistentný WebSocket nesie celé snapshoty, nikdy jednotlivé udalosti. Stratený frame stojí čerstvosť, nie správnosť, a reconnect nepotrebuje replay.

KanálPayloadThrottleTimeouty
RunnerSessionChannel (internal/eventstream/eventstream.go, channelIdentifier)Iba celé snapshoty — žiadny replay udalostí500 ms snapshot, 30 s reconnect throttle, 500 ms final-frame grace10 s subscribe + dial

Ukončená karta: Zostane 60 s po konci loopu (snapshotCloseTTL)

Bez tokenu: Runner spustený bez tokenu to povie raz, nahlas, pri štarte — nikdy ticho neprepustí prvú udalosť

shield

Hranica — a opt-outy

Každá z týchto plôch je best-effort zo svojej podstaty. Odchádzajúce pozorovanie beh nikdy nepreruší; nil *Log je fungujúci no-op. Dve premenné prostredia úložiská čisto vypnú.

Run logTask handoff
MCPTASK_RUN_LOG=0 — Vypne JSON run logMCPTASK_TASK_HANDOFF=0 — Vypne cross-process poznámku task-handoff

Jediná výnimka — preradenie: Kanál RunnerSessionChannel je obojsmerný: popri odchádzajúcich snapshotoch prijíma aj riadiace udalosti piece_assigned a set_aside_cleared (internal/eventstream/eventstream.go). Preradenie úlohy je cez abandonReassigned (internal/runner/loop.go) zapojené do AbandonReassigned v engine — zabije bežiaceho potomka a jeho smrť preklasifikuje na preradenie. Je to jediná, zámerná riadiaca rola tohto kanála.

Čo to NEZNAMENÁ: Žiadna z pozorovacích plôch — run log, prevádzkový log, odchádzajúce snapshoty — nemôže beh zastaviť, reštartovať ani klasifikovať. Vlastnosť best-effort je presná hranica no-fallbacks premisy projektu: jediné miesto, kde sa degraduje, a hovorí to nahlas.

Flotila runnerov: Všetky inštancie runnera v účte sú navyše na stránke Flotila runnerov (používateľské menu): jeden riadok na stroj a projekt s CLI, modelom, stavom, poslednou nahlásenou úlohou, dnešnými hodinami oproti dennému limitu a verziou runnera, živo aktualizované. Manažéri účtu a vlastníci firmy vidia všetky runnery, členovia projektu runnery svojich projektov.

bug_reportHlásenie bugov

Keď nastane tvrdý pád, bug piece sa založí sám

Žiadny manuálny príkaz spúšťať nemusíte. Keď nastane tvrdý pád, runner zaň automaticky založí bug piece. Skutočný pád sa stane úlohou, ktorú niekto môže zdvihnúť — nie tichou medzerou, ktorú nikto nehľadá.

rule

Kedy sa bug piece založí

Za tvrdý pád sa počíta len status error, status crash alebo status anomaly. To sú tri hodnoty v hardStatuses (internal/bugreport/runner_error.go). Každý iný výsledok — success, stalled_for_genius, urgent_bug_pending alebo graceful quota bail — znamená, že runner pracuje ako má, a nezakladá nič.

check_circle

Založí sa

status error, status crash, status anomaly

Čo je anomaly

vlastná poistka runneru, ktorá v behu neplatila, a beh napriek tomu pokračoval — nič nespadlo, denná práca šla ďalej a zvonku nie je čo vidieť. Error sa ohlási tým, že ukončí beh, a crash tým, že zabije proces; anomaly sa neohlási nikomu, a práve preto dostane piece.

horizontal_rule

NEzakladá sa

success, stalled_for_genius, urgent_bug_pending, graceful quota bail — to sú verdikty „pracuje ako má"

priority_high

Mäkká výnimka

quota kill v strede úlohy, vyčerpané rate-limit okno aj odobratie piece počas behu prichádzajú so statusom error a nezakladajú sa (softTerminations = {"quota", "rate_limited", "reassigned"}, internal/bugreport/runner_error.go)

attach_file

Čo bug piece nesie so sebou

K založenému piece sa priložia tri artefakty (internal/bugreport/runner_error.go, attachArtifacts), aby ten, kto ho zdvihne, mohol čítať pád bez nového spustenia.

description

Run log zlyhaného pokusu

JSON, s ktorým on-disk run log skončil

terminal

Chvost stream logu

najnovší stream log, orezaný na 512 KB (internal/bugreport/runner_error.go, streamTailBytes)

visibility_off

Redigované configy

.mcp.json, .claude/settings.json, .claude/settings.local.json — tokeny vystrihnuté (mcptask/piece.go, ConfigFiles + Redact)

fingerprint

Jedna udalosť je jeden piece

Identické pády sa ofingerprintujú, throttleujú a nahlásia len raz. Bez toho by tesná slučka založila ten istý bug 200× skôr, než si toho niekto všimne.

FingerprintNormalizáciaThrottle oknoStamp sa nárokuje pred založením
sha256 nad termination + normalizovaná správa + task id + projekt, orezaný na 16 hex znakov (internal/bugreport/runner_error.go, fingerprint)odstraňuje cesty, hex stringy a desatinné čísla — čo vyzerá ako rovnaký pád s iným timestampom, počíta sa ako rovnaký pádšesť hodín (internal/bugreport/runner_error.go, throttleWindow + claim) — druhý rovnaký fingerprint v okne sa zahodífingerprint stamp sa nárokuje PRED založením piece a UVOĽNÍ sa, ak sa piece nikdy nezaloží (commit 3ae0d6e). Pád, ktorý najpravdepodobnejšie rozbije CreatePiece, je práve ten, ktorý by retry inak ticho potlačil
warning

Panicy — re-raised, so stack trace

Panic je tvrdý pád so stopou pre forenznú analýzu. Piece dostane trace; loop si panic ponechá (loop.go, reportPanic, commit 1681e79). Inak by panic recovery trace zožrala a ten, kto piece zdvihne, by o ňu prišiel.

shield

Fail-safe všade

Každá reportovacia cesta prehĺta vlastné chyby, vrátane vlastného panicu (internal/bugreport/runner_error.go, MaybeReport defer/recover). Chyba reportéra nikdy nesmie ukončiť run. Celá premisa stojí na tom, že najhorší reportér je ten, ktorý stojí najmenej — prehltnutý riadok v logu, nie zmeškaný pád.

visibility_off

Slepé miesto, otvorene povedané

Reportér sa autentizuje rovnakým tokenom ako všetko ostatné, takže NEMÔŽE založiť bug, ktorý hovorí, že token chýba. Chýbajúci alebo nenastavený token reportéra ticho preskočí — OutcomeSkippedDisabled nezapíše žiadny chybový riadok, takže to nesie len vlastný exit code a log runnera. Token, ktorý server odmietne, je naopak hlasitá cesta: OutcomeRefused zaloguje chybu, ktorá token pomenuje (internal/bugreport/runner_error.go). Alternatívou bolo medzeru skryť; voľba tu je ju pomenovať.

swap_horizPre vývojárov

Model-agnostický cez konfiguráciu

Tri úrovne si namapujete na ľubovoľného poskytovateľa aj na ľubovoľné z troch coding CLI. Runner nasmerujete na akýkoľvek endpoint kompatibilný s Anthropic API — doloženým príkladom je lokálna Ollama — zmenou launchera a modelovej sekcie.

Sekcia models: je voliteľná. Bez nej každý harness používa svoje vlastné všeobecné aliasy, ktoré si dané CLI preloží za behu: opus / sonnet / haiku na Claude Code, gpt-6-astra / gpt-5.6-terra / gpt-5.6-luna na Codex CLI a ID v tvare provider/model na OpenCode. Pripnite konkrétne ID len keď chcete deterministické retry, alebo keď prevádzkujete runner cez ne-Anthropic backend — a akonáhle to urobíte, JE TO VŠETKO ALEBO NIČ: všetky tri úrovne genius / smart / primitive musia byť nastavené, inak forkovaní subagenti spadnú s chybou "model may not exist".

terminalPredvolené nastavenie podľa harnessu
# models: je voliteľná. Bez nej každý harness použije všeobecné aliasy,
# ktoré si jeho vlastné CLI preloží za behu.

# Claude Code
models:
  genius:    opus
  smart:     sonnet
  primitive: haiku

# Codex CLI
models:
  genius:    gpt-6-astra
  smart:     gpt-5.6-terra
  primitive: gpt-5.6-luna

# OpenCode — každé ID je provider/model
models:
  genius:    /
  smart:     /
  primitive: /
terminalPríklad: ne-Anthropic backend
models:
  genius:    minimax-m3:cloud
  smart:     kimi-k2.7-code:cloud
  primitive: deepseek-v4-flash:cloud

launcher:
  # Lokálna ollama
  command: [env, "ANTHROPIC_BASE_URL=http://localhost:11434", "ANTHROPIC_AUTH_TOKEN=ollama", "claude"]

ID nižšie sú jeden príklad, nie odporúčanie — starnú najrýchlejšie zo všetkého na tejto stránke. Dôležitý je tvar.

flagy launcher.command (launcher.go, Flag* constants): null flag sa z argv VYNECHÁ, value flag bez tokenu sa odovzdá POZIČNE.

auto_fix_highLoader nikdy nezlyhá

Chýbajúci, prázdny alebo poškodený config/mcptask_runner.yml sa berie ako "žiadna konfigurácia" (config.go, LoadFile) a použijú sa vstavané defaulty. Neexistuje exit kód "súbor nenájdený" — runner nabehne v oboch prípadoch.

check_circleŽiadny pin

Žiadny dodávaný skill nedeklaruje `model:` — ForkModelEnv preto dosiahne na každý forkovaný subagent, vrátane bežiacich na ne-Anthropic launcheri.

info

Konfigurácia žije v config/mcptask_runner.yml, resolved relatívne k pracovnému adresáru launchera (config.go, FileName; README.md) — rovnaký súbor, aký číta Ruby gem, s rovnakou sémantikou. Môžete tam nastaviť aj ďalšie voľby, napríklad cieľový Epic pre automaticky nájdené bugy alebo stratégiu čakania medzi behmi.

GEM — presná cesta k súboru, presná sémantika

system_update_altSamoaktualizácia

update --self a zámerne chýbajúca automatika

Runner je statický binárny súbor inštalovaný stiahnutím, nie gem, ktorý sa posunie pri každom bundle. Binárkou hýbu dva príkazy: update --self stiahne novší release a vymení ho, update --check oznámi, či nejaký existuje, a nič viac neurobí. Tretie rozhodnutie — či sa runner vôbec smie presunúť sám pred naplánovaným behom — je to, ktoré zámerne neautomatizujeme.

swap_horiz

Ako update --self vymení binárku

Nová binárka pristane v rovnakom adresári ako tá existujúca a tanec premenovania ju posunie na miesto (selfupdate.go). Tento postup je dôležitejší, než vyzerá: premenovanie je atomické len v rámci JEDNÉHO súborového systému a /tmp ním zvyčajne nie je, takže sa nový súbor pripraví vedľa, neprepíše sa z iného miesta. Zlyhalo alebo nesedí kontrolný súčet, k výmene vôbec nedôjde — binárka na disku zostane nedotknutá a príkaz skončí nenulovo.

file_download

1. Stiahnutie z verejného mirroru vydaní

binárka pre dané GOOS/GOARCH sa stiahne z jchsoft/mcptask-releases (selfupdate.go, DefaultRepo). Zdrojový repozitár je súkromný, takže verejný mirror je jediné miesto, odkiaľ môže stiahnutie prísť bez tokenu

verified

2. Overenie proti checksums.txt vydania

sha256 assetu sa porovná s hodnotou, ktorú zverejnilo vydanie (selfupdate.go, verify). Nezhoda zruší beh skôr, než sa do inštalačného adresára vôbec niečo zapíše

file_copy

3. Pripraviť vedľa, bežiacu binárku premenovať nabok

nová binárka sa zapíše vedľa bežiacej, potom sa bežiaca premenuje na susedný názov. Tento krok je zároveň to, čo celé funguje na Windows — prepísanie súboru, ktorý je namapovaný na spúšťanie, na Windows zlyhá a premenovanie nabok to obchádza

published_with_changes

4. Pripravenú binárku atomicky premenovať na miesto

záverečné os.Rename na rovnakom súborovom systéme presunie pripravenú binárku do inštalačnej cesty. Atomické v rámci toho súborového systému. Príkaz skončí 0 až po výmene

visibility

update --check — len dotaz na tag, žiadne sťahovanie

update --check zistí tag najnovšieho vydania, porovná ho s bežiacou verziou, oznámi výsledok a skončí. Nesťahuje žiadny asset a neoveruje žiadny kontrolný súčet — ani jeden zo štyroch krokov vyššie sa nevykoná. Binárka na disku zostane nedotknutá. Je to správny príkaz, ak si chcete do nočného jobu pridať upozornenie bez inštalácie.

shield

Zámerne chýbajúca funkcia

Runner sa pred naplánovaným behom NEaktualizuje sám. Ak existuje novší release, vypíše jednoriadkový hint a nič iné neurobí, pretože jedno zlé vydanie nesmie o 08:05 zasiahnuť každý host bez obsluhy. Upgrade zostáva rozhodnutím operátora — toto uistenie stojí za to vysloviť nahlas každému, kto nechá binárku bežať bez dozoru.

notifications

Čo hint robí

selfupdate.Hint vypíše jeden riadok, keď existuje novší release (hint.go, hintTimeout + hintInterval). Limit 2 s, cache 24 h, ignoruje každú chybu — výpadok siete alebo rate-limit sa k behu nikdy nedostane

block

Ako hint vypnúť

nastavte MCPTASK_NO_UPDATE_CHECK=1 v prostredí hosta. To je to, čo chce host vo vzduchoprázdne alebo s meraným pripojením, a kontrola sa umlčí skôr, než sa vôbec číta cache

inventory_2

Jedna z dvoch ciest, ktoré re-exec povoľujú — bundle adoption

BUNDLE ADOPTION (commit 00ced53, task #11478): iba pri run, ak Gemfile.lock projektu sám menuje novšiu verziu wrapper-gemu, než je bežiaca binárka, run sa na tej binárke re-execne. NIC NESTAHUJE — operátor to rozhodol už tým, že merg-ol lockfile. Host o 08:05 číta lock, ktorý si stiahol z mainu, a beží na tom, čo lock hovorí.

repeat

MCPTASK_ADOPTED

nastavený v prostredí re-execovaného potomka, zastaví adoption, aby sa z neho stal exec loop (adopt.go, EnvMarker). Binárka, ktorá hlási staršiu verziu, než hovorí lock, by inak adoptovala, exec-la, zase seba zhodnotila ako zastaralú a zacyklila sa

push_pin

MCPTASK_NO_ADOPT

nastavte na 1 pre pripnutie nainštalovanej binárky bez ohľadu na to, čo nesú projekty. Host, ktorý chce jednu verziu runneru naprieč všetkými projektmi, to nastaví raz a má pokoj

bedtime

Druhá cesta — daily sa cestou na lôžko odovzdá sám sebe

Cestou do nočnej pauzy daily run skontroluje, či je binárka na disku stále tá, s ktorou vybehol. Ak nie, uvoľní instance lock a spustí execom nainštalovanú binárku — restartOnCurrentBinary (restart.go). Ani táto výmena NIC NESŤAHUJE — len preberá to, čo na disk už skôr dal update --self alebo operátor. Na poradí krokov záleží: denná práca je hotová, takže nebeží žiadny potomok a žiadny pracovný strom nie je rozpísaný, a proces, ktorý sa zajtra zobudí, je ten, čo dnes večer vybehol.

help_outline

Prečo to existuje

všetko, čo si všimne novú verziu, sa odohrá len raz, pri štarte. Daily proces sa spustí raz a nikdy neskončí, takže by host bez obsluhy inak držal binárku, s ktorou náhodou vybehol, nech prebehne akokoľvek veľa vydaní — presne ten host, na ktorý sa nikto nepozerá. Ukončiť namiesto toho daily sa zvažovalo a bolo zamietnuté (task #11728): runner, ktorý zmizne, je runner, ktorý chýbajúci alebo nenačítaný naplánovaný job už nikdy nevráti

lock_open

ErrLockLost — tretí koniec

restart.go deklaruje ErrLockLost — výmenu, ktorá sa vzdala instance locku a potom si ho nedokázala vziať späť. Tento koniec slučku SKUTOČNE ukončí, zámerne a nahlas — pokračovať bez locku by druhému naplánovanému štartu dovolilo pustiť druhý runner do rovnakého checkoutu

autorenewÚdržba

Aktualizácie skillov bez straty vašich úprav

Nainštalovaný projekt sa rozchádza s runnerom, ako runner priberá skilly. Jeden príkaz ho zosynchronizuje: mcptask_runner update. Porovná každý skill a helper proti inštalačnému manifestu, pri každom oznámi, čo s ním urobil, a odmietne prepísať čokoľvek, čo ste si upravili sami. Je to aj spôsob, ako nainštalovaný projekt prestane volať `gh`: pribalené skilly prešli na `mcptask_runner pr` a práve `update` túto migráciu donesie do projektu nainštalovaného predtým.

Príkaz

mcptask_runner update
fact_check

Päť výsledkov, jeden na súbor

Updater si drží obsahový hash každého súboru, ktorý nainštaloval. Každý skill a helper proti tomuto manifestu zaradí a výsledok vypíše — päť výsledkov, nie tiché prepísanie.

add_circle_outlineadded

Súbor na disku nie je. Updater ho zapíše. Takto pristávajú nové schopnosti runnera bez toho, aby ste si o ne museli povedať menom.

check_circle_outlineup-to-date

Súbor na disku má rovnaký hash ako záznam v manifeste. Nič sa nezapisuje. Host nainštalovaný cez gem sa tejto binárke javí ako aktuálny — overené priamo proti súboru, nie odvodené z inštalačného kanála.

syncupdated

Súbor zodpovedá staršiemu záznamu v manifeste, takže je to dodávaná verzia a vy ste sa jej nikdy nedotkli. Je bezpečné ho nahradiť — a nahradí sa.

blockconflict-skipped

Hash súboru nezodpovedá ani aktuálnej, ani žiadnej známej dodávanej verzii — upravili ste ho. Updater ho nechá presne tak, ako je, a povie to. Toto je predvolené správanie a práve preto je bezpečné príkaz spustiť na projekte, ktorý ste si prispôsobili.

restore_pageforce-updated

Ten istý konflikt, vyriešený opačne, pretože ste o to požiadali. Dosiahnuteľné len s --force alebo FORCE=1.

restore_page

Prepísanie konfliktu s cestou späť

mcptask_runner update --force

--force (alebo FORCE=1) lokálne upravené súbory namiesto preskočenia prepíše — a ku každému prepísanému nechá .bak. Vaše úpravy sa nemažú; odsunú sa nabok, kde si ich môžete porovnať.

shield

Čoho sa obyčajné update zámerne nedotkne

update siaha LEN na skilly a helpery. Všetko ostatné, čo inštalátor kedysi zapísal, zostáva presne tam, kde je. Táto zdržanlivosť je prednosť, nie opomenutie: zosynchronizovanie skillov nesmie potichu znova aktivovať plánovanú úlohu ani prepísať konfiguračný súbor, ktorý ste si ručne doladili.

schedule

Plánovaná úloha

LaunchAgent, používateľský systemd timer ani úloha v Task Scheduleri sa negenerujú znova a znova sa nezapínajú. Keď ju chcete naozaj vygenerovať znova, použite init --schedule.

data_object

.mcp.json

Vaša konfigurácia MCP klienta sa neotvára, neprepisuje ani nedegraduje. Transport aj názov tokenovej premennej, ktoré ste deklarovali, aktualizáciu prežijú nedotknuté.

tune

Konfiguračné sekcie

config/mcptask_runner.yml si ponechá hodnoty, ktoré ste nastavili — pracovné okno, príkaz launchera, hodinu konca pracovného dňa. update na ne nemá názor.

system_update_alt

Aktualizácia binárky je samostatné rozhodnutie

update zosynchronizuje projekt. Nehýbe binárkou, ktorá tú synchronizáciu vykonala. Robia to dva iné príkazy a ani jeden z nich sa nespustí sám: mcptask_runner update --self vymení novší release a mcptask_runner update --check len oznámi, či nejaký existuje, a nič nezmení.

person

Runner sa pred behom nikdy neaktualizuje sám

Na začiatku behu runner môže vypísať jeden riadok o tom, že existuje novší release. To je celá tá funkcia — strop 2 s, cache na 24 h, každá chyba ignorovaná a úplne sa umlčí cez MCPTASK_NO_UPDATE_CHECK=1. Rozhodnutie o povýšení zostáva na operátorovi, pretože runner, ktorý by sa pred plánovaným behom posunul sám, by bez opýtania menil to, čo tú prácu robí. To je podstatné, ak necháte binárku bežať bez dozoru.

verified

Chybné stiahnutie sa k výmene nikdy nedostane

update --self sťahuje z verejného mirroru jchsoft/mcptask-releases a overuje súbor proti checksums.txt daného release. Neúspešné alebo nesúhlasiace stiahnutie skončí skôr, než akýkoľvek zápis siahne do inštalačného adresára: binárka na disku zostáva nedotknutá a príkaz skončí nenulovým návratovým kódom.

Celá sekvencia výmeny — a prečo práve premenovávací tanec zaisťuje funkčnosť na Windows — patrí na stránku Runner.

system_update_altPrečítať mechaniku self-update
list_altCLI referencia

Päť verejných subcommandov, dva persistent flagy, tri exit kódy

Runner je jeden binárny súbor na cobra root: run, init, update, version, pr. Šiesty subcommand internal je skrytý pred --help, pretože ho volajú vygenerované launcher skripty, nie operátor: internal launcher-log-name je to, čím si windowsový launcher pomenuje vlastný log. Skrytý neznamená dočasný — launcher na ňom za behu stojí. Dva persistent flagy --verbose a --ignore-quota sa čítajú case-insensitive z príslušnej env premennej (verbose=true, ignore_quota=true). Flag-y jednotlivých subcommandov sú vypísané pri každom príkaze nižšie. Exit kód je 0 pri úspechu, 3 pre nenaimplementovaný mód, 1 pre čokoľvek iné a 128+N pri signáli. Trojka je navrhnutá poistka, nie koniec, na ktorý dnes dosiahnete: každý mód je naimplementovaný, takže ErrModeNotImplemented nikto nevráti.

terminalSubcommandy

run

Spustí work-loop mód. Mód je povinný; aliasy queue, story a task sa rozvíjajú na queue_manual, story_manual a task_manual.

init

Nainštaluje na tomto hoste. Zapíše skilly, helpery, oprávnenia, token, .mcp.json záznam, sekcie configu a scheduled job.

update

Obnoví bundled skilly a helpery. --self prehodí binárku na mieste; --check oznámi verziu bez inštalácie.

version

Vypíše banner (verzia a resolved konfigurácia) a skončí.

pr

Otvorí, vypíše, prečíta, zreviduje, zlúči alebo skontroluje pull request na GitHube, na Bitbucket Cloude alebo na GitLabe. Jeden JSON objekt na stdout za zavolanie.

tune

Persistent flagy

Tieto dva flagy žijú na root commande a platia pre každý subcommand. Každý má ekvivalent v env premennej, ktorá sa číta case-insensitive na doslova reťazec "true".

flag--verbose

verbose=true

Vypíše každý stream riadok namiesto filtrovaného pohľadu.

flag--ignore-quota

ignore_quota=true

Preskočí všetky kontroly kvóty.

play_circle

run — spustí work-loop mód

Vyberie mód a spustí ho. Mód je povinný; aliasy queue, story a task sa rozvíjajú na queue_manual, story_manual a task_manual. --story-id vyžadujú story_manual a story_auto_squash; --task-id vyžadujú task_manual a task_auto_squash. Po štarte runner vypíše banner s verziou, zdrojom modelov, zdrojom launcheru, cieľom bug reportov, stratégiou čakania, pracovným oknom a dnešným skip listom, za ním súhrn rozpustenej konfigurácie, potom kontrolu bundle adoption, update hint, token preflight, single-instance lock a signal handler — v tomto poradí — a až potom spustí samotnú slučku.

input--story-id N

-

Vyžadujú story_manual a story_auto_squash; bez čísla je odmietnutý.

input--task-id N

-

Vyžadujú task_manual a task_auto_squash; bez čísla je odmietnutý.

download_for_offline

init — nainštaluje na tomto hoste

Zapíše bundled skilly — dvanásť pre Claude Code, deväť pre Codex CLI a OpenCode — deklaráciu testov v .claude/test-commands.json, ktorú bundled test skilly čítajú, deväť helper skriptov (deviaty, runner-log, je jediný, ktorý operátor píše sám v shelli), baseline oprávnenia, výmenu tokenu, mcptask-online záznam v .mcp.json, blok bug_destination v config/mcptask_runner.yml, defaulty waiting_strategy a scheduled job. --at a --until pinujú čas behu a end-of-workday hodinu; --schedule vygeneruje iba scheduled job. init sa interaktívne pýta na dve veci — do ktorého Epicu padajú automaticky nájdené chyby a aký mód scheduled job spúšťa — a --epic-id, --epic-name a --mode na ne odpovedia bez terminálu, pretože binárka, ktorú inštaluje provisioning skript, musí byť inštalovateľná aj bez neho. --cli pomenuje coding CLI, ktoré tento projekt riadi, a je povinné pri prvom init, bez akéhokoľvek defaultu; --git-host pripne hosta PR, keď to URL originu nedokáže povedať. --helper-bin-dir a --home-dir presmerujú to, čo init zapisuje, --force prepíše, čo už na hoste je. Scheduled job sa vygeneruje, ale nikdy neaktivuje — zapnutie jobu, ktorý každé ráno míňa kvótu, je rozhodnutie operátora.

input--cli NÁZOV

-

Ktoré coding CLI tento projekt riadi — claude, codex, alebo opencode. Povinné pri prvom init; žiadny default neexistuje a projekt, ktorý CLI nikdy nepomenoval, runner odmietne menom. Zapíše sa do config/mcptask_runner.yml ako harness:.

input--git-host HOST

-

github, bitbucket, alebo gitlab, zapísaný ako git_host:. Nepovinné — runner ho odvodí z git remote get-url origin; toto je pre aliasy, mirrory a self-managed inštancie GitLabu, ktorých origin URL nie je gitlab.com. Runner od vás URL GitLabu nikdy nepýta: inštanciu si drží glab, do ktorého ste prihlásení.

input--at HH:MM

MCPTASK_RUN_AT

Čas, kedy scheduled job beží. Default 08:00. Hodnota, ktorá nie je časom dňa, je odmietnutá, nikdy zaokrúhlená.

input--until HH:MM

MCPTASK_WORKDAY_UNTIL

End-of-workday hodina zapísaná do configu pod work_window.end_of_workday_hour. Nedefinované znamená žiadny koniec dňa. Neskôr editovateľné bez regenerácie schedule.

input--schedule

-

Vygeneruje znovu iba scheduled job — skilly, permissions, token a sekcie configu zostanú presne tak, ako sú.

input--mode MÓD

-

Mód work-loopu, ktorý scheduled job spúšťa, napr. today_auto_squash. Zadaný odpovie na otázku na mód, ktorú by sa init inak pýtal.

input--epic-id N

-

Epic na mcptask.online, do ktorého padajú automaticky nájdené chyby; 0 ich nechá v roote projektu. Zadaný odpovie na otázku na Epic.

input--epic-name NÁZOV

-

Zobrazovaný názov zapísaný vedľa --epic-id, aby config hovoril, ktorý Epic to číslo je.

input--helper-bin-dir CESTA

-

Kam sa inštalujú helper skripty pre CI a testy. Default ~/.claude/bin.

input--home-dir CESTA

-

Presmeruje adresár s tokenom, shellový rc súbor aj scheduled job. Default je vlastný home používateľa.

input--force

FORCE=1

Prepíše to, čo už na hoste je — skilly, sekcie configu aj scheduled job. Širšie než --force pri update, ktoré prepisuje len upravené skilly a necháva .bak.

system_update_alt

update — obnoví skilly a helpery

Holý update sa dotkne len bundled skillov (dvanásť pre Claude Code, deväť pre Codex CLI a OpenCode) a deviatich helper skriptov; zámerne nechá scheduled job, .mcp.json a sekcie configu na pokoji. --self stiahne najnovší release a prehodí binárku na mieste (rovnaký filesystem, rename dance); --check oznámi, či existuje novšia binárka, a nič nezmení. --force prepíše lokálne upravené skilly a nechá pri nich .bak. Bundle adoption je jedna z dvoch ciest, kedy sa run re-execne — iba pri run, a len keď Gemfile.lock projektu ukazuje na novší wrapper-gem než bežiaca binárka. Tou druhou je daily, ktoré sa cestou do nočnej pauzy odovzdá novšej binárke, ktorú už má na disku.

input--self

-

Stiahne najnovší release, overí proti checksums.txt a prehodí binárku na mieste. Neúspešný alebo nezhodujúci sa download sa nikdy nedostane k prehodeniu.

input--check

-

Zistí tag najnovšieho vydania, porovná verzie, oznámi výsledok a skončí. Žiadne sťahovanie, žiadne overenie kontrolného súčtu. Binárka na disku zostane nedotknutá.

input--force

FORCE=1

Prepíše lokálne upravené skilly a nechá pri nich .bak vedľa prepísaného súboru.

info

version — vypíše banner a resolved konfiguráciu

Vypíše banner (verzia + resolved modely + zdroj launcheru + bug destination + waiting strategy + pracovné okno + dnešný skip list) a za ním blok so zhrnutím výslednej konfigurácie — ten istý, ktorý vypíše init na konci inštalácie — a skončí. Verzia pochádza z ldflags pečiatky, fallback na verziu modulu a nakoniec 0.0.0-dev, keď bola binárka zostavená bez pečiatky.

merge_type

pr — otvorí, prečíta a zlúči pull request

Jediná vec, ktorá otvorí pull request. Šesť subcommandov — create, list, view, reviews, merge a checks — a každý vypíše na stdout jeden JSON objekt; chyby idú na stderr s nenulovým exit kódom, takže ich volajúci rozlíši bez čítania vety. merge má vo výchozom stave --squash --delete-branch. Host je GitHub, Bitbucket Cloud, alebo GitLab (gitlab.com aj self-managed, riadený cez CLI glab), odvodený z git remote get-url origin, ak git_host: nehovorí inak, a --git-host ho prepíše pre jedno zavolanie. Host sa rozpoznáva podľa presného hostname, takže GitHub Enterprise runner odmietne menom, nie že by ho ticho považoval za GitHub.

input--git-host HOST

-

Prepíše hosta PR pre toto zavolanie — github, bitbucket, alebo gitlab. Bez neho host pochádza z git_host:, alebo z URL originu.

input--task N

-

Len pri list: pull requesty otvorené pre jednu úlohu na mcptask.online.

input--branch NÁZOV

-

Len pri list: pull requesty, ktorých head je táto vetva.

input--open / --state STAV

-

Len pri list: obmedzí výber podľa stavu. --open je skratka pre otvorené.

numbers

Exit kódy

code0

Úspech — vrátane runu, ktorého úloha skončila s {"status":"error"}.

code1

Čokoľvek iné.

code3

Nenaimplementovaný mód (ErrModeNotImplemented) — navrhnutá poistka; každý mód je naimplementovaný, takže na ňu dnes nič nedosiahne.

code128+N

Zabitý signálom N.

verifiedDôkaz

Konformančné scenáre a CI matrix

Dôkaz za každým tvrdením o spoľahlivosti na tejto stránke. Obnova, watchdog, detekcia zaseknutia aj kvóta sú všade uvádzané bez jediného dôkazu; táto sekcia sú tie účtenky.

playlist_play

Štrnásť konformančných scenárov

Každý scenár je zaznamenaný rozhovor s claude CLI plus správanie, ktoré musí runner pri prehrávaní predviesť. Scenáre sú implementačne neutrálne: čisté YAML plus kontrakt v conformance/README.md, ani riadka Go alebo Ruby. Spúšťa sa cez `go run ./cmd/conformance {list,run --impl go}`.

Každý režim pádu, o ktorom runner tvrdí, že ho prežije, má vlastný zaznamenaný scenár v conformance/scenarios/. Obe implementácie spúšťajú rovnaké súbory; Ruby gem je vyslúžilá, zmrazená referenčná implementácia, proti ktorej sa dá suite porovnať, a bránou je zelená Go suite.

Scenáre 
01 — successšťastná cesta: čistý run skončí zeleným verdiktom, bez retry, a vetva pripravená na push
02 — missing_marker_retryrun log nikdy nezafixuje marker; runner retryuje, kým mu nedôjde budget, a potom skončí verdiktom namiesto zaseknutia
03 — context_overflow_fresh_restartpretečenie kontextu, keď engine ešte beží — prácu nesie ďalej in-process restart a run zostane nažive
04 — context_overflow_terminalpretečenie kontextu potom, čo engine skončil — carry-forward mechanizmus odovzdá súbor novému procesu a len tak sa run dostane von
05 — api_overload_529upstream vráti 529 — runner cúvne, run zostane na správnej úlohe a marker na prechodnom stave nepostúpi
06 — tool_not_enabled_fresh_restartnástroj, ktorý run potrebuje, chýba na prvom pokuse; `--continue` ho spustí ako fresh restart a run sa zotaví
07 — tool_not_enabled_terminalten istý nástroj chýba aj po fresh restarte — run skončí verdiktom, nie zaseknutím
08 — stall_edit_failuresengine edituje súbor, ktorý harness sleduje; edity sa rozchádzajú a watchdog to chytí skôr, než marker postúpi na základe lži
09 — inactivity_kill_then_recoverchild process prestane komunikovať — watchdog ho zabije, debug dump zostane na disku a ďalší pokus zdvihne tú istú úlohu
10 — recoverable_retries_exhaustedkaždý recoverable retry je vyčerpaný a run stále nie je hotový — to je verdikt, a verdikt je jediný bezpečný výsledok
11 — quota_mid_taskbudget sa vyčerpá uprostred editu — pristane soft kill, run uloží čistý stav a polnočný strop ďalšieho okna odštartuje čerstvý pokus
12 — stream_closedupstream zatvorí stream v polovici turnu — runner zatvorenie detekuje, run vyhodnotí ako neúplný a ďalší pokus odvodí stav z disku, nie z preč zmiznutého streamu
13 — hung_tool_killnástroj, ktorý engine zavolal, prestal odpovedať — watchdog zabije child signálom kill-on-hang a run zostane znovu-spuštiteľný
14 — triage_unverified_picknext-task picker vráti úlohu, ktorá nebola overená — runner ju odmietne naštartovať, nezaloží nič a počká na overeného kandidáta, namiesto aby slepo niečo vybral
science

Binárka nenesie žiadny vlastný test hook

Runner je nasmerovaný na mock CLI cez bežný override `launcher.command` (README.md) — rovnaká per-host konfigurácia, ktorú vývojár použije na riadenie skutočného CLI. Suity bežia vo všetkých troch dialektoch harnessu (Claude Code, Codex CLI, OpenCode) a konformančný projekt na Bitbucket Cloude a jeden na gitlab.com pokrývajú zvyšných dvoch hostov PR, takže zelený run nie je zelený run na jednom dialekte proti jednému hostovi. Technický čitateľ v tom spoznáva signál kvality — v binárke nie je žiadna test-only code path, o ktorú by sa konformančná suite opierala, takže zelený run tu je rovnaký kód, aký si používateľ nainštaluje.

grid_view

CI matrix

Každý commit prejde 3-OS x 2-Go-verzia matrixom (ubuntu / macos / windows x 1.25.x / stable), go vet, race-detector testami na Unixe + stable, bin/smoke na BUILT binárke, gofmt, golangci-lint, goreleaser config check plus šesť-cielový cross-compile a celú konformančnú suite (.github/workflows/ci.yml). Matrix existuje, pretože runner sa inštaluje na vývojárske stroje — každá desktopová platforma musí prejsť buildom aj testami.

fact_check

Úprimná polovica

Zelený LOKÁLNY run vypíše, čo NEPokryl — "Tento stroj len: <goos>/<goarch>" — pretože jeden OS, jedna architektúra a jedna verzia Go nie je to, čo beží v CI (bin/ci). Zelená lokálne je nutná, nie dostatočná. Porovnanie proti Ruby je referenčná kontrola, nie brána: keď vyslúžilý gem nie je checkoutnutý, preskočí sa, nevyfailuje — stroj, ktorý sa k referencii nedostane, by mal vedieť skontrolovať aspoň svoju vlastnú prácu.

visibility_off

Hranica, pomenovaná

Konformančný harness spúšťa jeden runner proces na scenár, takže nedokáže vyjadriť cross-process polovicu prežitia pretečenia; to pokrývajú testy, ktoré idú dva enginy za sebou a zdieľajú len súbor (README.md). Porovnanie proti Ruby sa preskočí, nevyfailuje, keď vyslúžilý gem nie je checkoutnutý, a merge tak či tak nedrží.

Technické FAQ

Krátke odpovede na otázky, ktoré táto stránka otvára, ale neodpovedá priamo v texte. Každá odpoveď odkazuje na vlastnícku sekciu a duplicitne ju neopakuje.

help_outline

Potrebuje runner Ruby, bundler alebo Gemfile?

Nie. Metadáta projektu číta z CLAUDE.md a konfiguráciu z config/mcptask_runner.yml — ani jeden z nich neprechádza cez Ruby. Viď sekcia 1. Žiadny prompt nemenuje ani príkaz konkrétneho frameworku: projekt, ktorý pred browser testami potrebuje build krok, si ho deklaruje vo vlastnom CLAUDE.md.

help_outline

Funguje na ne-Rails projekte?

Áno — ľubovoľný projekt pod gitom, na GitHube, na Bitbucket Cloude, alebo na GitLabe (gitlab.com aj self-managed), s jedným z troch podporovaných coding CLI na hoste a s CLAUDE.md, ktorá deklaruje account_code a project_relative_id. Žiadne predvolené CLI neexistuje: vyberá ho init --cli claude|codex|opencode, launcher.command prepisuje len argv a je krížovo kontrolovaný proti harness:. Viď sekcia 2.

help_outline

Môžu dva runnery zdieľať jeden checkout?

Nie. Druhý runner odmietne naštartovať; lock.go (AcquireInstanceLock) vynucuje jeden runner na checkout. Viď sekcia 1.

help_outline

Čo sa stane, keď denná kvóta dôjde uprostred úlohy?

Aktuálny pokus skončí ako soft termination (status error, nikdy sa nevygeneruje bug piece) a slučka počká na ďalšiu bránu. Viď sekcia 6.

help_outline

Čo po páde zostane a kto sa to dozvie?

Hard failure (status error, status crash alebo status anomaly — vlastná poistka runneru, ktorá v behu neplatila, a beh napriek tomu pokračoval) založí vlastný bug piece s pripojeným run logom, otlačkovaný a throttlovaný po dobu šiestich hodín. Reportér nemôže nahlásiť bug, ktorý hovorí, že chýba jeho vlastný token — ten sa prejaví exit kódom a logom. Viď sekcia 9 a 10.

help_outline

Aktualizuje sa sám bez dozoru?

Nie, zámerne. `update` sa v predvolenom stave dotýka len skills a helpers; `update --self` aktualizuje binárku v termináli používateľa, nie v background slučke. Viď sekcia 12.

help_outline

Na ktorých OS beží a čo nepokryje zelený lokálny test run?

macOS (launchd), Linux (systemd user timer) a Windows (Task Scheduler) majú každý vlastnú naplánovanú úlohu. Zelený lokálny test run pokryje unit a system testy na hosťovej verzii Go; nepokryje troj-OS × dvoch-Go verzií maticu ani štrnásť conformance scenárov, ktoré bránia release. Viď sekcia 14.

rocket_launch

Ráno zapnite stroj

mcptask_runner nenahrádza váš tím — násobí ho. Jeden statický binárny súbor, jeden inštalačný riadok, a váš backlog sa hýbe sám.

verified_user30 dní zadarmo. Bez kreditnej karty. Kedykoľvek zrušíte.