Skip to content

feat(klausgateway): wire Slack OBO route + obo.* pass-through#185

Merged
teemow merged 7 commits into
mainfrom
feat/klausgateway-obo-umbrella-route
Jun 25, 2026
Merged

feat(klausgateway): wire Slack OBO route + obo.* pass-through#185
teemow merged 7 commits into
mainfrom
feat/klausgateway-obo-umbrella-route

Conversation

@teemow

@teemow teemow commented Jun 23, 2026

Copy link
Copy Markdown
Member

Summary

Implements the agentic-platform umbrella side of the Slack OBO via CIMD work: forward the klaus-gateway obo.* values through the charts and add the public connectivity route for the OAuth-bootstrap endpoints.

  • klausGateway.obo.* pass-through — added and documented the obo block (enabled, musterUrl, callbackBaseUrl, storePath, stateKey, storeKey) in both agentic-platform (meta-package, forwarded to the klaus-gateway subchart via valuesFrom: klausGateway) and agentic-platform-connectivity values.yaml, with matching values.schema.json entries.
  • Public OBO route — new HTTPRoute (klausgateway-obo) in templates/klausgateway/route.yaml exposing /auth/slack/ (covers /auth/slack/link, /auth/slack/callback, /auth/slack/client.json) on the gateway's public hostname, derived from obo.callbackBaseUrl so the route, the OAuth redirect URI, and the CIMD client_id stay in lockstep. It routes straight to the klaus-gateway Service (not through the agentgateway data-plane) so these unauthenticated bootstrap paths bypass the JWT policy that guards the channel paths. Both the linking browser and muster (CIMD fetch) reach the gateway over it. Gated on klausGateway.enabled && klausGateway.obo.enabled && ingress.parentRefs; disabled by default.
  • Fix — the existing klausgateway AgentgatewayBackend .spec.static.host defaulted to klausgateway, a non-existent Service; corrected to the chart's actual klaus-gateway Service name (matching netpol.yaml).
  • Bumped both chart versions 1.1.34 → 1.1.35, updated CHANGELOG, and added ci/test-klausgateway-obo-values.yaml as a render check.

Test plan

  • helm lint passes on both charts
  • meta-package and all 12 connectivity CI value files render
  • OBO route renders with hostname from callbackBaseUrl, path /auth/slack/, backend klaus-gateway:8080 on the public Gateway
  • End-to-end on gazelle: one Slack link round-trip + one OBO turn; confirm muster fetches /auth/slack/client.json and its client_id matches the URL

Notes

  • In-cluster muster reaching the public CIMD URL needs egress to the agentgateway public hostname (FQDN allow / OBO egress netpol) — handled separately.

Made with Cursor

Forward the klaus-gateway `obo.*` values (CIMD-based Slack on-behalf-of
linking) through the umbrella and connectivity charts, and render a public
HTTPRoute exposing the unauthenticated OAuth-bootstrap paths
/auth/slack/link, /auth/slack/callback and the CIMD document
/auth/slack/client.json on the gateway's public hostname (derived from
obo.callbackBaseUrl). The route targets the klaus-gateway Service directly so
these paths bypass the JWT policy guarding the channel paths; both the linking
browser and muster (CIMD fetch) reach the gateway over it. Disabled by default.

Also fixes the klausgateway AgentgatewayBackend host default to the correct
klaus-gateway Service name (was klausgateway, a non-existent Service when
fullnameOverride is unset).

Co-authored-by: Cursor <cursoragent@cursor.com>
@teemow teemow requested a review from a team as a code owner June 23, 2026 22:40
teemow and others added 6 commits June 24, 2026 00:48
The CHANGELOG documented a klausgateway-obo-egress NetworkPolicy but the
template was missing. Without it the gateway, put into default-deny egress by
klausgateway-a2a-egress, cannot reach muster's authorization server (443/10443)
for RFC 8414 discovery and the OBO token exchange. Mirrors the kagent-agent and
oauth2-proxy world+cluster 443/10443 egress.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add klausGateway.slack.dmOnly (umbrella values + schema), forwarded to the
klaus-gateway subchart which renders it as SLACK_DM_ONLY. Restricts the Slack
adapter to direct messages — the recommended mode for the OBO gateway, which
is a DM-only bot. Default false.

Requires giantswarm/klaus-gateway#113 (the chart that renders the env).

Co-authored-by: Cursor <cursoragent@cursor.com>
Add klausGateway.slack.botToken/signingSecret/appToken (umbrella values +
schema), forwarded to the klaus-gateway subchart which renders the
slack.secretName Secret from them. Lets the per-cluster secret-values patch
stage SOPS-encrypted Slack creds that become the slack-credentials Secret.

Requires giantswarm/klaus-gateway#114 (the chart that renders the Secret).

Co-authored-by: Cursor <cursoragent@cursor.com>
…ic SA token

An agent that lists "authorization" in allowedHeaders now forwards the caller's
own Authorization header to muster. Its muster RemoteMCPServer omits the
headersFrom injection, and the per-agent token-mint Job, refresh CronJob, and
Secret-writer RBAC are no longer rendered, so the forwarded token reaches muster
unshadowed. A request carries a single Authorization header, so the two are
mutually exclusive; agents that do not forward authorization keep the previous
static service-account-token behaviour.

A ci/test-agent-forward-auth-values.yaml render test covers this (no headersFrom,
no token-mint resources).

Co-authored-by: Cursor <cursoragent@cursor.com>
…-umbrella-route

* origin/main:
  feat(kagent): OBO actor-token forwarding to muster via X-Actor-Token (#190)
  chore: align files according to platform standards (#189)
  chore: align files according to platform standards (#188)
  feat(kagent): forward the human token from sre-agent to muster for OBO (#187)
  fix(kagent): name sre-agent muster meta-tools so the UI stops showing "Unknown Tool" (#186)
  chore(deps): update gsoci.azurecr.io/giantswarm/agentgateway docker tag to v1.3.1 (#179)
  fix(kagent): refresh Dex id_token in oauth2-proxy for OBO (#184)

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	CHANGELOG.md
#	helm/agentic-platform/values.yaml
@teemow teemow merged commit 2a69e8e into main Jun 25, 2026
8 checks passed
@teemow teemow deleted the feat/klausgateway-obo-umbrella-route branch June 25, 2026 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant