---
title: "Viikonlopun hackathon: Teerminal, kolme agenttia ja JEV"
slug: teerminal-jev-pienia-paatoksia-agenttien-valissa
summary: "Viikonlopun hackathonissa rakensin Teerminalia Codexin, Clauden ja agyn kanssa ja lisäsin mukaan JEV:n. Sillä on jo omat tehtävänsä: tekstin arviointi sekä työpyyntöjen ryhmittely, luokittelu ja riippuvuuksien tunnistus. Tässä olemme nyt."
tags: Teerminal, JEV, TypeSafe, Codex, Claude, Antigravity, hackathon
ai_model: GPT-6
published_at: 2026-09-20T21:39:34.219+00:00
canonical_url: https://jarkkolietolahti.com/articles/teerminal-jev-pienia-paatoksia-agenttien-valissa
markdown_url: https://cemecdwfdvdbvpvowuln.supabase.co/functions/v1/content-md?slug=teerminal-jev-pienia-paatoksia-agenttien-valissa
---

Tämän viikonlopun hackathon oli Teerminal & JEV. Rakensin Teerminalia Codexin, Clauden ja agyn kanssa ja lisäsin mukaan JEV:n. Viikonlopun jäljiltä sillä on jo omat käyttökohteensa: tekstin arviointi, työpyyntöjen ryhmittely ja luokittelu sekä tehtävien välisten riippuvuuksien tunnistaminen.

Teerminal on sovellus, jota rakennan omaa työskentelyäni varten. Projektit, hakemistot ja agenttien istunnot tarvitsevat tunnistettavat paikat. Keskusteluun pitää voida palata. Keskeneräinen ajatus pitää löytää vielä senkin jälkeen, kun muutamassa muussa välilehdessä on tapahtunut paljon.

Kun samassa ympäristössä työskentelee useita agentteja, vastaan tulee jatkuvasti pieniä tulkintakysymyksiä. Jatkoinko edellistä pyyntöä vai aloitinko uuden? Oliko viesti idea vai käsky toteuttaa? Odottaako jokin työ toisen tulosta? Onko agentti jumissa vai odottaako se minulta vastausta?

Näitä kysymyksiä varten JEV tuli mukaan. Viikonlopun aikana syntyi sekä käsin käytettävä arviointinäkymä että ensimmäinen kytkentä työn vastaanottoon.

Codex, Claude ja agy eli Antigravity toimivat Teerminalin kehitystyötä tekevinä agentteina. Voin pyytää niitä toteuttamaan ominaisuuden: agentti tutkii koodia, suunnittelee muutoksen, käyttää työkaluja ja tarkistaa tuloksia. JEV:lle annan tätä pienemmän tehtävän, kuten kysymyksen siitä, onko saamani viesti toteutuspyyntö vai idea.

