APC Agent Profile Context
Draft — not in force

This page is a draft. No lawyer has read it and the owner has not approved it for publication, so nothing written here is in force and the wording may still change.

Privacy Policy — APC (Agent Profile Context)

Effective date
{{EFFECTIVE_DATE}}
Service
APC, at https://apc.abt.nz
Sign-in
handled by our own identity service at https://idp.abt.nz
Data controller
Andrei Shvechkov, an individual in New Zealand. APC is a project called ABT; ABT is not a company, and the controller is the named person
Contact
apc@abt.nz. A postal address is given on request to that address
Governing law
New Zealand

1. What this service is, in one paragraph

APC stores a small profile about you — a set of short statements such as what you do, how you prefer to work, what you are currently building — so that the AI agents you use can read it instead of asking you the same questions in every new conversation. Your agent connects to APC over the Model Context Protocol at a URL that identifies your profile. You sign in with your Google account; the sign-in itself is handled by our identity service at https://idp.abt.nz, which is part of the same service and run by the same operator as https://apc.abt.nz.

This policy covers both of those hosts.


2. Read this first: your profile is written by AI agents, not only by you

This is the most important thing to understand about APC, and it is unusual enough that we put it before the data inventory.

We do not filter what agents write for accuracy. APC checks the shape of a statement — its length, that it contains no URL, no markup, no invisible or look-alike characters, no instruction-like phrasing — and nothing about whether it is true, fair, or about you at all.


3. What we collect

3.1 From Google, when you sign in

Sign-in requests two non-sensitive Google scopes, profile and email. From the response we receive and store, in our identity service:

We do not receive your Google password, your contacts, your mail, your files, your calendar, or anything else. Our identity software also sends one request to Google's People API for a phone number; because we do not request the corresponding permission, Google refuses it and no phone number is collected.

3.2 Your identity inside APC itself

The APC service proper stores exactly one thing about who you are: the pair (identity provider, subject identifier) — that is, "this profile belongs to subject <opaque id> at https://idp.abt.nz". There is no column for your name, your email or your IP address anywhere in the APC database.

When you sign in through a browser — to claim a profile, or to open your connection page — a short-lived row is written for that sign-in. It holds the same pair once the sign-in has succeeded, plus digests of the values we minted for it (the session cookie, the state, the nonce, the form token) and, for the few minutes between the redirect and your return, the PKCE verifier in the clear. These rows expire after 15 minutes and are deleted by the maintenance pass. They contain no name, no email address and no IP address either.

3.3 Your profile content

3.4 Agent access

For each agent connected to your profile: a label (chosen by you, or by whoever issued its pairing code, or set to self-admitted when the agent was admitted by simply arriving), the agent's subject and OAuth client identifier, the permissions it holds, the moment you allowed it to write if you did, and the times it was created, last used and revoked. Also a hash of any pairing code that has been issued.

3.5 The two journals and the usage counters

3.6 IP addresses

We want to be precise here, because it is easy to overstate.

3.7 Records held by our identity service

