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_KEYSiteKit 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 autonomousAutonomous 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-reportFor the first adapter, a messy full-session capture is fine. SiteKit can split the capture into candidate operations during analysis.
Analyze
sitekit analyze kitmanThe 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: 5Coverage 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 kitmanReview 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 pythonGeneration is deterministic. If the adapter spec is unchanged, generated client code should be unchanged.