TypeSafe kuvaa Jeviä ensimmäiseksi System One -mallikseen. Se ymmärtää luonnollista kieltä ja palauttaa tyypitettyjä vastauksia sekä todennäköisyyksiä. Malli on koulutettu rajattuihin arvioihin, joiden tuloksia ohjelma voi käyttää suoraan. Se ei kirjoita koodia tai vapaamuotoisia perusteluja arvioilleen. [TypeSafen kuvaus System One -malleista](https://docs.typesafe.ai/concepts/system-one).

Ero näkyy pienessä esimerkissä. ”Olisipa tässä haku” voi olla idea. ”Lisää tähän haku” on toteutuspyyntö. Molemmissa esiintyy sama sana, joten pelkkä hakusanan tunnistaminen ei ratkaise tarkoitusta. JEV:lle voi antaa viestin ja tarvittavan keskusteluyhteyden sekä kysyä, kuuluuko se luokkaan työ, idea, kysymys vai epäselvä.

Vastauksena tulee valinta ja vaihtoehtojen todennäköisyydet. Teerminalin koodi päättää niiden ja omien sääntöjensä perusteella, tallennetaanko idea, muodostetaanko tehtävä vai pyydetäänkö tarkennusta. JEV:n arvio ei itsessään käynnistä agenttia tai anna lupaa toimia.

Tavallinen generatiivinen kielimallikin pystyy luokittelemaan viestejä ja palauttamaan rakenteisia vastauksia. JEV:n erityisyys on sen keskittyminen juuri rajattuihin päätöksiin ja niiden epävarmuuteen. Sen ympärille rakennetaan ohjelmallinen työnkulku, jossa aineisto, kysymykset, vaihtoehdot ja tuloksen seuraukset määritellään erikseen.

Vastaustapoja on kolme. Choice valitsee annetuista vaihtoehdoista, esimerkiksi pyynnön luokan. Noul palauttaa todennäköisyyden sille, että jokin ehto pitää paikkansa, esimerkiksi että viesti pyytää käyttäjältä vastausta. Score arvioi sijoittumista ennalta kuvattujen tasojen välille, esimerkiksi kiireellisyyttä. Nämä ovat eri kysymyksiä, joten niitä kannattaa myös kysyä erikseen. [TypeSafen kysymystyypit](https://docs.typesafe.ai/primitives).

Minulle kiinnostavaa on se, että kielen tulkinnasta tulee ohjelman käsiteltävä arvo. Sen perusteella voi valita jatkohaaran tai jättää asian odottamaan tarkennusta. Todennäköisyys tekee epävarmuuden näkyväksi, mutta ei takaa yksittäisen tulkinnan oikeellisuutta. Siksi kysymyksiä ja jatkosääntöjä täytyy kokeilla omalla aineistolla.

Ensimmäinen konkreettinen käyttökohde on Teerminalin oma JEV-näkymä. Siihen voi kirjoittaa arvioitavan tekstin, kysymyksen ja tarvittavat vastausvaihtoehdot tai arviointitasot. Tuloksesta jää talteen alkuperäinen aineisto, kysymys ja vastaus. Näin samaan arvioon voi palata ja katsoa, mitä oikeastaan tuli kysyttyä.

Tämä on hyödyllinen työpöytä jo itsessään. Jos tulos tuntuu oudolta, voin tutkia, oliko kysymys epäselvä tai puuttuiko vaihtoehdoista juuri se, mitä tarkoitin. Näkymä lähettää arvioitavaksi siihen syötetyn aineiston; se ei automaattisesti lue kaikkia avoimia keskustelujani.

Toinen käyttökohde on Queue AI:n vastaanotto. Siihen tehtiin JEV-pohjainen käsittely aiemman agy-pohjaisen vastaanoton rinnalle ja uusien viestierien käsittelijäksi. Varsinaisen kehitystyön suorittajina säilyvät Codex, Claude ja agy. JEV ryhmittelee peräkkäisiä viestejä, tunnistaa muodostuneiden pyyntöjen tarkoitusta ja valitsee työn edellyttämiä aiempia tehtäviä.

Havainnollistava viestisarja voisi olla tällainen:

> Korjaa vasemman paneelin järjestys.
>
> Se ei saa vaihtua, kun valitsen projektin.
>
> Ja säilytä valinta, kun palaan takaisin.
>
> Voisiko tätä joskus käyttää myös puhelimella?

Kolme ensimmäistä viestiä täsmentävät samaa työtä. Neljäs avaa uuden ajatuksen. Tällainen ero on olennainen, jos keskustelusta muodostetaan suoritettavia tehtäviä. Puhelinta koskevasta pohdinnasta ei pitäisi vahingossa käynnistyä uuden sovelluksen toteutus.

Nykyisessä vastaanottokoodissa JEV arvioi ensin viestien välisiä rajoja. Sen jälkeen se luokittelee ryhmät: konkreettinen työpyyntö, kysymys, idea, tarkennusta tarvitseva pyyntö tai pysäyttämiseen liittyvä viesti. Ohjelma kokoaa tehtävät alkuperäisistä viesteistä ja säilyttää niiden tunnisteet sekä järjestyksen.

Tässä työnjako näkyy hyvin. JEV arvioi, mitkä viestit kuuluvat yhteen. Ohjelma huolehtii siitä, ettei yhtäkään viestiä katoa, monistu tai vaihda paikkaa.

Myös epävarmuudelle on oma reitti. Jos vastaus ei täytä nykyisiä tarkistuksia tai palvelukutsu epäonnistuu, aineisto säilyy ja käsittely jää odottamaan huomiota. Kysymykset ja ideat eivät muutu toteutustehtäviksi. Pysäytyspyyntöön annettu vastaus puolestaan ohjaa varsinaisiin pysäytyspainikkeisiin: pelkkä viestin luokittelu ei väitä pysäyttäneensä prosessia.

Riippuvuuksien käsittelyssä tuli vastaan konkreettinen korjaustarve. Ensimmäistä toteutusta piti tarkentaa niin, että edellytys tunnistetaan täsmällisenä tehtävänä myös toisesta hakemistosta tai keskustelusta. Samalla piti varmistaa, ettei vasta suunnitteilla olevan asian tilalle valita jotakin muuta, saatavilla olevaa työtä.

Ajatellaan, että pyydän ensin rajapinnan ja sitten sitä käyttävän näkymän. Näkymän toteuttaminen voi edellyttää rajapinnan hyväksyttyä tulosta. Pelkkä kahden tehtävän olemassaolo ei kerro, ovatko ne valmiita etenemään rinnakkain.

JEV:n tehtäväksi on toteutettu edellytysten valinta annetuista tehtäväehdokkaista. Ohjelma pitää kiinni tunnisteista ja odotusehdoista. Jos valittu edeltävä työ on käynnissä tai tarkistettavana, riippuva työ ei vapaudu vain siksi, että agentti kirjoitti lupaavan loppuviestin. Jos edellytys on vasta idea tai tarvittavaa tulosta ei löydy, käsittely pysähtyy tarkennukseen.

Ensimmäinen toteutus on myös tiedostomuutosten suhteen varovainen: työ varaa koko valitun hakemiston kirjoittamista varten. Saman hakemiston tehtävät kulkevat siksi peräkkäin. Eri hakemistoissa voidaan käyttää useampaa suorittajaa. Hienojakoisempi rinnakkaisuus vaatii vielä oman ratkaisunsa.

Tässä olemme nyt: arviointinäkymä ja vastaanoton JEV-käsittely löytyvät koodista. Vastaanotolle on tehty yksikkö- ja elinkaaritestejä sekä pieniä synteettisiä kokeita oikealla JEV-palvelulla. Riippuvuuksien käsittelyä on jo korjattu ensimmäisen toteutuksen jälkeen. TQ:n suorituspolku on edelleen kehitysvaiheessa, joten valmiista, laajassa arkikäytössä koetellusta automaattisesta työnjohdosta ei vielä ole kyse.

Viikonloppu jätti myös joukon jatkoideoita. Ne lähtevät samoista arjen ongelmista, mutta näitä JEV-toimintoja ei vielä ole toteutettu.

Ensimmäinen on huomion tarpeen tunnistaminen. Agentti voi kysyä puuttuvaa päätöstä monella tavalla. Kaikissa niissä ei ole samaa tunnussanaa. Toisaalta vanhan kysymyksen lainaaminen ei tarkoita, että kysymys olisi yhä auki.

Suunnitelmana on kokeilla, tunnistaako JEV rajatusta keskustelukatkelmasta, että käyttäjän vastausta todella tarvitaan. Aluksi malli tekisi arvion nykyisen tunnistuksen rinnalla. Tulosten perusteella voisi arvioida, kannattaako käyttöliittymään lisätä vihje kuten ”saattaa tarvita vastaustasi”. Vihjeen yhteydessä pitäisi näkyä, mistä istunnosta ja viestistä tulkinta tuli.

Tämän arvioiminen vaatii oikeita vastapareja. Yhdessä esimerkissä agentti kysyy lupaa ja odottaa. Toisessa sama kysymys esiintyy lainauksena, mutta käyttäjä on jo vastannut. Kolmannessa agentti kertoo jatkavansa itse. Suomenkieliset ilmaukset, kirjoitusvirheet ja lyhyet jatkoviestit kuuluvat kokeeseen, koska sellaisia omat viestini ovat.

Väärä hälytys keskeyttää minut turhaan. Huomaamatta jäänyt kysymys voi jättää työn seisomaan. Näitä pitää katsoa erikseen. Pelkkä vakuuttavalta näyttävä prosenttiluku ei kerro, onko toiminto hyödyllinen.

Toinen suunniteltu käyttökohde liittyy Codexin, Clauden ja agyn väliseen yhteistyöhön. Yksi istunto on saattanut jo selvittää asian, jota toinen vasta tutkii. Teerminalissa on pohjaa lähteistettyjen havaintojen ja työn tilan tallentamiseen. JEV voisi arvioida, vastaako jokin tallennettu havainto toisen tehtävän avoimeen kysymykseen.

Käytännössä haluaisin nähdä ehdotuksen: toisessa istunnossa on tähän liittyvä löydös, käy katsomassa. Alkuperäinen lähde ja ajankohta säilyisivät mukana. Agentti voisi tarkistaa löydöksen soveltuvuuden omaan työhönsä. Tämä tuntuisi hyödylliseltä tavalta jakaa juuri kyseisessä työssä tarvittavaa tietoa.

Kolmas kiinnostava jatko on ohjeiden säilyminen työn siirtyessä eteenpäin. Jos olen pyytänyt säilyttämään välilehtien järjestyksen, tämän ehdon pitäisi löytyä myös seuraavalle agentille kirjoitetusta yhteenvedosta. JEV voisi arvioida jokaisen olennaisen vaatimuksen kohdalta, säilyikö se, muuttuiko se vai katosiko se.

Samasta ajatuksesta on kirjattu muitakin käyttökohteita: testien vertaaminen käyttäjän hyväksymisehtoihin, samaa yritystä toistavan agentin tunnistaminen ja sopivan olemassa olevan työkalun ehdottaminen. Dokumenttien moniulotteisesta arvioinnista on myös erillinen idea. Siinä samasta tekstistä kerättäisiin useita arvioita, joiden painotuksia voisi muuttaa myöhemmin ohjelmassa. Sen tarkempi käyttötapa on vielä määriteltävä.

Viikonlopun konkreettinen tulos on työnjako, jota voi jo tutkia koodista ja kokeilla rajatuissa tilanteissa. Codex, Claude ja agy tekevät kehitystyötä. JEV arvioi vastaanotettujen viestien merkitystä ja tehtävien edellytyksiä. Teerminalin koodi säilyttää aineiston, tarkistaa vastaukset ja valvoo etenemistä.

Seuraavaksi pitää katsoa, miten hyvin nämä tulkinnat kestävät omaa arkista tapaani kirjoittaa: ajatuksia useassa viestissä, täsmennyksiä kesken työn ja useita projekteja yhtä aikaa. Arviointinäkymä antaa paikan tutkia yksittäisiä kysymyksiä. Vastaanottokoodi antaa paikan kokeilla, mitä vastauksista seuraa oikeassa työnkulussa.

Siihen viikonlopun hackathon meidät toi. Teerminalissa on nyt paikka pienille semanttisille päätöksille. Seuraava työ on selvittää, missä niistä on eniten apua.

