Siirry pääsisältöön
  1. Dokumentaatio/

Agenttipalvelin

Mikä on PocketHook Agent Server?
#

Agenttipalvelin muuttaa PocketHookin täysimittaiseksi tekoälyavustajaksi. Sen sijaan, että kirjoittaisit vastauslogiikan itse, yhdistät LLM:n (Claude, GPT, Gemini jne.), joka käsittelee viestejä, kutsuu työkaluja ja palauttaa jäsenneltyjä PocketHook-vastauksia — mukaan lukien Oikopolku-triggerit.

Palvelin pyörii omalla koneellasi. Tietosi pysyvät sinulla.

Tämä on lähtökohta. Palvelin toimitetaan perustyökalujen kanssa ja on suunniteltu laajennettavaksi. Lisää omia integraatioita — sähköposti, kalenterit, dokumentit, API:t — ja tee siitä omasi.

Ominaisuudet
#

  • Usean palveluntarjoajan LLM — Anthropic, OpenAI, GitHub Copilot, Google, Mistral, Groq, xAI, OpenRouter, Ollama (paikallinen), LM Studio (paikallinen)
  • OAuth-todennus — GitHub Copilot ja OpenAI Codex device code / selaimen kautta
  • Agenttityökalut — Komentorivikomennot, tiedostojen luku/kirjoitus, hakemistolistaus, verkkohaku, verkkoraapinta, kehityspalvelimen hallinta
  • Kehys/käyttäjä-jako — Kehystiedostot (skills/, custom-tools/, config/) pysyvät vain luku -tilassa. Omat mukautukset sijaitsevat hakemistossa data/user/ (taidot, mukautetut työkalut, ohjeet, tyypitetyt asetukset). Kehyksen päivitykset asentuvat siististi ylikirjoittamatta omaa työtäsi
  • Tyypitetyt käyttäjäasetukset — Tallenna arvot kuten suosimasi karttasovellus tai tunnelialue tiedostoon data/user/prefs.json. Viittaa niihin taidoissa muodossa {{prefs.key}}, ja palvelin korvaa ne lataushetkellä
  • Ohjelmointitehtävät yhdellä kutsulla — Meta-työkalu run_code_job luo prompt-tyyppisen taustatyön (jonka konfiguroitu LLM ajaa) ja lähettää käyttäjälle kuittauksen yhdellä vaiheella korvaten virhealttiin “respond + create-job” -kuvion
  • Tyypitetyt protokollatyökalut — Kuusi omistettua respond_*-työkalua (respond_text, respond_image, respond_buttons, respond_shortcut, respond_html, respond_sequence), sekä tyypitetyt työtyökalut (create_once_job, create_cron_job) ja tyypitetyt työtilatyökalut (create_project, list_projects, delete_project). Skeemat hylkäävät virheelliset URL:t, painikesyntaksin ja type/schedule-yhdistelmät ennen kuin ne saavuttavat laitteen
  • Tyypitetyt kirjoittajat mukautusta vartencreate_user_skill ja create_custom_tool rakentavat käyttäjäkerroksen markdownin oikealla frontmatterilla, joten lataaja jäsentää ne aina oikein eikä agentti koskaan kirjoita näitä tiedostoja käsin
  • Taustatyöt — Kertaluonteiset tai toistuvat tehtävät cron-lausekkeilla tai yksinkertaisilla väleillä
  • Dynaamiset taidot — Määrittele oikopolkuja ja käyttäytymissääntöjä .md-tiedostoina. Vain kompakti indeksi ladataan promptiin; täysi sisältö haetaan tarvittaessa load_skill-työkalulla
  • Itsehallinnoivat taidot — Agentti voi luoda, muokata ja poistaa taitomäärittelyjä (kirjoitukset päätyvät aina käyttäjäkerrokseen)
  • Semanttinen muisti — Vektoripohjainen haku upotuksilla (Ollama, LM Studio tai OpenAI). Muistot luokitellaan automaattisesti LLM:n toimesta wing/room/hall/status-ulottuvuuksiin
  • Tietokaavio — Ajallinen kolmikkovarasto kestäville faktoille automaattisella mitätöinnillä. Moniarvosuhteet rinnakkain; yksittäisarvoiset faktat korvautuvat automaattisesti
  • PARA-menetelmä projektin päättymiskaskadilla — Jokainen muisto merkitään statuksella (Projekti, Alue, Resurssi, Arkisto). Kun projekti päättyy, yksittäinen complete_project-kutsu arkistoi sen vektorit, mitätöi kaikki projektin slugiin sidotut suunnittelukolmikot ja kirjaa päättymisen — yksi kutsu kolmen sijaan
  • Hybridi muistiin palautus — Yhdistää FTS5-avainsanahaun vektorisemantiseen hakuun reciprocal rank fusion -menetelmällä
  • Pitkäaikainen muisti — SQLite + FTS5 kokotekstihaku varavaihtoehtona, kun semanttinen muisti on poissa käytöstä
  • Kehityspalvelimen hallinta tunnelisopimuksella — Käynnistä, pysäytä ja listaa kehityspalvelimia. Kun tunnel: true pyydetään, palvelin valvoo sen sekä ennen käynnistystä että käynnistyksen jälkeen — tavoittamaton localhost-palvelin ei koskaan jää hiljaisesti käyntiin
  • Automaattinen URL-puhdistus — Jos agentti jättää localhost-URL:n vastaukseen, respond_*-työkalut kirjoittavat sen vastaavaksi tunneli-URL:ksi, jotta puhelimesi saa aina tavoitettavan linkin
  • Mukautetut työkalut — Agentti voi asentaa CLI-työkaluja ja rekisteröidä ne uusina ominaisuuksina
  • Versiointi — Automaattinen git-versiointi työtilan tiedostoille; varmuuskopiot asetuksista taidoille ja käyttöoikeuksille
  • Verkkokojelauta — Reaaliaikainen yleiskatsaus taustatöistä, muokattavissa käyttäjäkohtaisesti. /dashboard ja /api/jobs ovat tarkoituksellisesti todentamattomia — rajoita pääsyä verkkokerroksessa (Tailscale-ACL, palomuuri, käänteinen välityspalvelin perustodennuksella) tai aseta DASHBOARD=false, jos et tarvitse sitä
  • HTTPS-tunnelointi — Sisäänrakennettu tuki Tailscalelle, ngrokille ja Cloudflare Tunnelille
  • Järjestelmäpalvelu — Asenna pysyväksi palveluksi macOS:lle, Linuxille tai Windowsille
  • Pyyntörajoitus — Token-kohtaiset pyyntörajat säädettävillä kynnysarvoilla