Our identity service (Casdoor, at https://idp.abt.nz) keeps its own records, separate from APC's database:

None of these identity-service records currently has any retention limit, and none of them is removed when an APC profile is deleted. We consider the verbatim audit log a defect rather than a design choice; see section 9.

3.8 What your agent's token contains

The token our identity service issues to your agent is a signed JWT that carries, among other claims, your email address, display name and avatar URL. APC itself ignores those claims and stores none of them — it reads only the issuer, subject, client, token id, audience, expiry and permissions. But the token is handed to your agent, which means the provider of any agent you connect receives your email address. We cannot prevent this and we do not control what that provider does with it.


4. Why we process this, and on what basis

PurposeDataBasis
Let you sign in and prove a profile is yoursGoogle account id, email, display namePerformance of the service you asked for
Store and serve your profile to your agentsFacts, tags, links, sectionsPerformance of the service you asked for
Let you see and undo what agents recordedWrite journal, authorship recorded on each statementLegitimate interest in your own oversight of the service
Let you see who read your profileRead journal, daily countersLegitimate interest in your own oversight of the service
Keep the service running and resist abuseIP addresses, rate counters, server logsLegitimate interest in security and availability
Issue TLS certificatesDomain names, server IP, ACME contact addressNecessary to serve the site over HTTPS

Where New Zealand requires consent rather than these bases, your consent is given by signing in and by choosing to connect an agent, and can be withdrawn as described in section 7.

We do not sell your data. We do not use it for advertising. We do not profile you for any purpose other than serving your own profile back to your own agents. Nothing stored here is used to train any model by us.


5. How long we keep it

These are the periods actually implemented in the running code, not aspirations.

DataKept for
Unclaimed draft profile7 days, then deleted
Claimed profile with no activityNot deleted. A profile that has an owner is never removed for inactivity — we have no way to warn you first, and deleting your data silently is not something we are willing to do. It goes when you ask us to delete it
Active factsAs long as the profile exists — except statements in the current section, which must carry an expiry date and get one 90 days ahead if none was given. Once that date passes the statement stops being returned to any agent, though the row stays in the database until the profile is deleted
Superseded (replaced) facts90 days — except the most recent statement in each section, which is never removed by this rule, and except while the write that replaced it can still be undone
Write journal90 days — except entries a still-available undo needs
The ability to undo a write30 days from the write
Access journal90 days
Daily usage countersUntil the profile is deleted — deliberately not pruned
Agent grantsIndefinitely. After 180 days unused, a grant is revoked, but the row (with the agent's identifiers) remains
Pairing codesUntil redeemed or expired, then deleted
Browser sign-in rows15 minutes, then deleted by the maintenance pass
Account link (identity provider + subject)Indefinitely. There is currently no code path that deletes it — see section 9
Server access logs (with IP)Until rotated out by size (10 MB × 3 files). No time limit
Identity-service records (account, tokens, audit log, sessions)Indefinitely. No retention is configured

6. Who else sees this data

We do not otherwise disclose your data, except where we are legally required to.


7. Your rights, and how you can actually exercise them today

We list what the software does today, not what it should do. Where there is no self-service route, the honest answer is "write to us".

RightAvailable today?
See your profileYes — through your agent: apc_get_manifest, apc_get_facts, apc_search_facts
Create a profile without our involvementYes. An agent creates an empty draft and hands you a claim link; you open it in your browser, press the button, sign in with Google through our identity service, and the profile is bound to the account you signed in as. No command and no operator is involved. An unclaimed draft is deleted after 7 days
See which agents are connected, and allow one to writeYes. Sign in at https://apc.abt.nz/connect/<your profile id>. The page lists every agent connected to your profile — its identifier, when it connected, when it was last used, whether it admitted itself by arriving, and whether it may write — and lets you allow one of them to write
See what an agent wrote, and whyOnly if an agent holds an extra permission. apc_get_write_log covers the last 90 days: which statement, which agent, when, the reason it gave, and whether it has been undone. It requires profile:approve — see the row below. Without it, the only signal you get is the count of unreviewed writes in apc_get_manifest
Undo what an agent wroteYes, for 30 days, with the same extra permission. apc_roll_back_writes retires the statement the write added and restores what it replaced. An agent may only undo writes that agents made: your own statements, and anything in the constraints section, are refused. Beyond 30 days, or for a write you made yourself, write to apc@abt.nz
See who read itOnly if an agent holds an extra permission. apc_get_journal covers the last 90 days. It records reads only; writes are the separate journal above
Obtain that extra permission (profile:approve)No self-service route. It is never granted by default, never in bulk, and never by an agent connecting. The first one is a pairing code minted at our server's console with an explicit flag — ask apc@abt.nz. An agent that already holds it can issue codes for further agents, but those codes carry reading and writing only, never this
See your limits and usageYes — apc_get_limits
Add a statement yourselfYes, through an agent you have allowed to write — you tell it, and it writes the statement immediately. Adding one directly, without an agent in between, is still an operator command on the server: write to apc@abt.nz
Correct or delete a single statementNo route deletes one outright. What exists: a newer statement can supersede an old one (an agent may do this only to statements agents wrote), and a write can be undone for 30 days, which retires what it added. In both cases the retired text stays in the database for a further 90 days, and the most recent statement in each section is never removed by that rule. To have one removed sooner, write to apc@abt.nz
Revoke an agent's accessNo self-service route. The connection page lets you grant, not take away; revoking is an operator command. Write to apc@abt.nz with the agent's identifier from that page. It takes effect on that agent's very next request, and a revoked agent is never re-admitted by simply connecting again. A grant unused for 180 days is revoked automatically
Export your profileNo self-service route. An export command exists, but only on the server. Write to apc@abt.nz
Delete your profileNo self-service route. Write to apc@abt.nz. Please read the limitation below before relying on this
Delete your identity-service account (email, avatar, sign-in IPs, stored Google token, audit records)No route implemented. Write to apc@abt.nz and we will remove what we can by hand
Withdraw Google accessYes, but outside this service — in your Google account's security settings. This does not affect data already stored here

Limitation of profile deletion, stated plainly. Deleting a profile removes the profile row and, by database cascade, its facts, tags, links, supersession history, write journal, agent grants, read journal entries and usage counters. It does not remove: the account link recording that this identity provider subject used the service; anything held by our identity service (your email address, avatar link, registration and sign-in IP addresses, the stored Google token, issued tokens, audit records, sessions); or the server access logs containing your IP address and your profile identifier. If you ask us to erase your data, tell us so explicitly and we will remove those by hand as far as we are able — but the software does not do it for us today.

We aim to answer requests within 30 days.


8. Security — what is actually in place


9. Known gaps we are not hiding

We would rather write these down than let you assume they do not exist.

  1. Erasure is incomplete in code. As described in section 7, deleting a profile leaves the account link, the identity-service records and the server logs untouched.
  2. Our identity service's audit log records request bodies verbatim, including the OAuth authorization code and PKCE verifier — and any local password, unmasked, if one is ever set. It has no retention limit. Only the operator can read this log, but that does not make it right, and reducing it is on our list.
  3. Access logs hold IP addresses with no time limit — only size-based rotation.
  4. Tokens issued to your agent contain your email address, and we cannot strip it.
  5. No interface deletes an individual statement. A statement can be superseded, and a write can be undone for 30 days; neither removes the old text, which stays for a further 90 days.
  6. APC does not detect personal data about other people in what an agent writes. Our rules forbid storing information about third parties in a profile, but that is an obligation on you and your agents, not a control the software enforces — it checks only the shape of the text.
  7. Reading access is granted without asking you. Any client authorised for your profile's address at our identity service is admitted to read the profile on its first request. What protects you there is that the authorisation happened at all — it is a deliberate act you performed at the sign-in page — and not a second check by us. See section 2.
  8. Every agent you connect sees the whole profile. There are no per-agent visibility levels and no way to hide part of a profile from one agent and not another.
  9. An agent holding profile:approve can undo writes another agent made, not only its own, and undo them without asking you. That is deliberate — it is how you deal with an agent you no longer recognise — but it means that permission is the one to be careful with.
  10. Both journals and the undo are out of reach with the permissions an agent gets by default. All three need profile:approve, which today is issued only at the server console.
  11. There are no backups. No archive of your profile exists anywhere. See section 8.

10. Children

APC is not intended for anyone under 16, and we do not knowingly collect data from children. Sign-in requires a Google account. If you believe a child's data is held here, write to apc@abt.nz and we will delete it.


11. International transfers

Our server stands in the Netherlands, in a data centre run by a third-party hosting provider we do not name on this page. Signing in involves Google LLC, and certificate issuance involves Let's Encrypt (ISRG), both in the United States; the Casdoor content delivery network and the providers of the agents you connect may be anywhere. By using the service you accept that your data is processed in those places. Where New Zealand requires a specific transfer mechanism, Andrei Shvechkov, as the controller, is responsible for putting it in place.


12. Changes to this policy

If we change how we handle your data, we will update this page and change the effective date at the top. For a change that materially expands what we collect or who receives it, we will also place a notice on https://apc.abt.nz/. Because the service has no email channel to you by design — APC sends no email, no messages and no webhooks — this page is the only place changes are announced. Please check it if this matters to you.


13. Contact

Questions, access requests, corrections and deletion requests: apc@abt.nz.

Controller: Andrei Shvechkov — an individual in New Zealand, reachable at the address above; a postal address is given on request. If you are unhappy with our response and New Zealand gives you the right to complain to a supervisory authority, you may do so.

A Russian translation of this policy is available at https://apc.abt.nz/ru/privacy. If the two versions differ, this English version governs.