From 9c3440a20bd2443726ab4e6e501d7193e7509b84 Mon Sep 17 00:00:00 2001 From: sonpiaz Date: Sun, 13 Sep 2026 00:05:00 -0700 Subject: [PATCH] feat: rewrite org profile to match live Kyma API and add a drift guard The profile still described a three-product lineup, linked a /ter page that now returns 404, and told readers to install a CLI package whose last release was 2026-04-26. - profile/README.md: one-sentence hero, the homepage's three-line quickstart, the Anthropic SDK base URL, the $0.50 signup credit, MCP and Agent Skills, and the three public repos pushed in the last ten days. - scripts/check-org-profile.sh: read-only check that fails when a link ends at 400 or above, an endpoint shown in code stops answering, or a model-count claim no longer matches /v1/models. - .github/workflows/check-org-profile.yml: runs the check every Monday at 09:00 UTC, on demand, and on pull requests that touch these files. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01A346zJ9Wy6iHMqVxkgnjNv --- .github/workflows/check-org-profile.yml | 23 ++++++++ profile/README.md | 70 ++++++++++++------------- scripts/check-org-profile.sh | 43 +++++++++++++++ 3 files changed, 99 insertions(+), 37 deletions(-) create mode 100644 .github/workflows/check-org-profile.yml create mode 100755 scripts/check-org-profile.sh diff --git a/.github/workflows/check-org-profile.yml b/.github/workflows/check-org-profile.yml new file mode 100644 index 0000000..dda3c3d --- /dev/null +++ b/.github/workflows/check-org-profile.yml @@ -0,0 +1,23 @@ +name: Check org profile + +on: + schedule: + - cron: "0 9 * * 1" # Monday 09:00 UTC + workflow_dispatch: + pull_request: + paths: + - "profile/**" + - "scripts/check-org-profile.sh" + - ".github/workflows/check-org-profile.yml" + +permissions: + contents: read + +jobs: + check: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v7 + - name: Check links, endpoints and model count in profile/README.md + run: bash scripts/check-org-profile.sh profile/README.md diff --git a/profile/README.md b/profile/README.md index af29162..87e9ff1 100644 --- a/profile/README.md +++ b/profile/README.md @@ -1,60 +1,56 @@
- Kyma + Kyma API -

Kyma

+

Kyma API

-

One API, one coding agent, one local workspace.

+

Kyma API gives your app one key for 100+ models across chat, embeddings, image, and audio, with published prices and measured uptime for every model.

- Hosted model access, the kyma CLI, and the kyma-ter workspace built to work together. -

- -

- Website - · - Docs - · - Kyma Ter - · - Windows Setup - · - Releases + Website · + Docs · + Pricing · + Rankings · + Status

--- -## Install +## Quickstart -```bash -npm install -g @kyma-api/agent +Keep the OpenAI SDK you already use and change the base URL and key: + +```python +from openai import OpenAI +client = OpenAI(base_url="https://kymaapi.com/v1", api_key="YOUR_KYMA_KEY") +print(client.chat.completions.create(model="qwen-3.6-plus", messages=[{"role": "user", "content": "Hello!"}]).choices[0].message.content) ``` -This installs: +With the Anthropic SDK, set `base_url` to `https://kymaapi.com` and call `messages.create` as usual. New accounts get $0.50 of free credit with no card required, and it can be spent on the free-tier models. More setup options are in the [docs quickstart](https://docs.kymaapi.com/quickstart). -- `kyma` -- `kyma-ter` +## What you get -## Products +- One API key and one balance for every model. +- A published price for each model, listed on [Pricing](https://kymaapi.com/pricing). +- Uptime measured for each model, published on [Status](https://kymaapi.com/status). +- Public model rankings built from real customer usage, on [Rankings](https://kymaapi.com/rankings). +- If a model's route fails, requests fall back automatically. -| Product | What it does | -| --- | --- | -| **Kyma API** | Hosted model gateway, account, balance, and docs. | -| **Kyma Agent** | The `kyma` coding CLI for direct terminal workflows. | -| **Kyma Ter** | The local browser workspace for parallel agent and shell sessions. | +## Use it from the tools you already have + +Kyma API works with OpenClaw, Cursor, Claude Code, Cline, Roo Code, Continue, Aider, OpenCode, and other OpenAI- or Anthropic-compatible clients. + +- **MCP:** connect any MCP client to `https://mcp.kymaapi.com/mcp`. You sign in with OAuth, and each connection has a spend cap you set. +- **Agent Skills:** run `npx skills add kyma-api/kyma-skills` to add four skills to your agent: connect a tool, pick a model by price and uptime, check spend and credits, and send a test completion. ## Repositories | Repository | What it contains | | --- | --- | -| [`kyma-api`](https://github.com/kyma-api/kyma-api) | Website, docs, and the `@kyma-api/agent` package. | -| [`kyma-ter`](https://github.com/kyma-api/kyma-ter) | The local multi-agent terminal workspace runtime. | -| [`kyma-ter-releases`](https://github.com/kyma-api/kyma-ter-releases) | Public release assets for `kyma-ter` binaries. | +| [`kyma-mcp-plugin`](https://github.com/kyma-api/kyma-mcp-plugin) | The MCP server guide, the stdio bridge, and plugin manifests for coding agents. | +| [`kyma-skills`](https://github.com/kyma-api/kyma-skills) | Agent Skills: `connect-my-tool`, `pick-a-model`, `check-spend-and-credits`, `send-a-test-completion`. | +| [`openclaw-provider`](https://github.com/kyma-api/openclaw-provider) | The plugin that adds Kyma API models to OpenClaw. | -## Platform +--- -| Platform | Status | -| --- | --- | -| macOS | Supported | -| Linux | Supported | -| Windows | `kyma` supported, `kyma-ter` beta, best with WSL2 for shell panes | +

