{"name":"Upstream","version":1,"skill":"https://upstream.codes/.well-known/skills/upstream/SKILL.md","setup":"https://upstream.codes/docs/agents","install":"https://upstream.codes/docs/cli","integrations":{"guide":"https://upstream.codes/.well-known/upstream/docs/external-tools.md","setup":"upstream setup <git|vscode|zed|cursor|windsurf>","preview":"upstream setup <target> --dry-run --json","diagnose":"upstream doctor --json","requiredReleaseCapability":"editorSetup"},"release":{"manifest":"https://downloads.coline.dev/upstream/stable.json","requiredCapability":{"agentProtocolVersion":1},"installedProbe":"upstream agent tools","note":"This catalog describes server capabilities. Verify the published release and installed CLI before using agent or MCP commands; reinstalling the same version cannot add missing commands."},"authentication":{"type":"browser-approved-cli-session","command":"upstream auth login","actsAs":"authenticated-user","revoke":"https://upstream.codes/settings/cli"},"transports":{"cli":{"discovery":"upstream agent tools","call":"upstream agent call <tool> --input <file|->","input":"JSON","output":"JSON data envelope"},"mcp":{"transport":"stdio","command":"upstream","args":["mcp"],"readOnlyArgs":["mcp","--read-only"]}},"tools":[{"name":"list_destinations","description":"List personal and organization namespaces and whether you can create repositories there.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}},{"name":"list_repositories","description":"List repositories accessible to the signed-in user.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"search":{"type":"string","maxLength":200}},"additionalProperties":false}},{"name":"get_repository","description":"Read repository details, visibility, default branch and canonicality.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63}},"required":["namespace","repository"],"additionalProperties":false}},{"name":"create_repository","description":"Create a native repository after choosing namespace and visibility with the user. Poll the returned operation until it succeeds.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"slug":{"type":"string","minLength":1,"maxLength":63},"displayName":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":10000},"visibility":{"type":"string","enum":["private","public","unlisted","internal"]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":255,"pattern":"^[\\x20-\\x7e]+$","description":"Unique key for this operation. Reuse it with the same input when retrying."}},"required":["namespace","slug","displayName","visibility","idempotencyKey"],"additionalProperties":false}},{"name":"import_repository","description":"Copy Git history into Upstream. This is a one-time import, not ongoing GitHub Sync or a canonicality migration. Private GitHub imports use the namespace's connected GitHub App.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"slug":{"type":"string","minLength":1,"maxLength":63},"displayName":{"type":"string","minLength":1,"maxLength":200},"visibility":{"type":"string","enum":["private","public","unlisted","internal"]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":255,"pattern":"^[\\x20-\\x7e]+$","description":"Unique key for this operation. Reuse it with the same input when retrying."},"source":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"public_git"},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["kind","url"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"github"},"owner":{"type":"string","minLength":1,"maxLength":100},"repository":{"type":"string","minLength":1,"maxLength":100}},"required":["kind","owner","repository"],"additionalProperties":false}]}},"required":["namespace","slug","displayName","visibility","idempotencyKey","source"],"additionalProperties":false}},{"name":"github_status","description":"Check the selected namespace's GitHub App connection. If disconnected, ask the user to connect GitHub in the Upstream import flow.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120}},"required":["namespace"],"additionalProperties":false}},{"name":"github_repositories","description":"List repositories available through the selected namespace's GitHub App installation.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120}},"required":["namespace"],"additionalProperties":false}},{"name":"start_github_sync","description":"Connect a GitHub repository while keeping GitHub authoritative. Ask the user about issue and pull request backfill before setting options. This does not migrate or create an outbound mirror.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"owner":{"type":"string","minLength":1,"maxLength":100},"repository":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":63},"idempotencyKey":{"type":"string","minLength":8,"maxLength":255,"pattern":"^[\\x20-\\x7e]+$","description":"Unique key for this operation. Reuse it with the same input when retrying."},"options":{"type":"object","properties":{"backfillPullRequestCount":{"type":"integer","minimum":0,"maximum":500},"includeClosedBackfill":{"type":"boolean"},"backfillIssueCount":{"type":"integer","minimum":0,"maximum":2000},"includeClosedIssueBackfill":{"type":"boolean"},"syncIssues":{"type":"boolean"},"syncIssueComments":{"type":"boolean"},"syncIssueMetadata":{"type":"boolean"},"autoMaterializeCrAsPr":{"type":"boolean"}},"additionalProperties":false}},"required":["namespace","owner","repository","idempotencyKey"],"additionalProperties":false}},{"name":"github_sync_status","description":"Read synchronization status for an existing repository.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63}},"required":["namespace","repository"],"additionalProperties":false}},{"name":"repository_health","description":"Read repository reconciliation and outbound GitHub mirror health. Check this after a migration before claiming GitHub is up to date.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63}},"required":["namespace","repository"],"additionalProperties":false}},{"name":"operation_status","description":"Read the durable operation returned by create, import or sync. Queued/running is not success.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"operationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["namespace","operationId"],"additionalProperties":false}},{"name":"migration_status","description":"Read the existing GitHub-to-Upstream migration, including approval state and completion evidence.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63}},"required":["namespace","repository"],"additionalProperties":false}},{"name":"request_migration","description":"Prepare moving an existing GitHub-canonical repository to Upstream, retaining GitHub as a one-way mirror. Requires repository administration and the user's explicit choice. Separate approval is required when the returned state asks for it.","annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"confirmation":{"type":"string","minLength":1,"maxLength":63,"description":"Repository slug, after the user chooses to move the source of truth to Upstream."},"acknowledgeGithubReadOnly":{"type":"boolean","const":true},"keepGithubActive":{"type":"boolean"},"acknowledgeLfsObjectsNotMigrated":{"type":"boolean","const":true},"idempotencyKey":{"type":"string","minLength":8,"maxLength":255,"pattern":"^[\\x20-\\x7e]+$","description":"Unique key for this operation. Reuse it with the same input when retrying."}},"required":["namespace","repository","confirmation","acknowledgeGithubReadOnly","idempotencyKey"],"additionalProperties":false}},{"name":"approve_migration","description":"Approve a prepared migration only after showing the user its consequences and obtaining their approval. This changes the source of truth and can freeze writes during cutover.","annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"confirmation":{"type":"string","minLength":1,"maxLength":63,"description":"Repository slug, after the user chooses to move the source of truth to Upstream."},"acknowledgeGithubReadOnly":{"type":"boolean","const":true},"keepGithubActive":{"type":"boolean"},"acknowledgeLfsObjectsNotMigrated":{"type":"boolean","const":true}},"required":["namespace","repository","confirmation","acknowledgeGithubReadOnly"],"additionalProperties":false}},{"name":"list_change_requests","description":"List versioned Change Requests in a repository.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"state":{"type":"string","enum":["open","merged","closed"]}},"required":["namespace","repository"],"additionalProperties":false}},{"name":"get_change_request","description":"Read a Change Request, its current version, reviews, checks and merge state.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["namespace","repository","number"],"additionalProperties":false}},{"name":"get_change_request_diff","description":"Read the diff for a specific Change Request version.","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["namespace","repository","number"],"additionalProperties":false}},{"name":"create_change_request","description":"Propose a pushed branch for review. Does not push local files or merge code.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","maxLength":20000},"sourceBranch":{"type":"string","minLength":1,"maxLength":255},"targetBranch":{"type":"string","minLength":1,"maxLength":255}},"required":["namespace","repository","title","sourceBranch","targetBranch"],"additionalProperties":false}},{"name":"comment_change_request","description":"Add a comment to a Change Request as the signed-in user.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"body":{"type":"string","minLength":1,"maxLength":20000}},"required":["namespace","repository","number","body"],"additionalProperties":false}},{"name":"review_change_request","description":"Submit a review pinned to the version you inspected. Acts as the signed-in user; self-approval is rejected by the server.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"verdict":{"type":"string","enum":["approved","changes_requested","commented"]},"body":{"type":"string","maxLength":20000},"versionNumber":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["namespace","repository","number","verdict","body","versionNumber"],"additionalProperties":false}},{"name":"update_change_request_version","description":"Snapshot the pushed source branch as a new Change Request version. Read it back and report the new version.","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["namespace","repository","number"],"additionalProperties":false}},{"name":"change_request_action","description":"Ready, close, reopen or merge a Change Request. Merge requires user authorization and passes the same server-side checks as the UI. Poll asynchronous operations; acceptance does not mean merged.","annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":120},"repository":{"type":"string","minLength":1,"maxLength":63},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"action":{"type":"string","enum":["ready","close","reopen","merge"]},"method":{"type":"string","enum":["merge","squash","rebase"]}},"required":["namespace","repository","number","action"],"additionalProperties":false}}]}