SiteKit

Onboarding a Site

Record freely, provide intent, review the adapter, then generate packages.

The default onboarding flow is freeform. Scenarios are useful, but optional.

The default discovery mode is human-guided. SiteKit records what happens while you click through the site capabilities you want to expose.

sitekit onboard kitman \
  --url https://springfieldsyc.injuryprofiler.com \
  --goal "Expose official roster, team schedule, league schedule, and match report operations."

Onboarding requires an LLM provider because analysis and review are model-assisted. Configure one before the first analyze run:

sitekit config set llm.provider openai
sitekit config set llm.model gpt-5
sitekit config set llm.apiKey.env OPENAI_API_KEY

SiteKit opens an isolated browser profile. Log in normally, then spend ten minutes exercising the site capabilities you want to expose. Open roster pages. Filter schedules. Edit a safe draft. Visit screens that reveal IDs, field lists, report details, pagination, and search behavior.

Autonomous Mode

For unfamiliar sites, SiteKit can let an LLM explore the site in a controlled browser session:

sitekit onboard playmetrics \
  --url https://app.playmetrics.com \
  --goal "Find roster, calendar, fees, fields, and parent notification settings." \
  --mode autonomous

Autonomous mode uses the same capture pipeline, but the browser actions come from an LLM agent with time, scope, and write-safety limits. The resulting adapter still goes through review, tests, and deterministic generation.

What SiteKit Records

  • Network requests and responses from Chrome DevTools Protocol.
  • Page titles and URLs so requests can be tied to screens.
  • Request bodies, response shapes, GraphQL operation names, and headers.
  • Cookie metadata needed to understand auth, without committing raw secrets.
  • User notes, if supplied during recording.
  • JavaScript bundle references when available, so endpoints can be found before every UI path is clicked.
sitekit note "Opening the official roster"
sitekit note "Editing a game, but not saving"
sitekit note "This field lookup powers venue mapping"

Optional Scenarios

Scenarios organize recordings and make repairs easier later.

sitekit record kitman --scenario roster
sitekit record kitman --scenario league-schedule
sitekit record kitman --scenario match-report

For the first adapter, a messy full-session capture is fine. SiteKit can split the capture into candidate operations during analysis.

Analyze

sitekit analyze kitman

The analyzer creates a draft adapter:

adapters/kitman/
  adapter.yaml
  discovery.md
  questions.md
  fixtures/redacted/
  schemas/
  tests/

The deterministic pass clusters routes, normalizes IDs, detects pagination, extracts JSON and GraphQL schemas, and identifies likely auth strategy.

It can also detect when an operation should not be HTTP-backed. If useful work only happens inside frontend JavaScript or UI state, SiteKit can propose a browser-backed or hybrid operation instead of forcing a fragile internal API.

The LLM pass proposes meanings:

  • Which calls matter for the stated goal.
  • Which routes are noise.
  • Which endpoints should become domain operations.
  • Which fields need human review.
  • Which tests should prove the adapter is not merely plausible.

Coverage

Discovery should report what it saw and what it missed:

Coverage
  observed API routes: 23
  candidate operations: 11
  auth strategies: 2
  forms observed but not submitted: 3
  GraphQL operations found in bundles: 18
  endpoints found in bundles but not exercised: 5

Coverage is not a proof that every useful operation was found. It is a review tool that helps decide whether to record another pass, run autonomous discovery, or accept a focused adapter.

Review

sitekit review kitman

Review is an interview informed by the capture:

I saw POST /planning_hub/events/search with supervisor_view=true.
Should this become listLeagueFixtures()?

I saw /settings/set_squad/:id before schedule reads.
Does this set server-side session scope?

I saw duration=90 for U14 and U15 games.
Should match length come from a local rule instead of the feed?

Confirmed answers are written back into adapter.yaml as durable adapter facts, not loose chat history.

Generate

sitekit test kitman --fixtures
sitekit test kitman --live
sitekit generate kitman --target typescript --target python

Generation is deterministic. If the adapter spec is unchanged, generated client code should be unchanged.

On this page