Questions: hello@kymaapi.com

diff --git a/scripts/check-org-profile.sh b/scripts/check-org-profile.sh new file mode 100755 index 0000000..5c0f09b --- /dev/null +++ b/scripts/check-org-profile.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +# Fails when profile/README.md drifts from live facts. Read-only: it never edits a file. +# Usage: scripts/check-org-profile.sh [path/to/README.md] +set -uo pipefail + +readme="${1:-profile/README.md}" +models_url="https://api.kymaapi.com/v1/models" +ua="kyma-org-profile-check (+https://github.com/kyma-api/.github)" +fail=0 +status() { curl -sL -A "$ua" -o /dev/null -m 20 --retry 2 -w '%{http_code}' "$1"; } + +# Rule 1: every link a reader clicks or loads (href, src, markdown link) ends below 400 after redirects. +links=$(grep -oE '(href="|src="|\]\()https://[^")[:space:]]+' "$readme" | sed -E 's/^(href="|src="|\]\()//' | sort -u) +for url in $links; do + code=$(status "$url") + if [ "$code" = "000" ] || [ "$code" -ge 400 ]; then echo "FAIL link $url -> HTTP $code"; fail=1 + else echo "ok link $url -> HTTP $code"; fi +done + +# Rule 2: any other https URL is an API endpoint shown in code. A bare GET may answer 401 or 404, +# so it only has to answer at all: no connection or HTTP 5xx fails. +endpoints=$(grep -oE 'https://[^"'\''`)<>[:space:]]+' "$readme" | sort -u | grep -vxF -f <(printf '%s\n' "$links") || true) +for url in $endpoints; do + code=$(status "$url") + if [ "$code" = "000" ] || [ "$code" -ge 500 ]; then echo "FAIL endpoint $url -> HTTP $code"; fail=1 + else echo "ok endpoint $url -> HTTP $code"; fi +done + +# Rule 3: model-count claims match the live catalogue. "N+ models" needs at least N; "N models" needs exactly N. +count=$(curl -s -A "$ua" -m 20 --retry 2 "$models_url" | jq -r '.data | length' 2>/dev/null) +if ! [[ "$count" =~ ^[0-9]+$ ]]; then + echo "FAIL could not read the live model count from $models_url"; fail=1 +else + while read -r claim; do + n="${claim%%[+ ]*}" + if [[ "$claim" == *+* ]]; then [ "$count" -ge "$n" ]; else [ "$count" -eq "$n" ]; fi + if [ $? -eq 0 ]; then echo "ok \"$claim\" (live count $count)" + else echo "FAIL README says \"$claim\" but the live count is $count"; fail=1; fi + done < <(grep -oE '[0-9]+\+? models' "$readme" | sort -u) +fi + +if [ "$fail" -eq 0 ]; then echo "org profile check: passed"; else echo "org profile check: FAILED"; fi +exit "$fail"