put.io SDK development
Apply put.io SDK conventions after the target repository's own guidance.
Shared defaults
- Treat each SDK as a public package, not an internal compatibility layer.
- Treat TypeScript as the canonical full put.io API client, not just the richest reference.
- Keep every public surface domain-first, strongly typed, and native to its host language.
- Update request, response, and typed error contracts together.
- Prove behavior with deterministic tests plus safe live tests when real API behavior matters.
- Keep Swift and Kotlin scope narrower than TypeScript only when product usage justifies it.
Source order
When sources disagree, prefer local backend behavior and tests, current
first-party app usage, maintained SDKs, archived clients, then published API
documentation.
Start with sources present in the target repository. Add backend or first-party
consumer evidence only when it is authorized and available.
Widen SDK surfaces only when real app use and verified backend behavior justify it.
Start
Read only what you need:
- every filesystem
AGENTS.md that applies from the target repo root to the
files being changed, including untracked files, followed by the tracked
auxiliary guidance inventory from git ls-files '*AGENTS.md' '*SKILL.md'
- the frontmatter and instructions from task-matching project-local
SKILL.md
files under .agents/skills/, .claude/skills/, or skills/; ignore
dependency and vendored trees
- the canonical verify and live-test commands from
README.md, AGENTS.md, or docs/*
- SDK vision for scope, parity, and endpoint-family decisions
- patterns for typed boundaries, error mapping, pagination, and live-test layering
- language notes for TypeScript, Swift, or Kotlin-specific guidance
- release security when publishing,
signing, releasing, or building distributable binaries
Target-repo guidance and matching repo-local skills override this shared skill.
If the repo has a canonical verify command, use that as the source of truth before editing delivery automation.
Target-repo delivery and supply-chain guidance overrides the shared release
defaults.
Workflow
- Inspect the target namespace and the shared transport or client runtime.
- Check backend behavior, backend tests, and current app usage before widening or changing a contract.
- Update typed request input, response parsing, and operation-specific error mapping together.
- Add or update deterministic coverage for request shaping, parsing, errors, and public client contracts.
- Add or refresh safe live verification when production behavior matters and the surface is reversible.
- Keep multiple public clients aligned when the repo exposes more than one interface style.
- Select the owner's documented checks for the affected contracts and their
dependents, including installed-package and downstream-consumer proof when
relevant. Run the full canonical gate when mandated, shared inputs changed,
or focused coverage is uncertain. Fix failures and refresh affected proof;
reuse passing results while their source, inputs and environment remain
valid. Record unavailable proof and its exact blocker without claiming it
passed or inferring authorization from command discovery.
- Update package-facing docs and release notes when the public surface changes.
Endpoint changes
For a new or changed endpoint, discover the tracked source, test, fixture, and
consumer paths first. Search only paths that exist:
git ls-files -z -- \
':(glob)**/src/**' \
':(glob)**/test/**' \
':(glob)**/tests/**' \
':(glob)**/Tests/**' \
':(glob)**/Sources/**' \
':(glob)**/docs/**' \
':(glob)**/fixtures/**' \
':(glob)**/Package.swift' \
':(glob)**/build.gradle' \
':(glob)**/package.json' |
xargs -0 rg -n "route_name|endpoint_path|field_name" -- || true
Repeat this search from a backend, fixture, or first-party consumer checkout
only when that source is available and authorized.
Then update the SDK in this order:
- request input type or query model
- response parser or native decode model
- operation-specific error mapping
- public client method or namespace export
- unit tests for request, response, and error behavior
- safe live test when the endpoint behavior cannot be proven locally
- README, API docs, or release notes when the public surface changed
Verification
Use the owning repository's documented commands. Do not infer a Vite+, Gradle,
or Make entrypoint from this shared skill.
An SDK repo should expose both:
- a default deterministic unit-test path that is safe for CI and local iteration
- a separate documented live-test path for real API verification
If one of those layers is missing, treat it as a repo gap to document or fix rather than silently accepting a weaker verification story.
Discover the owned commands before running them:
rg --hidden -n "verify|check|test|example" . \
--glob 'README.md' \
--glob 'AGENTS.md' \
--glob 'docs/**' \
--glob '.github/**' \
--glob 'package.json' \
--glob 'Makefile' \
--glob 'pyproject.toml' \
--glob 'Cargo.toml' \
--glob 'build.gradle*' \
--glob 'settings.gradle*' \
--glob 'Package.swift' || true
For runtime verification, prefer the repo's documented live-test entrypoints and follow the shared-account safety rules in that repo's testing docs.
Boundaries
- Verify backend contracts with current docs, source, fixtures, or live probes rather than old SDKs alone.
- Claim full verification only when the unit, fixture, and live layers that matter for the change were exercised.
- Keep live coverage against shared accounts non-destructive.
- Finish in-scope edits, verification, and fixes without pausing for approval; ask before publishing, release writes, coverage-threshold changes, and live writes that are not reversible.
- Preserve naming, parity, and type-safety unless a documented reason justifies a change.
- Keep repo-specific implementation guidance in that repo's
AGENTS.md or
docs/*
- Generic SDK work, end-user application code, and CLI consumer operations are
outside this skill.
1---2name: putio-sdk-dev3description: Develop or review SDK and API client code owned by put.io across TypeScript, Swift, Kotlin, and similar packages. Use only for work in a put.io SDK repository or explicit requests for put.io SDK conventions. Do not use for unrelated SDKs, browser-only put.io inspection, end-user application code, or putio CLI operations.4---56# put.io SDK development78Apply put.io SDK conventions after the target repository's own guidance.910## Shared defaults1112- Treat each SDK as a public package, not an internal compatibility layer.13- Treat TypeScript as the canonical full put.io API client, not just the richest reference.14- Keep every public surface domain-first, strongly typed, and native to its host language.15- Update request, response, and typed error contracts together.16- Prove behavior with deterministic tests plus safe live tests when real API behavior matters.17- Keep Swift and Kotlin scope narrower than TypeScript only when product usage justifies it.1819## Source order2021When sources disagree, prefer local backend behavior and tests, current22first-party app usage, maintained SDKs, archived clients, then published API23documentation.2425Start with sources present in the target repository. Add backend or first-party26consumer evidence only when it is authorized and available.2728Widen SDK surfaces only when real app use and verified backend behavior justify it.2930## Start3132Read only what you need:3334- every filesystem `AGENTS.md` that applies from the target repo root to the35 files being changed, including untracked files, followed by the tracked36 auxiliary guidance inventory from `git ls-files '*AGENTS.md' '*SKILL.md'`37- the frontmatter and instructions from task-matching project-local `SKILL.md`38 files under `.agents/skills/`, `.claude/skills/`, or `skills/`; ignore39 dependency and vendored trees40- the canonical verify and live-test commands from `README.md`, `AGENTS.md`, or `docs/*`41- [SDK vision](./references/sdk-vision.md) for scope, parity, and endpoint-family decisions42- [patterns](./references/patterns.md) for typed boundaries, error mapping, pagination, and live-test layering43- [language notes](./references/language-notes.md) for TypeScript, Swift, or Kotlin-specific guidance44- [release security](./references/release-security.md) when publishing,45 signing, releasing, or building distributable binaries4647Target-repo guidance and matching repo-local skills override this shared skill.4849If the repo has a canonical verify command, use that as the source of truth before editing delivery automation.50Target-repo delivery and supply-chain guidance overrides the shared release51defaults.5253## Workflow54551. Inspect the target namespace and the shared transport or client runtime.562. Check backend behavior, backend tests, and current app usage before widening or changing a contract.573. Update typed request input, response parsing, and operation-specific error mapping together.584. Add or update deterministic coverage for request shaping, parsing, errors, and public client contracts.595. Add or refresh safe live verification when production behavior matters and the surface is reversible.606. Keep multiple public clients aligned when the repo exposes more than one interface style.617. Select the owner's documented checks for the affected contracts and their62 dependents, including installed-package and downstream-consumer proof when63 relevant. Run the full canonical gate when mandated, shared inputs changed,64 or focused coverage is uncertain. Fix failures and refresh affected proof;65 reuse passing results while their source, inputs and environment remain66 valid. Record unavailable proof and its exact blocker without claiming it67 passed or inferring authorization from command discovery.688. Update package-facing docs and release notes when the public surface changes.6970## Endpoint changes7172For a new or changed endpoint, discover the tracked source, test, fixture, and73consumer paths first. Search only paths that exist:7475```bash76git ls-files -z -- \77 ':(glob)**/src/**' \78 ':(glob)**/test/**' \79 ':(glob)**/tests/**' \80 ':(glob)**/Tests/**' \81 ':(glob)**/Sources/**' \82 ':(glob)**/docs/**' \83 ':(glob)**/fixtures/**' \84 ':(glob)**/Package.swift' \85 ':(glob)**/build.gradle' \86 ':(glob)**/package.json' |87 xargs -0 rg -n "route_name|endpoint_path|field_name" -- || true88```8990Repeat this search from a backend, fixture, or first-party consumer checkout91only when that source is available and authorized.9293Then update the SDK in this order:94951. request input type or query model962. response parser or native decode model973. operation-specific error mapping984. public client method or namespace export995. unit tests for request, response, and error behavior1006. safe live test when the endpoint behavior cannot be proven locally1017. README, API docs, or release notes when the public surface changed102103## Verification104105Use the owning repository's documented commands. Do not infer a Vite+, Gradle,106or Make entrypoint from this shared skill.107108An SDK repo should expose both:109110- a default deterministic unit-test path that is safe for CI and local iteration111- a separate documented live-test path for real API verification112113If one of those layers is missing, treat it as a repo gap to document or fix rather than silently accepting a weaker verification story.114115Discover the owned commands before running them:116117```bash118rg --hidden -n "verify|check|test|example" . \119 --glob 'README.md' \120 --glob 'AGENTS.md' \121 --glob 'docs/**' \122 --glob '.github/**' \123 --glob 'package.json' \124 --glob 'Makefile' \125 --glob 'pyproject.toml' \126 --glob 'Cargo.toml' \127 --glob 'build.gradle*' \128 --glob 'settings.gradle*' \129 --glob 'Package.swift' || true130```131132For runtime verification, prefer the repo's documented live-test entrypoints and follow the shared-account safety rules in that repo's testing docs.133134## Boundaries135136- Verify backend contracts with current docs, source, fixtures, or live probes rather than old SDKs alone.137- Claim full verification only when the unit, fixture, and live layers that matter for the change were exercised.138- Keep live coverage against shared accounts non-destructive.139- Finish in-scope edits, verification, and fixes without pausing for approval; ask before publishing, release writes, coverage-threshold changes, and live writes that are not reversible.140- Preserve naming, parity, and type-safety unless a documented reason justifies a change.141- Keep repo-specific implementation guidance in that repo's `AGENTS.md` or142 `docs/*`143- Generic SDK work, end-user application code, and CLI consumer operations are144 outside this skill.