Vaatimukset
#

  • Bun-ajonaikainen ympäristö
  • API-avain tai OAuth-tunnistetiedot LLM-palveluntarjoajallesi
  • (Valinnainen) Tailscale, ngrok tai cloudflared HTTPS-tunnelointiin

Pikaopas
#

git clone https://github.com/pockethook-app/pockethook-agent-server.git
cd pockethook-agent-server
bun install

# Vuorovaikutteinen asennus — valitse palveluntarjoaja, malli, todennustoken, portti
bun run setup

# Käynnistä palvelin + HTTPS-tunneli
bun run dev:tunnel

Asennusvelho opastaa sinut LLM-palveluntarjoajan valinnassa, todennuksen määrittämisessä ja työkaluoikeuksien asettamisessa.

Kun palvelin on käynnissä, kopioi näytetyt URL:t PocketHookin asetuksiin:

PocketHook-asetusURL
Server URLhttps://your-host
Health Check URLhttps://your-host/health
Polling URLhttps://your-host/jobs

Miten se toimii
#

  1. Lähetät viestin PocketHookissa
  2. Palvelin välittää sen valitsemallesi LLM:lle keskusteluhistorian, muistettujen muistojen ja käytettävissä olevien työkalujen kanssa
  3. LLM käsittelee viestin — se voi suorittaa komentorivikomentoja, lukea/kirjoittaa tiedostoja, hakea verkosta, aikatauluttaa taustatöitä, muistaa faktoja tai käynnistää kehityspalvelimia
  4. Vastaus palautetaan PocketHook-muodossa (msg + shortcut + data + url)
  5. PocketHook näyttää viestin ja suorittaa mahdolliset Oikopolut laitteellasi

Tuetut LLM-palveluntarjoajat
#

