npx skills add ...
npx skills add base44/skills --skill base44-troubleshooter
Troubleshoot production issues using backend function logs and workflow run history. Use when investigating app errors, debugging function calls, diagnosing why a scheduled job or automation failed, or diagnosing production problems in Base44 apps.
npx skills add base44/skills --skill base44-troubleshooter
Verify authentication before fetching logs:
If not authenticated or token expired, instruct user to run npx base44 login.
Resolve app context in one of these ways:
| Command | Description | Reference |
|---|---|---|
base44 logs | Fetch function logs for this app | project-logs.md |
base44 workflows runs | List workflow runs, newest first; failed runs carry the failing task and the underlying error | workflows-runs.md |
base44 workflows list | List this app's workflows with status and run summary | workflows-list.md |
A single fetch that misses your run proves nothing. One-shot base44 logs reads
an index that lags behind the invocation, so an empty result right after triggering a
function is the expected result, not evidence of a problem.
--follow. Where the realtime stream is available it
delivers lines in under a second. Where it is not, the CLI says so and polls
instead (Warning: Realtime logs are not available for this app — falling back to polling (lines may lag ~20-30s).). Either way --follow is the right tool — you never
have to pick.--limit, dropping --level, or switching
--order changes nothing about a line that has not been ingested yet, and
re-rolling flags is how agents talk themselves into a wrong diagnosis.--followIf you can trigger the failure (or it is happening now), start here rather than fetching after the fact:
Then invoke the function and read what arrives. Rules that keep you from misreading a healthy stream:
--since is rejected with --follow (the stream starts from now), as are
--until and --order. For anything historical, use a one-shot fetch.Error: The realtime log stream stopped and could not be re-established, exit code 1. That exit is the stream
giving up, not proof that logging is broken — re-run the same command rather than
changing flags.Workflows are the automation system — cron schedules, entity triggers, connector events, in-app agent actions. When the complaint is "my scheduled job didn't run" or "the automation stopped working", function logs are the wrong tool. They show what a function printed; they cannot tell you whether a run was dispatched at all, which task inside it failed, or why the workflow stopped firing.
A failed run carries the failing task and the underlying error, so start there and drop
into base44 logs only once you know which function a failing task called.
workflows list reports consecutiveFailures — anything above zero is a workflow that
needs attention.
Two things that mislead here:
manual in the trigger column does not mean a person clicked something. It is
what a run is stamped with when it was dispatched with no trigger type at all.(scheduled, test).
A run you fired yourself to check something will show up in the list.Start by pulling the latest errors across all functions:
If you know which function is failing:
If you are outside the project directory, pass the app explicitly:
A --function filter is a filter on stamped rows. Apps still on the legacy
per-function deployment emit unstamped rows, so a filtered view can hide them; this
self-heals on the app's next deploy. If a filtered run comes back empty, re-run
without --function before concluding there are no logs.
Correlate with user-reported issue timestamps:
--limit explicitly to reach further back — there is no default page size, and a value above 500 is clamped down to 500No logs found matching the filters. is ambiguous — never read it as "healthy". It
means one of:
--env prod
(No production logs found. — try --env preview for draft logs)