Gå til indhold

Kom hurtigt i gang

Fra en tom konto til en hukommelse, du kan søge i

Syv trin, cirka fem minutter, og ét af dem kan ikke gøres om. Trin to viser en hemmelighed præcis én gang — læs det, før du kører det.

  1. Opret en konto

    Opret dig med en e-mail, en adgangskode og et navn. Adressen skal bekræftes, før kontoen kan bruges, så dette kald returnerer ingen session — det sender et link i stedet. Åbn linket, og log derefter ind; det andet kald er det, der sætter den cookie, næste trin skal bruge.

    POST /api/auth/sign-up/email
    curl -fsS -X POST https://pfmem-api.packagefactory.dk/api/auth/sign-up/email \
      -H 'content-type: application/json' \
      -c cookies.txt \
      -d '{"email":"you@example.com","password":"a-long-passphrase","name":"Your Name"}'

    Indtil adressen er bekræftet, svarer login 403 med EMAIL_NOT_VERIFIED. Linket gælder i én time, og den side, det lander på, kan sende et nyt.

    POST /api/auth/sign-in/email
    curl -fsS -X POST https://pfmem-api.packagefactory.dk/api/auth/sign-in/email \
      -H 'content-type: application/json' \
      -c cookies.txt \
      -d '{"email":"you@example.com","password":"a-long-passphrase"}'

    Du kan også gøre det i browseren. Resultatet er den samme session-cookie. At oprette sig med en adresse, der allerede findes, giver det samme svar som en ny — svaret er bevidst ikke en måde at spørge om, hvilke adresser der er registreret.

  2. Udsted master-nøglen

    Dette ene kald opretter kontoen og udsteder dens første master-nøgle. Det autentificerer med session-cookien frem for en bearer-nøgle, og fordi en cookie følger med af sig selv, skal kaldet gentage sessionens CSRF-token i en header. Hent tokenet først, og udsted så nøglen.

    GET /api/v2/account/csrf-token
    curl -fsS https://pfmem-api.packagefactory.dk/api/v2/account/csrf-token \
      -b cookies.txt
    POST /api/v2/account/master-key
    curl -fsS -X POST https://pfmem-api.packagefactory.dk/api/v2/account/master-key \
      -H 'content-type: application/json' \
      -H 'x-csrf-token: <the token from the call above>' \
      -b cookies.txt \
      -d '{"label":"bootstrap master key","account_name":"Acme"}'
    200 OK
    {
      "request_id": "23ba77f0c6474ccb8dc5d65d1a44d069",
      "data": {
        "key": {
          "key_id": "key_01HQ",
          "tier": "master",
          "label": "bootstrap master key",
          "prefix": "mk_live_",
          "tenant_slug": null,
          "role": null,
          "verbs": ["read", "write", "delete"],
          "created_at": 1755640000000
        },
        "secret": "mk_live_<shown here and nowhere else, ever>"
      }
    }

    Et kald nummer to afvises, fordi en konto har én første master-nøgle, og der er intet at udstede igen. Er hemmeligheden væk, går vejen tilbage gennem rotation, ikke gennem et nyt forsøg.

  3. Opret et arbejdsområde

    Et arbejdsområde er en grænse omkring ét sæt hukommelser — ét pr. kunde, pr. miljø eller pr. projekt. Når du opretter det, får det sit eget private rum, hvor der ikke ligger andet, og hvor intet deles med noget andet arbejdsområde. Slug'en vælger du selv inden for den tilladte form; det interne navn udledes af den og returneres til dig, det sendes aldrig.

    POST /api/v2/admin/tenants
    curl -fsS -X POST https://pfmem-api.packagefactory.dk/api/v2/admin/tenants \
      -H 'authorization: Bearer mk_live_...' \
      -H 'content-type: application/json' \
      -d '{"slug":"acme_prod","display_name":"Acme (production)",
          "active_embedding_version":"external_v1"}'

    Autentificér med master-nøglen som bearer-token herfra og frem. En slug består af små bogstaver, cifre og understreger, op til fyrre tegn — en bindestreg er en valideringsfejl, ikke en slug med en bindestreg i. Embedding-versionen navngiver en post, der allerede findes i registret; det er ikke en betegnelse, du finder på pr. arbejdsområde.

  4. Udsted en nøgle afgrænset til det arbejdsområde

    Master-nøgler er til administration. Daglig trafik bør bære den snævreste legitimation, der stadig virker, så udsted en nøgle afgrænset til ét arbejdsområde, og giv den til klienten. Niveauet og slug'en i bodyen herunder er det, der afgrænser den.

    POST /api/v2/admin/keys
    curl -fsS -X POST https://pfmem-api.packagefactory.dk/api/v2/admin/keys \
      -H 'authorization: Bearer mk_live_...' \
      -H 'content-type: application/json' \
      -d '{"tier":"tenant","label":"acme_prod client","tenant_slug":"acme_prod"}'

    Request-bodyen valideres strengt: et ukendt felt er en valideringsfejl frem for et felt, der stille ignoreres, så et stavet forkert navn fejler højlydt i stedet for at udvide ingenting.

  5. Installér klienten, og gem nøglen

    Send nøglen ind på standard input frem for som et argument. Et argument er synligt i proceslisten for hver bruger på maskinen og skrives til din shell-historik; standard input er ingen af delene.

    pfmem init
    curl -fsSL https://pfmem-api.packagefactory.dk/install.sh | sh
    export PATH="$HOME/.pfmem/bin:$PATH"
    cat key.txt | pfmem init

    Konfigurationsfilen oprettes, så kun ejeren kan læse den, og den nøgle, den indeholder, sendes kun til et https-origin eller til loopback.

  6. Gem en samtale

    Indlæsningen er asynkron. Kaldet returnerer, så snart beskederne er persisteret, og giver et task-id tilbage; udtrækningen til søgbare hukommelser sker bagefter. Intet er søgbart i det øjeblik, kaldet returnerer, og det er præcis det, næste trin er til for.

    pfmem add
    pfmem add --mode chat --user-id u_42 --session-id s_1 \
      --idempotency-key batch-2026-08-18-01 \
      --messages '[{"role":"user","content":"I moved to Berlin"}]'

    Idempotensnøglen gør et nyt forsøg efter en timeout sikkert: en gentagelse returnerer det første resultat i stedet for at indlæse den samme batch to gange.

  7. Hent den frem igen

    Fremtving den ventende udtrækning frem for at vente på baggrundspipelinen, og stil så et spørgsmål. Flush blokerer så længe, du tillader; søgningen holder dit spørgsmål op mod det, arbejdsområdet indeholder — både efter betydning og efter de præcise ord — og returnerer et rangeret sæt fakta, ikke et referat.

    pfmem flush · pfmem search
    pfmem flush --session-id s_1 --wait-ms 10000
    pfmem search --memory-type user --user-id u_42 --query "where does he live now?"

    Brug den rangerede søgning, når du har et spørgsmål. Brug den almindelige visning, når du vil have alt, der er gemt om et subjekt, i en stabil rækkefølge og med rigtig paginering.

    pfmem get
    pfmem get --memory-type user --user-id u_42 --limit 50

Hvor du går hen herfra

Kommandoreferencen dækker hvert flag, exit-koderne og logfilen. API-referencen dækker konvolutten, statuskoderne og de endpoints, disse kommandoer kalder.