PalveluntarjoajaTodennusOletusmalli
AnthropicAPI-avainclaude-sonnet-4-20250514
OpenAIAPI-avaingpt-4.1-mini
OpenAI CodexOAuthgpt-5.1-codex-mini
GitHub CopilotOAuthclaude-sonnet-4
Google (Gemini)API-avaingemini-2.5-flash
MistralAPI-avainmistral-medium-latest
GroqAPI-avainllama-3.3-70b-versatile
xAI (Grok)API-avaingrok-3-mini-fast
OpenRouterAPI-avainanthropic/claude-sonnet-4
Ollama (paikallinen)Ei mitäänllama3.2
LM Studio (paikallinen)Ei mitäänqwen3.5-4b-mlx

Vaihda palveluntarjoajaa milloin tahansa komennolla bun run switch. Ollama ja LM Studio pyörivät kokonaan omalla koneellasi — API-avainta ei tarvita, tiedot eivät lähde verkostasi.

Muisti
#

Muistijärjestelmässä on kolme tasoa, joista kukin palvelee eri tarkoitusta.

Semanttisen muistin suunnittelu yhdistää ideoita MemPalacesta (muistipalatsi-arkkitehtuuri, joka järjestää muistot wingeihin, halleihin ja roomeihin) ja Tiago Forten PARA-menetelmästä (Projektit, Alueet, Resurssit, Arkisto) tiedon elinkaarenhallintaan.

Keskustelumuisti
#

SQLite FTS5-kokotekstihaulla. Kaikki viestit tallennetaan aikaleimoin ja istuntotunnuksin.

  • Lyhytaikainen — Viimeiset MAX_HISTORY viestiä pidetään muistissa istuntoa kohti
  • Pitkäaikainen — Kaikki viestit tallennetaan SQLiteen, haettavissa FTS5-avainsanahaulla
  • Palautus per vuoro — Kun semanttinen muisti on käytössä, MAX_RECALL ohjaa, kuinka monta osuvaa muistoa lisätään promptiin jokaisella vuorolla
  • Istunnot vanhenevat SESSION_TTL_MINUTES-ajan jälkeen, mutta pitkäaikainen muisti säilyy ikuisesti

Säädä näitä vuorovaikutteisesti komennolla bun run memory.

Semanttinen muisti
#

Vaatii VECTOR_MEMORY=true ja upotuspalveluntarjoajan (Ollama, LM Studio tai OpenAI).

Jokainen muisto muunnetaan vektoriksi ja luokitellaan automaattisesti LLM:n toimesta neljään ulottuvuuteen:

  • Wing — Entiteetti: user, person:john, project:blog, place:london
  • Room — Tyyppi: facts, preferences, events, decisions, requests
  • Hall — Aihe: personal, tech, health, travel, food, work
  • Status — PARA-luokitus: project, area, resource, archive

Kun esität kysymyksen, entiteettien poiminta kohdistaa vektorihaun oleellisimpiin wingeihin. Tulokset yhdistetään FTS5-tuloksiin käyttäen reciprocal rank fusion -menetelmää — saat parhaan molemmista hakutyypeistä.

Tietokaavio
#

Ajallinen kolmikkovarasto rakenteellisille, kestäville faktoille:

  • Kolmikot: (subject, predicate, object) ja valid_from / valid_until -aikaleimat
  • Yksiarvoisten predikaattien (lives_in, partner) vanha arvo mitätöityy automaattisesti päivityksessä
  • Moniarvoisten predikaattien (child, friend, hobby) arvot rinnakkain ilman mitätöintiä
  • Tietokaavion faktat lisätään muistettujen muistojen rinnalle jokaiseen keskusteluun

Kun kerrot agentille “Muutin Berliiniin”, se mitätöi vanhan lives_in-kolmikon ja luo uuden — automaattisesti.

PARA-elinkaari
#

Jokainen muisto merkitään PARA-statuksella:

  • Projekti — Aktiivinen, aikarajoitettu työ
  • Alue — Jatkuvat vastuualueet
  • Resurssi — Viitemateriaali (listat, suositukset, ohjeet)
  • Arkisto — Valmiit tai perutut projektit

