Skip to content

Commit a775793

Browse files
authored
Merge pull request #1525 from mnfst/not-just-claw
feat: reframe Manifest as a router for any personal AI agent
2 parents 0fc10ef + 2651f38 commit a775793

File tree

10 files changed

+42
-33
lines changed

10 files changed

+42
-33
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"manifest": patch
3+
---
4+
5+
Rebrand Manifest as a smart model router for any personal AI agent (OpenClaw, Hermes, OpenAI SDK, Vercel AI SDK, LangChain, cURL) rather than OpenClaw-only. Login subtitle, default platform selection in the Connect Agent modal, and backend comments now reflect the broader positioning. CLAUDE.md and CONTRIBUTING.md updated with the new framing.

CLAUDE.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# Manifest Development Guidelines
22

3-
Last updated: 2026-04-09
3+
Last updated: 2026-04-12
4+
5+
## What Manifest Is
6+
7+
Manifest is a smart model router for **personal AI agents**. It sits between an agent and its LLM providers, scores each request, and routes it to the cheapest model that can handle it. The dashboard tracks costs, tokens, and messages across any agent that speaks OpenAI-compatible HTTP.
8+
9+
**Supported agents** (configured in `packages/shared/src/agent-type.ts`): OpenClaw, Hermes, OpenAI SDK, Vercel AI SDK, LangChain, cURL, and a generic `other` slot. OpenClaw remains the deepest integration — we ship two first-party plugins for it under `packages/openclaw-plugins/` — but no new code or copy should frame Manifest as OpenClaw-only. When adding examples, prefer "personal AI agent" as the noun and pick OpenClaw as the worked example rather than the sole target.
410

511
## IMPORTANT: Cloud Mode Always
612

CONTRIBUTING.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ The frontend runs on `http://localhost:3000` and proxies API requests to the bac
7676

7777
4. With `SEED_DATA=true`, you can log in with `admin@manifest.build` / `manifest`.
7878

79-
## Testing with OpenClaw
79+
## Testing Routing with a Personal AI Agent
80+
81+
Manifest is a smart router for any personal AI agent that speaks OpenAI-compatible HTTP. The list of supported agents lives in `packages/shared/src/agent-type.ts` — OpenClaw, Hermes, OpenAI SDK, Vercel AI SDK, LangChain, and cURL are all first-class. The dashboard's "Connect Agent" flow generates the right setup snippet for whichever platform you pick.
82+
83+
This section walks through **OpenClaw** because it's the deepest integration and the easiest to wire up end-to-end. The same backend also handles all other agents — just follow the dashboard instructions after creating the agent, or grab the snippet shown by the setup modal.
8084

8185
To test routing against your local backend, add Manifest as a model provider in your OpenClaw config:
8286

