From 93cedaa98e0d541e82d53195678cc839194f2b02 Mon Sep 17 00:00:00 2001 From: Daniel Blignaut Date: Sun, 2 Aug 2026 18:30:32 +0200 Subject: [PATCH 1/6] fix: reconcile example workspace state --- code-review-bot/tilde-state.yaml | 42 ++++++++++++++++++++- sentry-remediation-bot/tilde-state.yaml | 49 +++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 5 deletions(-) diff --git a/code-review-bot/tilde-state.yaml b/code-review-bot/tilde-state.yaml index eecda1f..e675a1e 100644 --- a/code-review-bot/tilde-state.yaml +++ b/code-review-bot/tilde-state.yaml @@ -12,8 +12,13 @@ resources: displayName: Code Review enabled: true endpointUrl: https://YOUR_DEPLOYMENT.example/api/code-review + chatkit/provider/trytilde: + desiredEnabled: true + displayName: GitHub + providerConfiguration: {} + providerId: chatkit.channel.github credential/setup_item/github: - credentialSourceTypeId: server_token_exchange + credentialSourceTypeId: api_key desiredEnabled: true displayName: GitHub metadata: @@ -31,7 +36,7 @@ resources: mcp/tool_provider/github: refs: resource_server_credential: credential/setup_item/github - credentialSourceTypeId: server_token_exchange + credentialSourceTypeId: api_key displayName: GitHub resourceServerCredentialId: null status: brokering_initiated @@ -62,6 +67,39 @@ resources: status: brokering_initiated toolGroupSourceTypeId: modal_sandbox userCredentialId: null + reverse_proxy/profile/github-rest: + refs: + resource_server_credential: credential/setup_item/github + baseUrl: https://api.github.com + customHeaders: {} + desiredEnabled: true + displayName: GitHub REST + ownerId: null + providerId: github + resourceServerCredentialId: null + userCredentialId: null + reverse_proxy/profile/github-git-https: + refs: + resource_server_credential: credential/setup_item/github + baseUrl: https://github.com + customHeaders: {} + desiredEnabled: true + displayName: GitHub Git HTTPS + ownerId: null + providerId: github_git_https + resourceServerCredentialId: null + userCredentialId: null + reverse_proxy/profile/modal-sandbox-api: + refs: + resource_server_credential: credential/setup_item/modal-sandbox + baseUrl: https://api.modal.com + customHeaders: {} + desiredEnabled: true + displayName: Modal + ownerId: null + providerId: modal_sandbox + resourceServerCredentialId: null + userCredentialId: null mcp/server/code-review: refs: tool_provider_github: mcp/tool_provider/github diff --git a/sentry-remediation-bot/tilde-state.yaml b/sentry-remediation-bot/tilde-state.yaml index e279d29..b89b7e2 100644 --- a/sentry-remediation-bot/tilde-state.yaml +++ b/sentry-remediation-bot/tilde-state.yaml @@ -14,7 +14,7 @@ resources: endpointUrl: https://YOUR_DEPLOYMENT.example/api/sentry-remediation credential/setup_item/github: - credentialSourceTypeId: server_token_exchange + credentialSourceTypeId: api_key desiredEnabled: true displayName: GitHub metadata: @@ -28,7 +28,7 @@ resources: status: pending mcp/tool_provider/github: refs: { resource_server_credential: credential/setup_item/github } - credentialSourceTypeId: server_token_exchange + credentialSourceTypeId: api_key displayName: GitHub resourceServerCredentialId: null status: brokering_initiated @@ -46,6 +46,17 @@ resources: resourceServerCredentialId: null userCredentialId: null + reverse_proxy/profile/github-rest: + refs: { resource_server_credential: credential/setup_item/github } + providerId: github + baseUrl: https://api.github.com + customHeaders: {} + desiredEnabled: true + displayName: GitHub REST + ownerId: null + resourceServerCredentialId: null + userCredentialId: null + credential/setup_item/modal-sandbox: credentialSourceTypeId: modal_custom_json_schema desiredEnabled: true @@ -68,6 +79,17 @@ resources: toolGroupSourceTypeId: modal_sandbox userCredentialId: null + reverse_proxy/profile/modal-sandbox-api: + refs: { resource_server_credential: credential/setup_item/modal-sandbox } + providerId: modal_sandbox + baseUrl: https://api.modal.com + customHeaders: {} + desiredEnabled: true + displayName: Modal + ownerId: null + resourceServerCredentialId: null + userCredentialId: null + credential/setup_item/sentry: credentialSourceTypeId: api_key desiredEnabled: true @@ -91,8 +113,27 @@ resources: toolGroupSourceTypeId: sentry userCredentialId: null + reverse_proxy/profile/sentry-rest: + refs: { resource_server_credential: credential/setup_item/sentry } + providerId: sentry + baseUrl: https://sentry.io/api/0 + customHeaders: {} + desiredEnabled: true + displayName: Sentry REST + ownerId: null + resourceServerCredentialId: null + userCredentialId: null + + mcp/tool_provider/tilde-human-approval: + credentialSourceTypeId: no_auth + displayName: Tilde Human Approval + resourceServerCredentialId: null + status: active + toolGroupSourceTypeId: tilde_human_approval + userCredentialId: null + signals/provider_instance/spi_6a4815cc-449d-4a10-bf1c-a30717442071: - providerType: sentry + signalProviderSourceTypeId: sentry credentialSourceTypeId: no_auth displayName: Sentry Issues desiredEnabled: true @@ -124,6 +165,7 @@ resources: tool_provider_github: mcp/tool_provider/github tool_provider_modal_sandbox: mcp/tool_provider/modal-sandbox tool_provider_sentry: mcp/tool_provider/sentry + tool_provider_tilde_human_approval: mcp/tool_provider/tilde-human-approval displayName: Sentry Remediation isDynamicToolDiscovery: false functions: @@ -145,6 +187,7 @@ resources: - { configuredParams: {}, enabled: true, toolDescription: Read a full Sentry event and stacktrace., toolGroupInstanceId: sentry, toolGroupSourceTypeId: sentry, toolName: sentry_get_event_stacktrace, toolSourceTypeId: sentry_get_event_stacktrace } - { configuredParams: {}, enabled: true, toolDescription: Assign or update a Sentry issue., toolGroupInstanceId: sentry, toolGroupSourceTypeId: sentry, toolName: sentry_update_issue, toolSourceTypeId: sentry_update_issue } - { configuredParams: {}, enabled: true, toolDescription: Add a visible note to a Sentry issue., toolGroupInstanceId: sentry, toolGroupSourceTypeId: sentry, toolName: sentry_add_issue_note, toolSourceTypeId: sentry_add_issue_note } + - { configuredParams: {}, enabled: true, toolDescription: Wait for human assistance when remediation needs approval or credentials., toolGroupInstanceId: tilde-human-approval, toolGroupSourceTypeId: tilde_human_approval, toolName: wait_for_human_assistance_to_complete, toolSourceTypeId: wait_for_human_assistance_to_complete } - { configuredParams: {}, enabled: true, toolDescription: Search GitHub issues and pull requests for related work., toolGroupInstanceId: github, toolGroupSourceTypeId: github, toolName: github_search_issues, toolSourceTypeId: github_search_issues } - { configuredParams: {}, enabled: true, toolDescription: Read a matching GitHub issue or pull request., toolGroupInstanceId: github, toolGroupSourceTypeId: github, toolName: github_get_issue, toolSourceTypeId: github_get_issue } - { configuredParams: {}, enabled: true, toolDescription: List open pull requests to avoid duplicates., toolGroupInstanceId: github, toolGroupSourceTypeId: github, toolName: github_list_pull_requests, toolSourceTypeId: github_list_pull_requests } From 1f9cbca4702b5821b4a4027d1615b45229d885c3 Mon Sep 17 00:00:00 2001 From: Daniel Blignaut Date: Thu, 6 Aug 2026 11:20:45 +0200 Subject: [PATCH 2/6] docs: add Deploy to Tilde examples --- code-review-bot/README.md | 18 ++++++++---------- .../{tilde-state.yaml => tilde.state.yaml} | 7 +++++-- sentry-remediation-bot/README.md | 10 +++++++--- .../{tilde-state.yaml => tilde.state.yaml} | 7 +++++-- 4 files changed, 25 insertions(+), 17 deletions(-) rename code-review-bot/{tilde-state.yaml => tilde.state.yaml} (97%) rename sentry-remediation-bot/{tilde-state.yaml => tilde.state.yaml} (98%) diff --git a/code-review-bot/README.md b/code-review-bot/README.md index 3802ffa..ff846ef 100644 --- a/code-review-bot/README.md +++ b/code-review-bot/README.md @@ -68,17 +68,15 @@ cp .env.example .env.local ## 2. Import Tilde State -Replace `https://YOUR_DEPLOYMENT.example/api/code-review` in -[`tilde-state.yaml`](./tilde-state.yaml) with the endpoint you intend to use. -For local development, use the public URL from your Tilde development tunnel. +Set `CODEX_REVIEW_ENDPOINT_URL` when importing +[`tilde.state.yaml`](./tilde.state.yaml) to the complete endpoint you intend to use. -Import from Mission Control, or with the Tilde CLI: +[![Deploy to Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=code-review-bot%2Ftilde.state.yaml) -```bash -tilde auth login -tilde auth set-team -tilde state import tilde-state.yaml .tilde/imports/code-review-output.yaml -``` +For local development, use the public URL from your Tilde development tunnel. + +Use the deploy button above, or import the file from Mission Control and provide +the variable when prompted. The state creates: @@ -211,7 +209,7 @@ found. - [`lib/tilde.ts`](./lib/tilde.ts): the single configured Harness SDK client. - [Tilde Harness SDK](https://github.com/trytilde/harness-sdk): ChatKit, MCP, reverse-proxy, and typed provider-context integration. -- [`tilde-state.yaml`](./tilde-state.yaml): portable Tilde resources. +- [`tilde.state.yaml`](./tilde.state.yaml): portable Tilde resources. ## Limitations diff --git a/code-review-bot/tilde-state.yaml b/code-review-bot/tilde.state.yaml similarity index 97% rename from code-review-bot/tilde-state.yaml rename to code-review-bot/tilde.state.yaml index e675a1e..3221496 100644 --- a/code-review-bot/tilde-state.yaml +++ b/code-review-bot/tilde.state.yaml @@ -1,17 +1,20 @@ metadata: name: code-review-bot description: GitHub pull request reviewer with Tilde MCP and a Modal sandbox. +variables: + CODEX_REVIEW_ENDPOINT_URL: + type: string + description: The complete endpoint URL Tilde uses to invoke the Code Review agent. resources: chatkit/agent/code-review: configuration: local_running_endpoint: false - local_runtime_path: /api/code-review provider: chatkit.http-vercel-ai-sdk streaming: true timeout_ms: 300000 displayName: Code Review enabled: true - endpointUrl: https://YOUR_DEPLOYMENT.example/api/code-review + endpointUrl: ${CODEX_REVIEW_ENDPOINT_URL} chatkit/provider/trytilde: desiredEnabled: true displayName: GitHub diff --git a/sentry-remediation-bot/README.md b/sentry-remediation-bot/README.md index 48f4223..89aed6a 100644 --- a/sentry-remediation-bot/README.md +++ b/sentry-remediation-bot/README.md @@ -15,10 +15,14 @@ Sentry note. It does not resolve the issue before deployment. ## Setup +[![Deploy to Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=sentry-remediation-bot%2Ftilde.state.yaml) + 1. Run `pnpm install` and copy `.env.example` to `.env.local`. -2. Replace the deployment URL and `REPLACE_WITH_SENTRY_APP_CLIENT_SECRET` in - `tilde-state.yaml` before importing it. Never commit the real secret. -3. Import state with `tilde state import tilde-state.yaml .tilde/imports/sentry-remediation-output.yaml`. +2. Set `SENTRY_REMEDIATION_ENDPOINT_URL` during import and replace + `REPLACE_WITH_SENTRY_APP_CLIENT_SECRET` in `tilde.state.yaml`. Never commit + the real secret. +3. Use the deploy button above, or import `tilde.state.yaml` from Mission Control + and provide the variable when prompted. 4. Complete the pending Sentry, GitHub, and Modal credentials in Mission Control. The Sentry API token needs `org:read`, `project:read`, `event:read`, and `event:write`. diff --git a/sentry-remediation-bot/tilde-state.yaml b/sentry-remediation-bot/tilde.state.yaml similarity index 98% rename from sentry-remediation-bot/tilde-state.yaml rename to sentry-remediation-bot/tilde.state.yaml index b89b7e2..e49943e 100644 --- a/sentry-remediation-bot/tilde-state.yaml +++ b/sentry-remediation-bot/tilde.state.yaml @@ -1,17 +1,20 @@ metadata: name: sentry-remediation-bot description: Sentry issue signals routed to a GitHub and Modal remediation agent. +variables: + SENTRY_REMEDIATION_ENDPOINT_URL: + type: string + description: The complete endpoint URL Tilde uses to invoke the Sentry Remediation agent. resources: chatkit/agent/sentry-remediation: configuration: local_running_endpoint: false - local_runtime_path: /api/sentry-remediation provider: chatkit.http-vercel-ai-sdk streaming: true timeout_ms: 300000 displayName: Sentry Remediation enabled: true - endpointUrl: https://YOUR_DEPLOYMENT.example/api/sentry-remediation + endpointUrl: ${SENTRY_REMEDIATION_ENDPOINT_URL} credential/setup_item/github: credentialSourceTypeId: api_key From 1c7033e99aa4a13d700ce73f7df929a5286485ff Mon Sep 17 00:00:00 2001 From: Daniel Blignaut Date: Thu, 6 Aug 2026 13:50:44 +0200 Subject: [PATCH 3/6] Clarify ChatKit endpoint variables --- code-review-bot/README.md | 2 +- code-review-bot/tilde.state.yaml | 6 +++--- sentry-remediation-bot/README.md | 2 +- sentry-remediation-bot/tilde.state.yaml | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code-review-bot/README.md b/code-review-bot/README.md index ff846ef..50f2100 100644 --- a/code-review-bot/README.md +++ b/code-review-bot/README.md @@ -68,7 +68,7 @@ cp .env.example .env.local ## 2. Import Tilde State -Set `CODEX_REVIEW_ENDPOINT_URL` when importing +Set `CODEX_REVIEW_CHATKIT_ENDPOINT_URL` when importing [`tilde.state.yaml`](./tilde.state.yaml) to the complete endpoint you intend to use. [![Deploy to Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=code-review-bot%2Ftilde.state.yaml) diff --git a/code-review-bot/tilde.state.yaml b/code-review-bot/tilde.state.yaml index 3221496..817a6ef 100644 --- a/code-review-bot/tilde.state.yaml +++ b/code-review-bot/tilde.state.yaml @@ -2,9 +2,9 @@ metadata: name: code-review-bot description: GitHub pull request reviewer with Tilde MCP and a Modal sandbox. variables: - CODEX_REVIEW_ENDPOINT_URL: + CODEX_REVIEW_CHATKIT_ENDPOINT_URL: type: string - description: The complete endpoint URL Tilde uses to invoke the Code Review agent. + description: ex. https://acme.com/api/agent. The planned URL to your Tilde agent. resources: chatkit/agent/code-review: configuration: @@ -14,7 +14,7 @@ resources: timeout_ms: 300000 displayName: Code Review enabled: true - endpointUrl: ${CODEX_REVIEW_ENDPOINT_URL} + endpointUrl: ${CODEX_REVIEW_CHATKIT_ENDPOINT_URL} chatkit/provider/trytilde: desiredEnabled: true displayName: GitHub diff --git a/sentry-remediation-bot/README.md b/sentry-remediation-bot/README.md index 89aed6a..5bf5c0e 100644 --- a/sentry-remediation-bot/README.md +++ b/sentry-remediation-bot/README.md @@ -18,7 +18,7 @@ Sentry note. It does not resolve the issue before deployment. [![Deploy to Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=sentry-remediation-bot%2Ftilde.state.yaml) 1. Run `pnpm install` and copy `.env.example` to `.env.local`. -2. Set `SENTRY_REMEDIATION_ENDPOINT_URL` during import and replace +2. Set `SENTRY_REMEDIATION_CHATKIT_ENDPOINT_URL` during import and replace `REPLACE_WITH_SENTRY_APP_CLIENT_SECRET` in `tilde.state.yaml`. Never commit the real secret. 3. Use the deploy button above, or import `tilde.state.yaml` from Mission Control diff --git a/sentry-remediation-bot/tilde.state.yaml b/sentry-remediation-bot/tilde.state.yaml index e49943e..5214b10 100644 --- a/sentry-remediation-bot/tilde.state.yaml +++ b/sentry-remediation-bot/tilde.state.yaml @@ -2,9 +2,9 @@ metadata: name: sentry-remediation-bot description: Sentry issue signals routed to a GitHub and Modal remediation agent. variables: - SENTRY_REMEDIATION_ENDPOINT_URL: + SENTRY_REMEDIATION_CHATKIT_ENDPOINT_URL: type: string - description: The complete endpoint URL Tilde uses to invoke the Sentry Remediation agent. + description: ex. https://acme.com/api/agent. The planned URL to your Tilde agent. resources: chatkit/agent/sentry-remediation: configuration: @@ -14,7 +14,7 @@ resources: timeout_ms: 300000 displayName: Sentry Remediation enabled: true - endpointUrl: ${SENTRY_REMEDIATION_ENDPOINT_URL} + endpointUrl: ${SENTRY_REMEDIATION_CHATKIT_ENDPOINT_URL} credential/setup_item/github: credentialSourceTypeId: api_key From ecb01a4ad304886589fede200c2ca484e5b716f6 Mon Sep 17 00:00:00 2001 From: Daniel Blignaut Date: Thu, 6 Aug 2026 14:49:00 +0200 Subject: [PATCH 4/6] Bind code review provider to its agent --- code-review-bot/tilde.state.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code-review-bot/tilde.state.yaml b/code-review-bot/tilde.state.yaml index 817a6ef..286114b 100644 --- a/code-review-bot/tilde.state.yaml +++ b/code-review-bot/tilde.state.yaml @@ -16,6 +16,9 @@ resources: enabled: true endpointUrl: ${CODEX_REVIEW_CHATKIT_ENDPOINT_URL} chatkit/provider/trytilde: + refs: + default_agent: chatkit/agent/code-review + defaultAgentInboxId: code-review desiredEnabled: true displayName: GitHub providerConfiguration: {} From 2632717346e9b1f42b2334d297baf9fbd8218752 Mon Sep 17 00:00:00 2001 From: Daniel Blignaut Date: Thu, 6 Aug 2026 16:08:17 +0200 Subject: [PATCH 5/6] Use GitHub App provisioning in code review template --- code-review-bot/tilde.state.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code-review-bot/tilde.state.yaml b/code-review-bot/tilde.state.yaml index 286114b..174e59f 100644 --- a/code-review-bot/tilde.state.yaml +++ b/code-review-bot/tilde.state.yaml @@ -24,7 +24,7 @@ resources: providerConfiguration: {} providerId: chatkit.channel.github credential/setup_item/github: - credentialSourceTypeId: api_key + credentialSourceTypeId: server_token_exchange desiredEnabled: true displayName: GitHub metadata: @@ -34,6 +34,7 @@ resources: ownerType: tool_group_instance provider_display_name: GitHub provider_icon_key: github + provider_provisioner_id: provider_provisioner.github source: state_import ownerId: github ownerType: state_import_credential @@ -42,7 +43,7 @@ resources: mcp/tool_provider/github: refs: resource_server_credential: credential/setup_item/github - credentialSourceTypeId: api_key + credentialSourceTypeId: server_token_exchange displayName: GitHub resourceServerCredentialId: null status: brokering_initiated From 9099cae216c27274c1f074dac4d223ff40491ded Mon Sep 17 00:00:00 2001 From: Daniel Blignaut Date: Thu, 6 Aug 2026 17:08:06 +0200 Subject: [PATCH 6/6] docs: embed Deploy with Tilde buttons --- code-review-bot/README.md | 2 +- sentry-remediation-bot/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code-review-bot/README.md b/code-review-bot/README.md index 50f2100..e7dd090 100644 --- a/code-review-bot/README.md +++ b/code-review-bot/README.md @@ -71,7 +71,7 @@ cp .env.example .env.local Set `CODEX_REVIEW_CHATKIT_ENDPOINT_URL` when importing [`tilde.state.yaml`](./tilde.state.yaml) to the complete endpoint you intend to use. -[![Deploy to Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=code-review-bot%2Ftilde.state.yaml) +[![Deploy with Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=code-review-bot%2Ftilde.state.yaml) For local development, use the public URL from your Tilde development tunnel. diff --git a/sentry-remediation-bot/README.md b/sentry-remediation-bot/README.md index 5bf5c0e..3f593a4 100644 --- a/sentry-remediation-bot/README.md +++ b/sentry-remediation-bot/README.md @@ -15,7 +15,7 @@ Sentry note. It does not resolve the issue before deployment. ## Setup -[![Deploy to Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=sentry-remediation-bot%2Ftilde.state.yaml) +[![Deploy with Tilde](https://api.trytilde.ai/deploy-button.svg)](https://api.trytilde.ai/deploy?repository-url=https%3A%2F%2Fgithub.com%2Ftrytilde%2Fexamples&state-path=sentry-remediation-bot%2Ftilde.state.yaml) 1. Run `pnpm install` and copy `.env.example` to `.env.local`. 2. Set `SENTRY_REMEDIATION_CHATKIT_ENDPOINT_URL` during import and replace