Kun projekti valmistuu, agentti käyttää semanttista samankaltaisuutta arkistoidakseen vain kyseisen projektin muistot säilyttäen viitemateriaalin tulevaa käyttöä varten.

Projektin päättymiskaskadi
#

Sano “Perun Barcelona-matkani”, ja yksi työkalukutsu hoitaa kaiken:

  1. Arkistoi projektin vektorit (events, decisions, requests, jotka liittyvät Barcelonaan).
  2. Mitätöi kaikki aktiiviset tietokaaviokolmikot, joiden predikaatti vastaa projektin slugia (scheduled_visit_barcelona, planning_visit_barcelona, confirmed_visit_barcelona).
  3. Kirjaa päättymisen uutena kolmikkona: (user, "cancelled_visit_barcelona", "2026-04-15").

Yhteensovitus on rajatietoista — toinen projekti nimeltä revisit_barcelona jää koskemattomaksi. Agentin ei enää tarvitse orkestroida kolmea erillistä kutsua oikeassa järjestyksessä, joten pienemmätkin mallit onnistuvat siinä.

Jos VECTOR_MEMORY on poissa käytöstä tai upotuspalveluntarjoaja ei ole tavoitettavissa, järjestelmä siirtyy FTS5-tilaan ilman virheitä.

Taidot
#

Taidot ovat .md-tiedostoja skills/-kansiossa, jotka määrittelevät iOS Oikopolkuja, joita agentti voi käynnistää, ja/tai käyttäytymissääntöjä. Ne käyttävät dynaamista latausta: vain kompakti indeksi (otsikko, kuvaus, oikopolkulista) lisätään järjestelmäpromptiin. Agentti lataa täyden sisällön tarvittaessa load_skill-työkalulla, pitäen token-kulutuksen matalana taitojen lisääntyessä.

Jokainen taitotiedosto käyttää YAML-frontmatteria:

---
title: Notes
description: Create notes on the user's device with a title and body
shortcuts: [newNote]
target: mac
sync_app: Notes
---

### New Note

Shortcut name: `newNote`

Creates a new note on the user's device.

Data fields:
- title (string, required): Note title
- content (string, required): Note body

Frontmatter-kentät
#

KenttäPakollinenKuvaus
titleKylläLuettava nimi
descriptionKylläYksi lause, jota käytetään agentille näytettävässä taitojen indeksissä
shortcutsKylläTaulukko tiedostossa määritellyistä oikopolkujen nimistä. Käytä [] pelkkiä käyttäytymissääntöjä sisältäville taidoille
targetEiMissä oikopolut suoritetaan: device (oletus, lähetetään iOS-laitteelle) tai mac (ajetaan palvelimella)
sync_appEiSovellus, joka avataan hetkeksi taustalla palvelinsuorituksen jälkeen iCloud-synkronoinnin käynnistämiseksi (esim. Notes, Calendar, Reminders). Jätä pois tai käytä none-arvoa ohittaaksesi

Taidot voivat olla myös käyttäytymissääntöjä ilman oikopolkuja (esim. “miten suunnitella perheloma”). Käytä shortcuts: [] näille.

Agentti voi luoda ja hallita taitoja pyydettäessä — pyydä sitä “luo taito valojeni ohjaamiseen” ja se kirjoittaa .md-tiedoston puolestasi. Uudet ja muokatut taidot päätyvät aina käyttäjäkerrokseesi (data/user/skills/), joten kehyksen päivitykset eivät koskaan ylikirjoita niitä. Katso alla oleva osio Customizing your agent.

Oikopolkujen suorittaminen Mac-palvelimella
#

Kun taidolla on target: mac, oikopolut ajetaan hiljaisesti Mac-palvelimella shortcuts run -CLI:n kautta sen sijaan, että ne lähetettäisiin iOS-laitteelle. Tämä on ihanteellista iCloud-synkronoitua sisältöä luoville toiminnoille — muistiinpanoille, muistutuksille, kalenteritapahtumille — koska tulos synkronoituu automaattisesti kaikille laitteillesi ilman, että PocketHook-sovelluksen tarvitsee tehdä mitään.

