You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+10-4Lines changed: 10 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -506,18 +506,24 @@ Changesets are **not** required on every PR — they're optional and only meanin
506
506
507
507
1. Merge the pending `chore: version packages` PR to land the version bump in `packages/manifest/package.json`.
508
508
2. Go to **GitHub Actions → Docker → Run workflow**, leave the `version` input blank, click Run.
509
-
3. The `publish` job reads `packages/manifest/package.json`, resolves the version automatically, and pushes `manifestdotbuild/manifest:{version}` + `{major}.{minor}` + `{major}` + `sha-<short>` to Docker Hub. The image is multi-arch (amd64 + arm64) and cosign-signed.
509
+
3. The `publish` job reads `packages/manifest/package.json`, resolves the version automatically, and pushes `manifestdotbuild/manifest:{version}` + `{major}.{minor}` + `{major}` + `sha-<short>` to Docker Hub. The image is multi-arch (amd64 + arm64) and cosign-signed. The `sync-description` job also runs in the same workflow_dispatch and pushes the latest `docker/DOCKER_README.md` to the Docker Hub repo description.
510
510
511
511
To retag an older commit or publish a hotfix version that doesn't match the current `package.json`, pass a semver string in the `version` input and it overrides the package.json lookup.
512
512
513
+
### Docker Hub description
514
+
515
+
`docker/DOCKER_README.md` is the source of truth for the Docker Hub repo description at [`manifestdotbuild/manifest`](https://hub.docker.com/r/manifestdotbuild/manifest). The `sync-description` job in `docker.yml` pushes it to Docker Hub via the [`chko/docker-pushrm`](https://github.com/christian-korneck/docker-pushrm) container image (standalone `docker run`, no third-party GitHub Action). It uses the same `DOCKERHUB_USERNAME` / `DOCKERHUB_TOKEN` secrets as the publish job — the Docker Hub PAT needs write access to the repo, which the existing token already has for image pushes. Edits to `docker/DOCKER_README.md` are treated as doc-only: they do **not** trigger the PR validate job (no point rebuilding multi-arch images for content changes), and they auto-sync to Docker Hub on merge to main via a dedicated `push:` trigger with a narrow paths filter. The `chko/docker-pushrm` image is pinned to an immutable digest in the workflow — when bumping, re-fetch the digest via `docker manifest inspect chko/docker-pushrm:1` or the registry API (see the inline comment in `docker.yml`).
516
+
513
517
### Summary of what CI does on each trigger
514
518
515
519
| Trigger | What happens |
516
520
|---------|--------------|
517
-
| PR opened/updated |`ci.yml` runs tests, lint, typecheck, coverage. `docker.yml` validates the Docker build (no push) if the PR touches runtime files. `changeset-check` warns softly if no changeset is present. |
521
+
| PR opened/updated (runtime files) |`ci.yml` runs tests, lint, typecheck, coverage. `docker.yml` validates the Docker build (no push). `changeset-check` warns softly if no changeset is present. |
522
+
| PR opened/updated (`docker/DOCKER_README.md` only) | No Docker CI runs — content-only change, nothing to validate. |
518
523
| Merge to `main`|`release.yml` runs `changesets/action` to open or update the `chore: version packages` PR. **No auto-publish** — neither npm nor Docker. |
519
-
| Merge of `chore: version packages` PR |`release.yml` runs again. Version bump in `packages/manifest/package.json` and the CHANGELOG update land on `main`. Still no publish. |
520
-
| Manual `workflow_dispatch` on `Docker` workflow | Reads `packages/manifest/package.json` and pushes a new image tag to Docker Hub. This is the **only** path that publishes anything. |
524
+
| Merge of `chore: version packages` PR |`release.yml` runs again. Version bump in `packages/manifest/package.json` and the CHANGELOG update land on `main`. Still no image publish. |
525
+
| Merge of a PR that touched `docker/DOCKER_README.md`|`docker.yml``sync-description` job runs, pushing the new README to Docker Hub via `chko/docker-pushrm`. No image rebuild. |
526
+
| Manual `workflow_dispatch` on `Docker` workflow |`publish` job reads `packages/manifest/package.json` and pushes a new image tag to Docker Hub. `sync-description` also runs in parallel and re-syncs the Docker Hub description. This is the **only** path that publishes image artifacts. |
Manifest is a smart model router for OpenClaw. It sits between your agent and your LLM providers, scores each request, and routes it to the cheapest model that can handle it. Simple questions go to fast, cheap models. Hard problems go to expensive ones. You save money without thinking about it.
20
+
Manifest is a smart model router for **personal AI agents** like OpenClaw or Hermes. It sits between your agent and your LLM providers, scores each request, and routes it to the cheapest model that can handle it. Simple questions go to fast, cheap models. Hard problems go to expensive ones. You save money without thinking about it.
21
21
22
-
- Route requests to the right model: Cut costs up to 70%
23
-
- Automatic fallbacks: If a model fails, the next one picks up
24
-
- Set limits: Don't exceed your budget
22
+
- Route requests to the right model: cut costs up to 70%
23
+
- Automatic fallbacks: if a model fails, the next one picks up
24
+
- Set limits: don't exceed your budget
25
+
- Self-hosted: your requests, your providers, your data
Works with 300+ models across OpenAI, Anthropic, Google Gemini, DeepSeek, xAI, Mistral, Qwen, MiniMax, Kimi, Amazon Nova, OpenRouter, Ollama, and any provider with an OpenAI-compatible API.
31
+
Works with 300+ models across OpenAI, Anthropic, Google Gemini, DeepSeek, xAI, Mistral, Qwen, MiniMax, Kimi, Amazon Nova, Z.ai, OpenRouter, Ollama, and any provider with an OpenAI-compatible API. Connect with an API key, or reuse an existing paid subscription (ChatGPT Plus/Pro, Claude Max/Pro, GLM Coding Plan, etc.) where supported.
31
32
32
33
## Manifest vs OpenRouter
33
34
@@ -36,7 +37,7 @@ Works with 300+ models across OpenAI, Anthropic, Google Gemini, DeepSeek, xAI, M
36
37
| Architecture | Your Manifest instance forwards to your providers | Cloud proxy. All traffic goes through their servers |
37
38
| Cost | Free | 5% fee on every API call |
38
39
| Source code | MIT, fully open | Proprietary |
39
-
| Data privacy |Metadata only (Cloud), no middleman (self-hosted)| Prompts and responses pass through a third party |
40
+
| Data privacy |Self-hosted — no middleman | Prompts and responses pass through a third party |
40
41
| Transparency | Open scoring. You see why a model was chosen | No visibility into routing decisions |
41
42
42
43
---
@@ -121,6 +122,18 @@ environment:
121
122
122
123
If you see "Invalid origin" on the login page, `BETTER_AUTH_URL` doesn't match the port you're using.
123
124
125
+
## Image tags
126
+
127
+
Every release is published with the following tags:
0 commit comments