@@ -98,7 +102,7 @@ openclaw config set agents.defaults.model.primary manifest/auto
98102
openclaw gateway restart
99103
```
100104

101-
No plugin needed for this. The backend runs standalone and OpenClaw talks to it as a regular model provider.
105+
No plugin needed for this. The backend runs standalone and OpenClaw talks to it as a regular model provider. For other agents (OpenAI SDK, Vercel AI SDK, LangChain, cURL, …) follow the corresponding tab in the dashboard's "Connect Agent" modal — the underlying endpoint and auth are identical.
102106

103107
**When to use this:**
104108

README.md

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</picture>
77
</p>
88
<p align="center">
9-
Take control of your OpenClaw costs
9+
Affordable Personal AI
1010
</p>
1111

1212
![manifest-gh](https://github.com/user-attachments/assets/7dd74fc2-f7d6-4558-a95a-014ed754a125)
@@ -37,7 +37,7 @@
3737

3838
## What is Manifest?
3939

40-
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.
40+
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.
4141

4242
- Route requests to the right model: Cut costs up to 70%
4343
- Automatic fallbacks: If a model fails, the next one picks up
@@ -49,24 +49,12 @@ Manifest is a smart model router for OpenClaw. It sits between your agent and yo
4949

5050
Go to [app.manifest.build](https://app.manifest.build) and follow the guide.
5151

52-
### Local version
53-
54-
```bash
55-
openclaw plugins install manifest
56-
openclaw gateway restart
57-
```
58-
59-
Dashboard opens at **http://127.0.0.1:2099**. The plugin starts an embedded server, runs the dashboard locally, and registers itself as a provider automatically. No account or API key needed.
60-
61-
### Docker
52+
### Self-hosted (Docker)
6253

6354
Our <a href="https://hub.docker.com/r/manifestdotbuild/manifest">Manifest Docker Image</a> allows you to self-host Manifest router in your own infrastructure.
6455

65-
### Which version choose?
66-
67-
Pick cloud version for quick setup and multi-device access. Pick local version for keeping all your data on your machine or for using local models like Ollama. Pick Docker for self-hosting on your own infrastructure.
68-
69-
Not sure which one to choose? Start with cloud.
56+
> [!WARNING]
57+
> Our [OpenClaw plugin](https://www.npmjs.com/package/manifest) is deprecated, for self-hosting we suggest using Docker instead.
7058
7159
## How it works
7260

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/backend/src/model-discovery/model-discovery.service.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,10 @@ export class ModelDiscoveryService {
163163
}));
164164

165165
// Filter out models confirmed to lack tool support (models.dev toolCall === false).
166-
// In the OpenClaw context every request includes tools, so models without
167-
// tool calling are unusable. Only filter when models.dev has data — if no
168-
// entry exists we keep the model (we don't know its capabilities).
166+
// Personal AI agents (OpenClaw, Hermes, SDK-based agents) almost always
167+
// include tools in every request, so models without tool calling are
168+
// unusable. Only filter when models.dev has data — if no entry exists we
169+
// keep the model (we don't know its capabilities).
169170
const filtered = enriched.filter((model) => {
170171
const mdEntry = this.modelsDevSync?.lookupModel(provider.provider, model.id);
171172
if (mdEntry && mdEntry.toolCall === false) return false;

packages/backend/src/routing/proxy/proxy.service.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ import { buildFriendlyResponse, getDashboardUrl } from './proxy-friendly-respons
2424
export { FailedFallback } from './proxy-fallback.service';
2525

2626
/**
27-
* Roles excluded from scoring. OpenClaw (and similar tools) inject a large,
28-
* keyword-rich system prompt with every request. Scoring it inflates every
29-
* request to the most expensive tier. We strip these before the scorer sees
30-
* them, but forward the full unmodified body to the real provider.
27+
* Roles excluded from scoring. Personal AI agents (OpenClaw, Hermes, and
28+
* similar tools) inject a large, keyword-rich system prompt with every
29+
* request. Scoring it inflates every request to the most expensive tier.
30+
* We strip these before the scorer sees them, but forward the full
31+
* unmodified body to the real provider.
3132
*/
3233
const SCORING_EXCLUDED_ROLES = new Set(['system', 'developer']);
3334
const SCORING_RECENT_MESSAGES = 10;

packages/frontend/src/pages/Login.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ const Login: Component = () => {
111111
<Show when={!localRedirecting()}>
112112
<div class="auth-header">
113113
<h1 class="auth-header__title">Welcome back</h1>
114-
<p class="auth-header__subtitle">Take control of your OpenClaw costs</p>
114+
<p class="auth-header__subtitle">Take control of your AI agent costs</p>
115115
</div>
116116

117117
<SocialButtons />
@@ -121,7 +121,11 @@ const Login: Component = () => {
121121
</div>
122122

123123
<form class="auth-form" onSubmit={handleSubmit}>
124-
{error() && <div class="auth-form__error" role="alert">{error()}</div>}
124+
{error() && (
125+
<div class="auth-form__error" role="alert">
126+
{error()}
127+
</div>
128+
)}
125129
<Show when={needsVerification()}>
126130
<button
127131
type="button"

packages/frontend/src/pages/Workspace.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const AddAgentModal: Component<{ open: boolean; onClose: () => void }> = (props)
3636
const navigate = useNavigate();
3737
const [name, setName] = createSignal('');
3838
const [category, setCategory] = createSignal<AgentCategory | null>('personal');
39-
const [platform, setPlatform] = createSignal<AgentPlatform | null>('openclaw');
39+
const [platform, setPlatform] = createSignal<AgentPlatform | null>(null);
4040
const [creating, setCreating] = createSignal(false);
4141

4242
const handleCategoryChange = (c: AgentCategory) => {
@@ -72,7 +72,7 @@ const AddAgentModal: Component<{ open: boolean; onClose: () => void }> = (props)
7272
const resetForm = () => {
7373
setName('');
7474
setCategory('personal');
75-
setPlatform('openclaw');
75+
setPlatform(null);
7676
};
7777

7878
const handleKeyDown = (e: KeyboardEvent) => {

packages/frontend/src/services/providers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export interface ProviderDef {
1212
keyPlaceholder: string;
1313
noKeyRequired?: boolean;
1414
localOnly?: boolean;
15-
/** Provider supports OpenClaw OAuth/subscription auth (setup-token, OAuth, device-login). */
15+
/** Provider supports agent-side OAuth/subscription auth (setup-token, OAuth, device-login). */
1616
supportsSubscription?: boolean;
1717
/** Label shown in the subscription tab for this provider. */
1818
subscriptionLabel?: string;

0 commit comments

Comments
 (0)