Miten se toimii:

  1. Agentti päättää, että oikopolku tulee ajaa (esim. “luo muistiinpano tämän päivän kokousmuistiinpanoilla”)
  2. Palvelin kutsuu shortcuts run "oikopolunNimi" ja välittää datan JSON-muodossa stdin:in kautta, käyttäen samaa wrapper-muotoa kuin PocketHook iOS
  3. Jos sync_app on asetettu, palvelin avaa kyseisen sovelluksen hetkeksi taustalla (open -gj -a Notes) pakottaakseen iCloud-synkronoinnin ja sulkee sen 5 sekunnin kuluttua
  4. Käyttäjä saa vahvistusviestin keskusteluun; itse oikopolkua ei lähetetä laitteelle

Vaatimukset:

  • Palvelimen täytyy olla käynnissä macOS-käyttöjärjestelmässä — shortcuts run on vain macOS:lle. Muilla alustoilla palvelin kirjaa varoituksen ja palaa laitesuoritukseen
  • Oikopolun täytyy olla asennettuna Shortcuts.app-sovellukseen Mac-palvelimella
  • Oikopolun tulisi odottaa Dictionary-tyyppistä syötettä (PocketHook kääri datan muotoon { context, timestamp, app, data })

Milloin käyttää target: mac:

  • iCloud-synkronoidut toiminnot (Notes, Reminders, Calendar) — tulos päätyy joka tapauksessa jokaiselle laitteelle
  • Pitkäkestoinen käsittely, jonka haluat pitää pois iOS-laitteelta
  • Kaikki oikopolut, joiden ei tarvitse olla vuorovaikutuksessa iPhonen käyttöliittymän kanssa

Milloin pitää target: device (oletus):

  • Oikopolut, jotka tarvitsevat pelkästään iPhonelta löytyviä ominaisuuksia (kamera, tarkka sijainti, paikalliset sovellusautomaatiot)
  • Oikopolut, jotka pyytävät käyttäjältä interaktiivista syötettä
  • Oikopolut, jotka käyttävät vain iOS-sovellusten App Intents -toimintoja

Taustatyöt
#

Pyydä agenttia aikatauluttamaan tehtäviä ja se hoitaa loput:

  • “Tarkista sää joka aamu klo 8 ja luo muistiinpano”
  • “Suorita tämä skripti joka tunti”
  • “Muistuta minua tarkistamaan sähköpostini 30 minuutin kuluttua”

Työt tukevat cron-lausekkeita (0 8 * * *) ja yksinkertaisia välejä (30m, 1h, 2d). Tulokset toimitetaan PocketHookiin, kun se pollaa /jobs-päätepistettä.

Kaksi suoritustyyppiä:

  • Shell — Suorittaa bash-komennon, kaappaa tulosteen. Voi käynnistää Oikopolun valmistuessaan
  • Prompt — Käsitellään AI-agentin toimesta täydellä työkalupääsyllä, tallentaa täydellisen PocketHook-vastauksen

Kehityspalvelimet
#

Kun agentti luo verkkoprojektin työtilaan (Hugo, Astro, Next.js, Flask, Go jne.), se tarjoutuu ennakoivasti tarjoilemaan sitä:

  • Esikatselu — Käynnistää paikallisen kehityspalvelimen automaattisesti määritetyssä portissa nopeaa katselua varten
  • Julkinen — Käynnistää palvelimen ja paljastaa sen HTTPS-tunnelin kautta, jotta se on saavutettavissa mistä tahansa

Agentti hallitsee elinkaaren: käynnistys, pysäytys ja käynnissä olevien palvelimien listaus. Kaikki palvelimet siivotaan, kun pääpalvelin pysähtyy.

Tunnelisopimus
#

Kun agentti käynnistää palvelimen ja pyytää tunnelialtistusta, ajonaikainen valvoo sitä: jos mitään tunnelityökalua (Tailscale, ngrok, cloudflared) ei ole asennettu, palvelin kieltäytyy käynnistymästä. Jos tunnelin asetus epäonnistuu käynnistyksen jälkeen, orpoprosessi pysäytetään ja agentille kerrotaan selvästi — jotta se voi palata esikatselutilaan tai pyytää sinua asentamaan tunnelin. Palautettu URL on aina tunneli-URL kun tunnelointi on käytössä, huomautuksella että paikallinen URL koskee vain isäntää.

