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 hakemistossadata/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_jobluo 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 jatype/schedule-yhdistelmät ennen kuin ne saavuttavat laitteen - Tyypitetyt kirjoittajat mukautusta varten —
create_user_skilljacreate_custom_toolrakentavat 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 tarvittaessaload_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: truepyydetää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.
/dashboardja/api/jobsovat tarkoituksellisesti todentamattomia — rajoita pääsyä verkkokerroksessa (Tailscale-ACL, palomuuri, käänteinen välityspalvelin perustodennuksella) tai asetaDASHBOARD=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-asetus | URL |
|---|---|
| Server URL | https://your-host |
| Health Check URL | https://your-host/health |
| Polling URL | https://your-host/jobs |
Miten se toimii#
- Lähetät viestin PocketHookissa
- Palvelin välittää sen valitsemallesi LLM:lle keskusteluhistorian, muistettujen muistojen ja käytettävissä olevien työkalujen kanssa
- LLM käsittelee viestin — se voi suorittaa komentorivikomentoja, lukea/kirjoittaa tiedostoja, hakea verkosta, aikatauluttaa taustatöitä, muistaa faktoja tai käynnistää kehityspalvelimia
- Vastaus palautetaan PocketHook-muodossa (
msg+shortcut+data+url) - PocketHook näyttää viestin ja suorittaa mahdolliset Oikopolut laitteellasi
Tuetut LLM-palveluntarjoajat#
| Palveluntarjoaja | Todennus | Oletusmalli |
|---|---|---|
| Anthropic | API-avain | claude-sonnet-4-20250514 |
| OpenAI | API-avain | gpt-4.1-mini |
| OpenAI Codex | OAuth | gpt-5.1-codex-mini |
| GitHub Copilot | OAuth | claude-sonnet-4 |
| Google (Gemini) | API-avain | gemini-2.5-flash |
| Mistral | API-avain | mistral-medium-latest |
| Groq | API-avain | llama-3.3-70b-versatile |
| xAI (Grok) | API-avain | grok-3-mini-fast |
| OpenRouter | API-avain | anthropic/claude-sonnet-4 |
| Ollama (paikallinen) | Ei mitään | llama3.2 |
| LM Studio (paikallinen) | Ei mitään | qwen3.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_HISTORYviestiä 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_RECALLohjaa, 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)javalid_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:
- Arkistoi projektin vektorit (events, decisions, requests, jotka liittyvät Barcelonaan).
- Mitätöi kaikki aktiiviset tietokaaviokolmikot, joiden predikaatti vastaa projektin slugia (
scheduled_visit_barcelona,planning_visit_barcelona,confirmed_visit_barcelona). - 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ä | Pakollinen | Kuvaus |
|---|---|---|
title | Kyllä | Luettava nimi |
description | Kyllä | Yksi lause, jota käytetään agentille näytettävässä taitojen indeksissä |
shortcuts | Kyllä | Taulukko tiedostossa määritellyistä oikopolkujen nimistä. Käytä [] pelkkiä käyttäytymissääntöjä sisältäville taidoille |
target | Ei | Missä oikopolut suoritetaan: device (oletus, lähetetään iOS-laitteelle) tai mac (ajetaan palvelimella) |
sync_app | Ei | Sovellus, 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:
- Agentti päättää, että oikopolku tulee ajaa (esim. “luo muistiinpano tämän päivän kokousmuistiinpanoilla”)
- Palvelin kutsuu
shortcuts run "oikopolunNimi"ja välittää datan JSON-muodossa stdin:in kautta, käyttäen samaa wrapper-muotoa kuin PocketHook iOS - Jos
sync_appon asetettu, palvelin avaa kyseisen sovelluksen hetkeksi taustalla (open -gj -a Notes) pakottaakseen iCloud-synkronoinnin ja sulkee sen 5 sekunnin kuluttua - 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 runon 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ä
/dashboardettä/api/jobsovat avoimiaGET-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 asetaDASHBOARD=false, jos et tarvitse sitä. PocketHookin iOS-sovellus ei käytä näitä päätepisteitä.
Se on täysin muokattavissa:
- Pikamuokkaus — Sijoita
dashboard.htmlkansioonworkspace/dashboard/yksinkertaisiin mukautuksiin - Täysi projekti — Luo kehysprojekti (Svelte, React, Vue jne.) kansioon
workspace/dashboard/build-tulosteella kansioondist/
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:
- Asentaa riippuvuuden
- Luo työkalumäärittelyn (yksinkertainen
.md-tiedosto) - 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 HEADmanuaalisesti - Asetustiedostot —
config/agent-instructions.md,config/personality.md,skills/japermissions.jsonvarmuuskopioidaan 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 kansioondata/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 muuttaa | Mihin se kuuluu | Esimerkki |
|---|---|---|
| Oikopolku- tai käyttäytymistaito | data/user/skills/<nimi>.md | “Luo taito treenieni kirjaamiseen” |
| Agentin kyvyksi paketoitu CLI-työkalu | data/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 oletusarvo | data/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 permissionshallitaksesi mitä työkaluja agentti voi käyttää - Sisäänrakennettujen työkalujen lisääminen — Toteuta uusia työkalufunktioita tiedostossa
src/tools.tssyvemmille integraatioille (vaatii palvelimen forkin)
Asetukset#
Kaikki asetukset tallennetaan .env-tiedostoon (luodaan komennolla bun run setup). Tärkeimmät asetukset:
| Muuttuja | Oletus | Kuvaus |
|---|---|---|
AUTH_TOKEN | (pakollinen) | Jaettu salaisuus PocketHookin kanssa |
LLM_API_KEY | (pakollinen) | LLM-palveluntarjoajan API-avain |
LLM_PROVIDER | anthropic | Palveluntarjoajan nimi |
LLM_MODEL | claude-sonnet-4-20250514 | Mallin ID |
LLM_REASONING | off | Reasoning-taso: off, minimal, low, medium, high, xhigh. Korkeammat tasot lisäävät piilotettuja thinking-tokeneita (hitaampi + kalliimpi). Sivuutetaan malleilla, jotka eivät tue sitä |
PORT | 3000 | Palvelimen portti |
AGENT_NAME | PocketHook Assistant | Agentin näyttönimi |
MAX_HISTORY | 50 | Viestejä lyhytaikaisessa muistissa |
MAX_RECALL | 5 | Vuorolla palautettavat muistot semanttisella palautuksella (vain kun VECTOR_MEMORY=true) |
SESSION_TTL_MINUTES | 60 | Istunnon vanheneminen |
VECTOR_MEMORY | false | Ota semanttinen muisti käyttöön (vaatii upotuspalveluntarjoajan) |
EMBEDDING_PROVIDER | ollama | Upotuspalveluntarjoaja: ollama, lm-studio tai openai |
EMBEDDING_MODEL | nomic-embed-text | Upotusmallin nimi |
EMBEDDING_URL | (automaattinen) | Upotus-API:n URL |
EMBEDDING_API_KEY | — | API-avain OpenAI-upotuksille |
LOG_LEVEL | info | Lokitustaso: debug, info, warn, error |
RATE_LIMIT_MAX | 30 | Maksimipyynnöt per aikaikkuna |
DASHBOARD | true | Ota 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
| Alusta | Taustajärjestelmä | Palvelun sijainti |
|---|---|---|
| macOS | launchd | ~/Library/LaunchAgents/com.pockethook.${INSTANCE_NAME}.plist |
| Linux | systemd (user) | ~/.config/systemd/user/pockethook-${INSTANCE_NAME}.service |
| Windows | NSSM | PocketHook-${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,*.pemestetty agentin pääsyltä - Automaattinen versiointi — Kaikki työtilan muutokset seurataan gitillä helppoa palautusta varten