Known limitations
Nothing on this page is a workaround for something broken in the product. The three defects that used to be listed here — the CLI not being on npm, the hosted API not being deployed, andsession start exiting 1 when the API was unreachable — are all fixed. The
last one is covered by
apps/cli/test/offline-resilience.test.mjs,
which asserts that a linked device with a failing API still produces the local report an
unlinked device gets, and names the reason.
What remains are limits rather than defects, and each is stated in every report’s coverage
notes:
Installation
`myrqen: command not found` after a global install
`myrqen: command not found` after a global install
PATH. Either add it, or skip the global
install entirely:sudo npm install -g. If the global install itself failed with EACCES,
npm’s directory is not writable — use npx, or a Node version manager.Your agent cannot find `myrqen`, but your shell can
Your agent cannot find `myrqen`, but your shell can
PATH. Use a shim instead of an alias:`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
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 login again.`DEVICE_LINK_ALREADY_CONSUMED` (409)
`DEVICE_LINK_ALREADY_CONSUMED` (409)
`DEVICE_REVOKED` (401)
`DEVICE_REVOKED` (401)
myrqen login 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.