Turvaverkkona jokainen respond_*-työkalu jälkikäsittelee viestinsä: mikä tahansa localhost- tai 127.0.0.1-URL, joka livahtaa vastaukseen, kirjoitetaan automaattisesti vastaavaksi tunneli-URL:ksi, kun hallitulla palvelimella sellainen on. Jos uudelleenkirjoitus ei onnistu, saat varoituksen lokeihin rikkinäisen linkin sijaan puhelimella.

Kojelauta
#

Sisäänrakennettu verkkokojelauta osoitteessa /dashboard näyttää reaaliaikaisen yleiskatsauksen taustatöistä.

Tarkoituksellisesti todentamaton. Sekä /dashboard että /api/jobs ovat avoimia GET-päätepisteitä — kuka tahansa, joka tavoittaa isännän, voi listata työt. Rajoita pääsyä verkkokerroksessa (Tailscale-ACL, palomuuri, käänteinen välityspalvelin perustodennuksella) tai aseta DASHBOARD=false, jos et tarvitse sitä. PocketHookin iOS-sovellus ei käytä näitä päätepisteitä.

Se on täysin muokattavissa:

  • Pikamuokkaus — Sijoita dashboard.html kansioon workspace/dashboard/ yksinkertaisiin mukautuksiin
  • Täysi projekti — Luo kehysprojekti (Svelte, React, Vue jne.) kansioon workspace/dashboard/ build-tulosteella kansioon dist/

Pyydä agenttia muokkaamaan kojelautaasi ja se hoitaa loput — jokainen käyttäjä saa ainutlaatuisen, personoidun kojelaudan.

Mukautetut työkalut
#

Agentti voi asentaa CLI-työkaluja ja rekisteröidä ne uusina ominaisuuksina — laajentaen itseään ilman palvelinkoodin muokkausta.

Esimerkiksi sano “asenna Playwright ja käytä sitä kuvakaappausten ottamiseen”. Agentti:

  1. Asentaa riippuvuuden
  2. Luo työkalumäärittelyn (yksinkertainen .md-tiedosto)
  3. Käyttää uutta työkalua tulevissa keskusteluissa

Mukautetut työkalut ladataan uudelleen lennossa — uudelleenkäynnistystä ei tarvita. Poista .md-tiedosto poistaaksesi työkalun.

Versiointi
#

Kaikki käyttäjätiedot versioidaan automaattisesti:

  • Työtilan tiedostot — Seurataan paikallisella git-repolla workspace/-kansion sisällä. Jokainen kirjoitus luo automaattisen commitin. Pyydä agenttia “kumoa viimeinen muutos” tai käytä git revert HEAD manuaalisesti
  • Asetustiedostotconfig/agent-instructions.md, config/personality.md, skills/ ja permissions.json varmuuskopioidaan ennen jokaista muokkausta. Enintään 20 versiota per tiedosto

Git on valinnainen — jos sitä ei ole asennettu, työtilan muutoksia ei versioida. Asetusten varmuuskopiot toimivat aina.

Agentin mukauttaminen
#

Agenttipalvelin toimitetaan minimaalisella kehysperustalla ja odottaa, että kerrostat oman mukautuksesi sen päälle. Ajonaikainen pitää nämä kaksi erillään, joten kehyksen päivitykset eivät koskaan tuhoa työtäsi.

Kehys vs käyttäjä
#

pockethook-agent-server/
├── skills/                      # kehyksen mukana tulevat taidot (vain luku)
├── custom-tools/                # varattu kehyksen mukana tuleville työkaluille (vain luku)
├── config/
│   ├── agent-instructions.md    # kehyksen agenttiohjeet (vain luku)
│   └── personality.md           # kehyksen persoonallisuus (vain luku)
└── data/user/                   # OMAT mukautuksesi tulevat tähän (git-ohitettu)
    ├── skills/                  # omat taitosi (ohittavat perustan tiedostonimellä)
    ├── custom-tools/            # asennetut mukautetut työkalusi
    ├── instructions.md          # omat lisäyksesi agenttiohjeisiin
    └── prefs.json               # tyypitetyt arvot, joihin viitataan muodossa {{prefs.key}}

