Known defects
Three things are broken in the product itself rather than in your setup. They are listed here so you do not spend time debugging them, and each is described honestly rather than dressed up as intended behaviour.Installation
`npx myrqen link` fails with a 404
`npx myrqen link` fails with a 404
myrqen package is not published to npm — apps/cli/package.json carries
"private": true, and registry.npmjs.org/myrqen returns 404. Copy elsewhere in the
repository and on the marketing site that shows npx myrqen link describes an intended
future state, not something you can run.Build from source and put the CLI on your PATH instead. See
Installation.`myrqen: command not found`
`myrqen: command not found`
PATH shim instead:`apps/cli/dist/myrqen.mjs` does not exist
`apps/cli/dist/myrqen.mjs` does not exist
pnpm install && pnpm build from the repository root. The bundle is produced by the
CLI package’s build step, not by pnpm install.`/myrqen` is not offered in Claude Code
`/myrqen` is not offered in Claude Code
~/.claude/skills/myrqen/ or <repo>/.claude/skills/myrqen/.myrqen auto
works from any agent with shell access.Running a scan
`session start` exits 1 when the API is unreachable — known defect
`session start` exits 1 when the API is unreachable — known defect
- the device is linked,
- the repository has no existing workspace binding, and
- the API is unreachable — which, since the CLI’s default endpoint
https://api.myrqen.ccis not deployed, is the normal case today.
GET /api/v1/workspaces at
apps/cli/src/session/binding.ts:46, and that call has no error handling around it, so
session start throws and exits 1 before any local report exists. Nothing is
written; there is no partial result to recover.A repository that already has a binding is unaffected: describeExisting treats the
stored binding as authoritative and wraps its metadata lookup in a try/catch.Until it is fixed, two workarounds:--sync no alone does not avoid it: the binding is resolved before the sync question
is even considered.Everything says `needs_review` and nothing is verified
Everything says `needs_review` and nothing is verified
A finding submission is rejected (exit code 2)
A finding submission is rejected (exit code 2)
- an extra top-level field, including
id— the schema isadditionalProperties: falseand the CLI assigns ids; - a secret value that survived redaction;
- no evidence entries;
- a length or enum constraint from the schema.
The same issue appears twice in the report
The same issue appears twice in the report
finding verify — never a resubmission.An action is blocked (exit code 4)
An action is blocked (exit code 4)
strong_evidence and explain in the report why safe
validation was not possible. See
Authorization and safety.`myrqen logout` or `workspace --set` does nothing
`myrqen logout` or `workspace --set` does nothing
logout, workspace --set, and workspace --detach are
confirmation-gated, and confirmations default to deny in a non-interactive shell —
which is what an agent gives them. They print “Left unchanged”. Run them in a real
terminal.Docker is installed but hangs
Docker is installed but hangs
MYRQEN_ASSUME_NO_ISOLATION=1.Linking and accounts
`DEVICE_LINK_NOT_APPROVED` (428)
`DEVICE_LINK_NOT_APPROVED` (428)
`DEVICE_LINK_EXPIRED` (410)
`DEVICE_LINK_EXPIRED` (410)
myrqen link again.`DEVICE_LINK_ALREADY_CONSUMED` (409)
`DEVICE_LINK_ALREADY_CONSUMED` (409)
`DEVICE_REVOKED` (401)
`DEVICE_REVOKED` (401)
myrqen link again.I lost my password
I lost my password
/recover, together with a new password. Ten codes are shown
once at signup and that is the only recovery path — no email is ever sent.I lost my recovery codes too
I lost my recovery codes too
`/admin` says forbidden even though I am the only account
`/admin` says forbidden even though I am the only account
PLATFORM_ADMIN_EMAIL, and only at signup:
apps/web/lib/auth-service.ts computes
isPlatformAdmin = configuredPlatformAdminEmail() === email and nothing else ever sets
it. With the variable unset, the deployment has no administrator at all.So: set PLATFORM_ADMIN_EMAIL before signing up, then create that account. An
account that already exists is not promoted by setting the variable afterwards.Some copy elsewhere in the repository says the first account in a fresh deployment
becomes the platform administrator. That is not what the code does.Syncing and sharing
Myrqen never asks whether to sync
Myrqen never asks whether to sync
- the device is not linked;
- the repository is not bound to a workspace;
- the plan’s cloud-report quota is exhausted (
quota_blocked); --sync nowas passed;- the shell is non-interactive, in which case
cloud.stateisdecision_requiredand the agent is expected to ask you, then runmyrqen session sync-decision yes|no.
myrqen status shows which.`SYNC_DAILY_LIMIT_REACHED` / `SYNC_WEEKLY_LIMIT_REACHED`
`SYNC_DAILY_LIMIT_REACHED` / `SYNC_WEEKLY_LIMIT_REACHED`
details carries resetsAt,
and myrqen status prints the exact instants.After the reset:`REPORT_EXPIRED` (410)
`REPORT_EXPIRED` (410)
.myrqen/reports/ are untouched — reopen the HTML.A recipient sees nothing, or too little
A recipient sees nothing, or too little
Self-hosting
`DATABASE_URL is not configured`
`DATABASE_URL is not configured`
.env.example to .env at the repository root and set it. In production the
root .env is deliberately not loaded, so the variable must be a real environment
variable.`APP_BASE_URL is not configured` in production
`APP_BASE_URL is not configured` in production
NODE_ENV=production. Share links and session-cookie security are both
derived from it, so a localhost fallback would hand out links nobody can open and
cookies without Secure.Object storage refuses to start in production
Object storage refuses to start in production
filesystem driver is refused under NODE_ENV=production, because report bodies
would live on one container’s disk — lost on the next deploy and invisible to other
replicas. Set OBJECT_STORAGE_DRIVER=s3, or
OBJECT_STORAGE_ALLOW_EPHEMERAL=true for a throwaway production-mode run.Stored reports stopped opening after a key rotation
Stored reports stopped opening after a key rotation
REPORT_ENCRYPTION_KEY_PREVIOUS, which accepts retired keys for
reads. Without that, nothing encrypted under the old key can be decrypted.`/api/v1/ready` returns 503
`/api/v1/ready` returns 503
detail for the failing one. Gate traffic on ready and
container restarts on health, never the reverse.Rate limits behave as though there were none
Rate limits behave as though there were none
TRUSTED_PROXY_HOPS is unset, so there is no trustworthy client address and every
request shares one bucket. Set it to the number of proxies in front of the app —
Railway and most single-proxy platforms need 1.Separately, without REDIS_URL counters are process-local, so N replicas allow N times
each limit.The app refuses to start after adding Polar variables
The app refuses to start after adding Polar variables
POLAR_ACCESS_TOKEN, POLAR_ENVIRONMENT, POLAR_WEBHOOK_SECRET, and
POLAR_PRODUCTS are required together. A half-configured payment path takes money and
grants nothing, so it is refused outright.The benchmark reports a missed finding
The benchmark reports a missed finding
Getting more detail
doctor reports capability, not alarm: info is a missing convenience, and attention is
reserved for something that actually blocks the product.