execution.url pointing at the dashboard. Open it for full input/output and stack traces.
Deploy fails
”No entrypoint found”
Symptom: the deploy log says it couldn’t find an entrypoint and the build is marked failed. Cause: Reminix only looks for specific filenames at the project root. Fix: rename your file to one of these:| Language | Allowed entrypoints (in order) |
|---|---|
| TypeScript / JavaScript | server.ts, agent.ts, index.ts (or .js) |
| Python | server.py, agent.py, main.py |
-d <path> to reminix deploy.
”Container exited immediately”
Symptom: the build succeeds but the container shuts down within seconds and the agent never becomes reachable. Cause: your entrypoint runs to completion without callingserve(). Once the script returns, the process ends.
Fix: make sure serve(...) is the last (or top-level) call in your entrypoint, with at least one agent or tool registered.
Agent unreachable inside the container
Symptom: deploy succeeds, status is “live”, but every invocation returns502.
Cause: the server is listening on localhost / 127.0.0.1, which is unreachable from outside the container.
Fix: use the default serve() host. Don’t override host/hostname to localhost. Reminix routes traffic to 0.0.0.0 on the configured PORT.
Runtime fails
”Secret not found at runtime”
Symptom: the handler throwsKeyError: 'OPENAI_API_KEY' (Python) or Cannot read properties of undefined reading process.env.OPENAI_API_KEY (TypeScript).
Cause: the secret hasn’t been set on the project, or you’re reading the wrong name.
Fix:
Openai_Api_Key and OPENAI_API_KEY are different secrets. See Configuration & Secrets for the full reference.
Agent times out (504 TimeoutError)
Symptom: invocation returns 504 Gateway Timeout after roughly the project’s configured timeout.
Cause: your handler is taking too long. The most common reasons:
- A slow upstream API (model provider, database) without a timeout configured on your side
- A retry loop that doesn’t bound itself
- Synchronous I/O that’s blocking the event loop in an
asynchandler
- Stream the response. Convert your handler to an async generator and yield as soon as data is available — clients see output without waiting for the full response. See Streaming.
- Set timeouts on your upstream calls. Don’t rely on defaults.
- For genuinely long jobs, use a Workflow and resume in steps instead of one long invocation.
Agent throws an unhandled error (502 ExecutionError)
Symptom: invocation returns 502 Bad Gateway with error.type: "ExecutionError".
Cause: your handler raised an exception the runtime didn’t expect.
Fix: open the execution.url in the response. The dashboard shows the input that caused it, the stack trace, and the duration. Reproduce locally with the same input, then either fix the bug or wrap the failing call in a try/except and return a sanitized error so users don’t see your stack traces.
Validation error (400 ValidationError)
Symptom: every call returns 400 with a message like Input field 'prompt' is required.
Cause: the request body doesn’t match the agent’s input schema. Either the caller is wrong or the schema isn’t what you think it is.
Fix:
- Confirm the agent type. A
promptagent expects{ "input": { "prompt": "..." } }. Achatagent expects{ "input": { "messages": [...] } }. See Agents. - If you defined a custom schema (Zod or Pydantic), check that the field names and types match the request.
- The dashboard’s execution log shows the exact input the runtime received.
MCP tools
MCP client can’t reach the server
Symptom: Claude Desktop / Cursor / Windsurf shows the Reminix server as failed or “no tools available”. Cause: usually one of:- The
Authorizationheader is missing or wrong - The client is reaching
https://api.reminix.com/mcpbut the server is misconfigured
-
Verify the token works against the REST API:
If this returns
401, your token is invalid — issue a new one from the dashboard. -
Check the MCP config matches the format in Connecting an MCP client. The header must be
Authorization: Bearer <token>, not just<token>. - Restart the MCP client after editing its config. None of the popular clients pick up changes hot.
Tools don’t appear in the client
Symptom: the MCP server connects but no tools show up. Cause: the project has no tools deployed, or you’re authenticated to the wrong project. Fix:serve(). If the list is populated, check whether your token is scoped to a different project — Personal Access Tokens need an X-Project header to choose one.
Invocations
404 Not Found invoking an agent
Symptom: you call POST /v1/agents/my-agent/invoke and get 404.
Cause: one of:
- The agent name doesn’t match what’s registered. The name is the string passed to
agent("my-agent", ...)(TypeScript) orname="my-agent"(Python), or the function name ifnameis omitted in Python. - The deploy succeeded but discovery missed the agent — usually because the entrypoint never reached the
serve()call.
401 AuthenticationError
Symptom: every request returns 401.
Cause: the Authorization header is missing, malformed, or the token is invalid.
Fix:
- Format must be
Authorization: Bearer reminix_sk_...— theBearerprefix is required. - Project API keys (
reminix_sk_) only work for the project they were issued for. - Personal Access Tokens (
reminix_pat_) require anX-Projectheader naming the target project. See Authentication.
429 RateLimitError
Symptom: intermittent 429 responses under load.
Cause: you’ve exceeded your project’s rate limit.
Fix: add exponential backoff in your client code. The SDK does not retry automatically — see the retry pattern in TypeScript Error Handling or Python Error Handling.
Streaming
Stream connection drops mid-response
Symptom: an SSE stream cuts off before[DONE].
Cause: an intermediate proxy (corporate firewall, CDN, ngrok free tier) closed an idle connection, or the agent itself raised an exception.
Fix:
- Check the
execution.urlfor the run. If the agent threw, the dashboard shows it. - If the agent finished cleanly but the stream closed early, the issue is on the network path, not Reminix. Test from a different network or use the Try it panel on the agent’s detail page in the dashboard.
- Handle stream errors in your client — every stream may emit an
errorevent before closing. See Streaming → Error handling.
Workflows
Paused workflow expired
Symptom: trying to resume a workflow returns “run not found” or “run failed”. Cause: workflow runs have a maximum lifetime. If a paused workflow isn’t resumed in time, it’s markedfailed and the run is no longer resumable.
Fix: check the lifetime in your project settings. For approval flows that may sit idle for hours or days, set a longer timeout. For ephemeral interactive flows, the default is fine — make sure your client stores the run_id and resumes promptly.
Still stuck?
- Open the failed execution in the dashboard via the
execution.urlin the response. The full input, output, logs, and timing are there. - Tail the deploy logs with
reminix deploy status <id>. - Reach out via the support email with the execution ID — that’s enough for us to find the run.
Next steps
Errors
The error response shape and full status code reference.
Configuration & Secrets
How env vars and secrets work end-to-end.
Deploy from GitHub
The deploy flow from connect to live.
CLI Reference
The commands referenced throughout this page.