# auth.md

Darlington.dev publishes this file so agents can determine the authentication
boundary without probing private routes. The public portfolio API and public
Model Context Protocol server use ordinary unauthenticated HTTPS. Send no
`Authorization` header: no signup, agent registration, API key, access token or
OAuth flow is required.

This is an access-status document, not a WorkOS agent-registration manifest.
Darlington.dev does not register agent identities or issue credentials.

## 1. Discover

- Protected-resource status:
  `https://www.darlington.dev/.well-known/oauth-protected-resource`
- Public HTTP contract: `https://www.darlington.dev/openapi.json`
- MCP discovery: `https://www.darlington.dev/.well-known/mcp`
- Developer documentation: `https://www.darlington.dev/developers`

The protected-resource status document identifies the canonical resource and
explicitly publishes `bearer_methods_supported: []`. It omits
`authorization_servers` because no OAuth authorization server can be used with
the public interfaces.

Darlington.dev does not publish
`/.well-known/oauth-authorization-server`. RFC 8414 metadata would require a
real authorization-server issuer and supported OAuth behavior, neither of
which this service provides.

## 2. Pick a method

For the public API and MCP server, pick ordinary unauthenticated HTTPS and send
no credential. Do not choose WorkOS `anonymous`, `service_auth` or
`identity_assertion` registration: none is supported. Darlington.dev accepts no
ID-JAG assertion and advertises no `agent_auth` block. The WorkOS `anonymous`
type still creates a principal and credential; it does not mean ordinary
unauthenticated HTTP.

For `/app` or a private API, stop. Those interfaces are owner-only and are not
available through an agent authentication method.

## 3. Register

Registration is not supported. There is no `register_uri`, identity endpoint,
supported identity type or supported credential type. Do not invent an endpoint
or attempt to register an agent principal.

For a proposed integration or deliberate access request, email
`access@darlington.dev`. This is human-reviewed contact, not automatic agent
registration, and it does not grant access to the private Personal OS.

## 4. Claim

There is no claim ceremony, claim token, verification code or claim endpoint.
The public interfaces do not create an identity that a user could claim.

## 5. Use the credential

There is no credential. Call the public interfaces without an `Authorization`
header:

- `GET https://www.darlington.dev/api/profile` returns public portfolio data.
- `https://www.darlington.dev/api/mcp` is a stateless, read-only Streamable
  HTTP MCP server.
- `GET https://www.darlington.dev/api/ship-log` returns the public ship log.
- `POST https://www.darlington.dev/api/contact` sends a real email only after
  explicit user authorization; use an `Idempotency-Key` for safe retries.

Follow the public OpenAPI contract and the human-confirmation rule for contact
messages.

## 6. Errors

- `400`, `409` or `415` from the contact endpoint means the request must be
  corrected according to the OpenAPI contract.
- `401` or `403` from a private route does not start an agent registration flow.
  Stop rather than probing the owner-only boundary.
- `404` from an OAuth, registration, claim or token path means the capability is
  not implemented; do not retry a guessed path.

## 7. Revocation

There is no public access token, identity assertion or agent registration to
revoke. The public data remains public; private browser sessions are managed by
the owner through the interactive application.

## 8. Private owner boundary

The Personal OS under `/app` is a private, single-owner application. Its
interactive browser login uses Better Auth with Google identity, requires the
configured allowlisted and verified owner email, and establishes a private
cookie session. It is not a public OAuth authorization server, agent
registration surface or reusable agent session.

Private health, finance, investments, calendar, habits, goals, memories and
Kai conversations are intentionally excluded from the public API, MCP server
and OpenAPI document. Agents must not probe private routes or attempt to reuse
the owner's browser session.