Käyttäjämukautus kirjoitetaan omistetuilla tyypitetyillä työkaluilla (create_user_skill, create_custom_tool), joten tuloksena olevat tiedostot vastaavat aina lataajan muotoa. write-työkalu hylkää myös kaikki polut hakemistoissa skills/, custom-tools/ tai config/ ja ohjaa agentin polkuun data/user/* — joten suoratkin tiedostomuokkaukset päätyvät käyttäjäkerrokseen.

Huomio custom-tools/-perushakemistosta. Tällä hetkellä se sisältää vain mallin (_example.md), jonka lataaja jättää huomioimatta — jokainen agentin sinulle asentama työkalu menee kansioon data/user/custom-tools/. Hakemisto on varattu, jotta kehyksen tulevat julkaisut voivat toimittaa valinnaisia sisäänrakennettuja työkaluja ilman, että asennuksesi tuhoutuvat. Kun niin tapahtuu, käyttäjäkerroksen tiedostosi voittavat silti nimitörmäyksessä, joten mitään ei tarvitse siirtää.

Neljä tapaa mukauttaa
#

Mitä haluat muuttaaMihin se kuuluuEsimerkki
Oikopolku- tai käyttäytymistaitodata/user/skills/<nimi>.md“Luo taito treenieni kirjaamiseen”
Agentin kyvyksi paketoitu CLI-työkaludata/user/custom-tools/<nimi>.md“Asenna ffmpeg ja anna minun käyttää sitä muunnoksiin”
Yleinen sääntö (“vastaa aina suomeksi”, “älä koskaan käytä taulukoita”)data/user/instructions.md“Tästä lähtien tiivistä artikkelit aina 3 ranskalaiseen viivaan”
Taitojen viittaama tyypitetty oletusarvodata/user/prefs.json“Reittini oletuslähtöpaikka on Madrid”{"routeOrigin": "Madrid"}

Sinun ei tarvitse koskaan kirjoittaa näitä tiedostoja käsin. Kerro vain agentille, mitä haluat, ja se valitsee oikean kerroksen automaattisesti.

Tyypitetyt asetukset {{prefs.*}}-viittauksilla
#

Sanotaan, että kirjoitat reittisuunnittelutaidon, jonka täytyy tietää oletuslähtöpaikkasi. Sen sijaan, että kovakoodaisit “Madrid” taitoon, viittaa asetukseen:

- **Lähtöpaikka**: {{prefs.routeOrigin}}, ellei käyttäjä määritä toista lähtöpaikkaa.

Ja tallenna arvo tiedostoon data/user/prefs.json:

{
  "routeOrigin": "Madrid, Espanja",
  "preferredMapsApp": "apple",
  "tunnel": { "domain": "my-host.ts.net" }
}

Palvelin korvaa paikkamerkit, kun taito ladataan. Sisäkkäiset avaimet ({{prefs.tunnel.domain}}) toimivat myös. Tuntemattomat avaimet jätetään koskemattomiksi, joten kirjoitusvirheet pysyvät näkyvissä.

Kehysperustan suora muokkaus
#

Jos itse isännöit ja haluat muokata itse kehystä, voit muokata tiedostoja config/agent-instructions.md, config/personality.md, skills/ tai custom-tools/ suoraan — palvelin ei estä sinua tiedostoneditoria käyttäessäsi. Mutta agentti ei kirjoita näihin polkuihin keskustelusta käsin. Ja kehyksen päivitykset ylikirjoittavat muokkauksesi. Käytä mieluummin käyttäjäkerrosta kaikelle, minkä haluat säilyttää.

Palvelimen laajentaminen
#

  • Mukautetut työkalut — Pyydä agenttia asentamaan CLI-työkaluja; ne päätyvät automaattisesti kansioon data/user/custom-tools/
  • Taitojen lisääminen — Pyydä agenttia luomaan taito; tiedosto menee kansioon data/user/skills/
  • Käyttäytymisen muuttaminen — Pyydä agenttia soveltamaan yleistä sääntöä; se liitetään tiedostoon data/user/instructions.md
  • Oikeuksien määrittäminen — Suorita bun run permissions hallitaksesi mitä työkaluja agentti voi käyttää
  • Sisäänrakennettujen työkalujen lisääminen — Toteuta uusia työkalufunktioita tiedostossa src/tools.ts syvemmille integraatioille (vaatii palvelimen forkin)

Asetukset
#

Kaikki asetukset tallennetaan .env-tiedostoon (luodaan komennolla bun run setup). Tärkeimmät asetukset:

MuuttujaOletusKuvaus
AUTH_TOKEN(pakollinen)Jaettu salaisuus PocketHookin kanssa
LLM_API_KEY(pakollinen)LLM-palveluntarjoajan API-avain
LLM_PROVIDERanthropicPalveluntarjoajan nimi
LLM_MODELclaude-sonnet-4-20250514Mallin ID
LLM_REASONINGoffReasoning-taso: off, minimal, low, medium, high, xhigh. Korkeammat tasot lisäävät piilotettuja thinking-tokeneita (hitaampi + kalliimpi). Sivuutetaan malleilla, jotka eivät tue sitä
PORT3000Palvelimen portti
AGENT_NAMEPocketHook AssistantAgentin näyttönimi
MAX_HISTORY50Viestejä lyhytaikaisessa muistissa
MAX_RECALL5Vuorolla palautettavat muistot semanttisella palautuksella (vain kun VECTOR_MEMORY=true)
SESSION_TTL_MINUTES60Istunnon vanheneminen
VECTOR_MEMORYfalseOta semanttinen muisti käyttöön (vaatii upotuspalveluntarjoajan)
EMBEDDING_PROVIDERollamaUpotuspalveluntarjoaja: ollama, lm-studio tai openai
EMBEDDING_MODELnomic-embed-textUpotusmallin nimi
EMBEDDING_URL(automaattinen)Upotus-API:n URL
EMBEDDING_API_KEYAPI-avain OpenAI-upotuksille
LOG_LEVELinfoLokitustaso: debug, info, warn, error
RATE_LIMIT_MAX30Maksimipyynnöt per aikaikkuna
DASHBOARDtrueOta verkkokojelauta käyttöön (/dashboard-reitti)
INSTANCE_NAME(projektihakemiston perusnimi, josta pockethook--etuliite on poistettu)Pääte, jota käytetään järjestelmäpalvelun tunnisteessa, lokihakemistossa ja prosessin täsmäytyksessä. Aseta nimenomaisesti, kun ajat useita tarkastuksia samalla koneella

Katso täydellinen asetusviite GitHub-arkistosta.

Palveluna ajaminen
#

Asenna pysyväksi palveluksi, joka käynnistyy automaattisesti:

bun run service install
AlustaTaustajärjestelmäPalvelun sijainti
macOSlaunchd~/Library/LaunchAgents/com.pockethook.${INSTANCE_NAME}.plist
Linuxsystemd (user)~/.config/systemd/user/pockethook-${INSTANCE_NAME}.service
WindowsNSSMPocketHook-${PascalCase(INSTANCE_NAME)} Windowsin palvelunhallinnassa

INSTANCE_NAME on oletuksena projektihakemiston perusnimi, josta pockethook--etuliite on poistettu (esim. tarkistus hakemistossa pockethook-agent-server/ muuttuu muotoon agent-server). Aseta se nimenomaisesti, jotta voit ajaa useita tarkastuksia samalla koneella ilman törmäyksiä — jokainen instanssi pitää omat data/- ja lokitiedostonsa.

Hallitse komennoilla bun run service status, restart, stop tai uninstall.

Turvallisuus
#

  • HTTPS vaaditaan — PocketHook edellyttää HTTPS:ää kaikille URL:ille
  • Bearer-token-todennus — Jaettu salaisuus sovelluksen ja palvelimen välillä
  • Pyyntörajoitus — Token-kohtaiset rajat estävät väärinkäytön
  • Eristetyt työkalut — Komentorivikomennot ja tiedostopääsy rajoitettu käyttöoikeuksilla
  • Estetyt mallit — Vaaralliset komennot (sudo, rm -rf /) estetty oletuksena
  • Työhakemiston raja — Agentti ei voi poistua määrätystä hakemistostaan
  • Arkaluonteiset tiedostot suojattu.env, .git, *.key, *.pem estetty agentin pääsyltä
  • Automaattinen versiointi — Kaikki työtilan muutokset seurataan gitillä helppoa palautusta varten