Models: I
IdentityProviderCollectionPage
Section titled “IdentityProviderCollectionPage”data: list[Annotated[kindgi.client.OidcIdentityProviderConfig | kindgi.client.SamlIdentityProviderConfig | kindgi.client.IdentityProviderConfigUnrecognized, <kindgi.client._open.OpenUnion object at 0x107b5b210>]]has_more: bool | None(hasMoreon the wire) (optional)changes: Optional[Annotated[Union[Literal['tenant', 'operator'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](optional)
IdentityProviderConfigUnrecognized
Section titled “IdentityProviderConfigUnrecognized”A kind this client doesn't know yet, from a newer runtime: the object as it came, every field kept.
kind: str
IdentityProviderSignIn1
Section titled “IdentityProviderSignIn1”What to give the identity provider so it can send people back: set by the deployment on what it returns, ignored on registration. OIDC: redirectUri. SAML: spEntityId, acsUrl, spMetadataUrl.
redirect_uri: AnyUrl(redirectUrion the wire)
IdentityProviderSignIn2
Section titled “IdentityProviderSignIn2”What to give the identity provider so it can send people back: set by the deployment on what it returns, ignored on registration. OIDC: redirectUri. SAML: spEntityId, acsUrl, spMetadataUrl.
sp_entity_id: str(spEntityIdon the wire)acs_url: AnyUrl(acsUrlon the wire)sp_metadata_url: AnyUrl(spMetadataUrlon the wire)
IdentityProviderSignInUrls
Section titled “IdentityProviderSignInUrls”What to give the identity provider so it can send people back, for a provider under this providerId: the same before it's registered, after, and after an unregister and a new registration, so the identity provider's side can be set up first. Not secrets: they're in every sign-in's browser redirects.
provider_id: str(providerIdon the wire)kind: Union[Literal['oidc', 'saml'], str]sign_in: kindgi.client.IdentityProviderSignIn1 | kindgi.client.IdentityProviderSignIn2(signInon the wire)registered: bool
IdentitySessionCollectionPage
Section titled “IdentitySessionCollectionPage”data: list[kindgi.client.IdentitySessionSummary]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
IdentitySessionSummary
Section titled “IdentitySessionSummary”Wire-safe subset of a session. Excludes provider access-token / refresh-token — those never cross the wire, even to admins.
session_id: str(sessionIdon the wire)user_id: str(userIdon the wire)provider_id: str(providerIdon the wire)created_at: AwareDatetime(createdAton the wire)expires_at: AwareDatetime(expiresAton the wire)scopes: list[str]revoked_at: AwareDatetime | None(revokedAton the wire) (optional)
IdpCertificate
Section titled “IdpCertificate”root: str
ImproveBody
Section titled “ImproveBody”Start an improvement pass.
agent_id: str(agentIdon the wire)from_version: str | None(fromVersionon the wire) (optional)scope: kindgi.client.LiveScopeTenant | kindgi.client.LiveScopeOrg | kindgi.client.LiveScopeProject | kindgi.client.LiveScopeSegment | kindgi.client.LiveScopeUnrecognizedsuite_id: str(suiteIdon the wire)tiers: list[Literal['settings', 'prompt']] | None(optional)model: kindgi.client.Model2 | None(optional)candidates: int | None(optional)class_weights: Optional[Literal['as-recorded', 'restricted-only']](classWeightson the wire) (optional)objective: Optional[Literal['weightedYesShare', 'weightedPrecisionAtK']](optional)budget: kindgi.client.Budget2 | None(optional)
ImproveScheduleInput
Section titled “ImproveScheduleInput”An improve schedule's config.input. Each fire counts the trusted "no" judgments (recorded under a restricted judge class) on the agent's runs in the scope since its last pass. When there are enough, across enough runs and judges, it starts a pass on a fresh test set of those runs; otherwise the fire is skipped, saying which count was short. A pass that proposes asks for the review at once.
tiers: list[Literal['settings', 'prompt']] | None(optional)objective: Optional[Literal['weightedYesShare', 'weightedPrecisionAtK']](optional)class_weights: Optional[Literal['as-recorded', 'restricted-only']](classWeightson the wire) (optional)model: kindgi.client.Model4 | None(optional)candidates: int | None(optional)budget: kindgi.client.Budget3 | None(optional)threshold: kindgi.client.Threshold | None(optional)monthly_cap_usd: float | None(monthlyCapUsdon the wire) (optional)
ImproveScheduleTarget
Section titled “ImproveScheduleTarget”What an improve schedule works on: the agent, and the live scope its passes propose for and count judgments in.
agent_id: str(agentIdon the wire)scope: kindgi.client.LiveScopeTenant | kindgi.client.LiveScopeOrg | kindgi.client.LiveScopeProject | kindgi.client.LiveScopeSegment | kindgi.client.LiveScopeUnrecognized
ImprovementBudget
Section titled “ImprovementBudget”max_cost_usd: float(maxCostUsdon the wire)max_candidates: int(maxCandidateson the wire)
ImprovementPass
Section titled “ImprovementPass”An improvement pass: the runtime looking for better values for an agent version's tunable settings (x-kindgi-tunable) on a test set, within a budget. Its best candidate becomes an improvement proposal.
id: uuid.UUIDagent_id: str(agentIdon the wire)from_version: str(fromVersionon the wire)scope: kindgi.client.LiveScopeTenant | kindgi.client.LiveScopeOrg | kindgi.client.LiveScopeProject | kindgi.client.LiveScopeSegment | kindgi.client.LiveScopeUnrecognizedsuite_id: str(suiteIdon the wire)tiers: list[Annotated[Union[Literal['prompt', 'settings'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]]objective: Union[Literal['weightedYesShare', 'weightedPrecisionAtK'], str]class_weights: Optional[Annotated[Union[Literal['as-recorded', 'restricted-only'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](classWeightson the wire) (optional)model: kindgi.client.Model1 | None(optional)candidates: int | None(optional)budget: kindgi.client.ImprovementBudgetrequested_by: str(requestedByon the wire)status: Union[Literal['running', 'completed', 'failed', 'cancelled'], str]candidates_evaluated: int(candidatesEvaluatedon the wire)cost_usd: str(costUsdon the wire)outcome: kindgi.client.ImprovementPassOutcome | None(optional)cancel_reason: str | None(cancelReasonon the wire) (optional)comparisons: list[kindgi.client.Comparison1] | None(optional)trigger: kindgi.client.Trigger | None(optional)created_at: AwareDatetime(createdAton the wire)updated_at: AwareDatetime(updatedAton the wire)finished_at: AwareDatetime | None(finishedAton the wire) (optional)
ImprovementPassCollectionPage
Section titled “ImprovementPassCollectionPage”data: list[kindgi.client.ImprovementPass]has_more: bool(hasMoreon the wire)next_cursor: str | None(nextCursoron the wire) (optional)
ImprovementPassFinishedEvent
Section titled “ImprovementPassFinishedEvent”An improvement pass ended (completed, failed or cancelled): one a person started, or one an improve schedule did. Its outcome names the proposal it wrote, if it wrote one.
id: strtype: Literal['improvement-pass.finished']created_at: AwareDatetime(createdAton the wire)data: kindgi.client.Data1
ImprovementPassOutcome
Section titled “ImprovementPassOutcome”What a finished pass found. proposed: its best candidate beat the current values on the test set's hold-out part, so it wrote an improvement proposal (proposalId) for a reviewer to decide. nothing-found: no candidate beat them by more than the noise, or within the budget (reason; holdOut has the best candidate's numbers when one got that far). failed: message says why.
kind: Union[Literal['proposed', 'nothing-found', 'failed'], str]proposal_id: uuid.UUID | None(proposalIdon the wire) (optional)reason: str | None(optional)hold_out: kindgi.client.HoldOut | None(holdOuton the wire) (optional)message: str | None(optional)
InstructionType
Section titled “InstructionType”root: str
Instructions
Section titled “Instructions”root: str
InviteEmail
Section titled “InviteEmail”Whether the invitation was emailed, and why not: no-email (the person has no email, so isn't invited), not-requested (sendInvite: false), not-configured (the deployment sends no email), send-failed (the mail server refused it or didn't answer), capped (the workspace, or the whole deployment, has sent as many invitation emails as it may in 24 hours). An invitation not emailed is still open: tell them yourself.
sent: boolreason: Optional[Annotated[Union[Literal['no-email', 'not-requested', 'not-configured', 'send-failed', 'capped'], str], <kindgi.client._open.OpenEnum object at 0x10700bbd0>]](optional)
InviteRenewed
Section titled “InviteRenewed”The person, with their invitation's new expiry, and whether it was emailed.
user: kindgi.client.UserRecordinvite_email: kindgi.client.InviteEmail(inviteEmailon the wire)