Most Crew problems have a fix that fits in a shell command. This page is a triage guide. Start with a health check:
kirocrew doctor
doctor reports the status of every subsystem: kiro-cli binary discovery, agent authentication, embedding model, Slack tokens, config validity, and MCP server probes. If it flags an issue, jump to the matching section below.
The install target directory isn't on your PATH. Fixes depend on the installer:
pipx when available, else ~/.kiro/crew/venv. Ensure ~/.local/bin (pipx default) or ~/.kiro/crew/venv/bin is on PATH.pip install -e . — ensure your Python's script directory is on PATH. Typically ~/.local/bin (user install) or the venv's bin/.docker exec kirocrew kirocrew ….Then source ~/.bashrc (or restart your shell).
On Windows use python and py from a venv:
py -3.12 -m venv .venv .venv\Scripts\activate pip install -e . tzdata python -m kiro_crew gateway
tzdata is required — Windows ships no IANA zone database, so zoneinfo.ZoneInfo(...) fails without it.
The entrypoint probed the inner Linux user-namespace sandbox and it failed under the container runtime's seccomp/AppArmor policy. Two options:
--security-opt seccomp=<profile permitting unshare/clone>. The gateway probes again on next start and enables the sandbox.-e KIROCREW_ALLOW_UNSANDBOXED=1. Agent commands run without the inner sandbox; the container remains the only isolation boundary.Log output on start states which posture was chosen.
The agent backend didn't respond to the handshake. Common causes:
kiro-cli not installed — the dashboard Set up Kiro page walks you through it, or kirocrew doctor reports missing binarykiro-cli loginkirocrew setup --agent-only --clean rebuilds the agent from scratchThe kiro-cli process crashed. Crew auto-recovers by recreating the session and retrying. If it repeats:
kirocrew logs -f for the underlying erroragent.max_subagents) or increase host memoryThe active project directory isn't set. Check with kirocrew config get project_dir, or set it in the dashboard's session header.
If the CWD is set but the agent still can't read a specific path, check the OS sandbox — some paths are hidden in auto and strict modes.
kirocrew doctor reports whether the bundled runtime downloaded the modelexport KIROCREW_EMBED_MODEL_URL=<url>ollama pull qwen3-embedding:0.6b and check curl http://localhost:11434/api/tagsUntil the model lands, memory falls back to keyword search (LIKE on text + tags). The agent still runs — just without semantic ranking.
The restored memory.db is corrupted. Usually a copy-paste issue (interrupted transfer). Try:
kirocrew restore snapshot.tar.gz --mode replace --dry-run # preview kirocrew restore snapshot.tar.gz --mode replace --components memory
If it still fails, the snapshot itself is bad. Restore from an older snapshot or manually import memory.db from another source.
df -h ~/.kiro/crew; SQLite silently fails on write when the disk fillsSlack is optional — the dashboard works without it. If you want Slack:
cat ~/.kiro/crew/.env should show SLACK_APP_TOKEN=xapp-…, SLACK_BOT_TOKEN=xoxb-…, KIROCREW_OWNER_ID=U0…kirocrew setup — the wizard prompts for both tokenskirocrew doctor reports Slack connect statusKIROCREW_OWNER_ID. Only your Slack Member ID can DM the bot. Non-owner messages are silently dropped.slack.allowed_enterprise_ids is set, messages from other workspaces are droppedkirocrew logs -f for websocket disconnect errorsYou added a new feature that needs a scope not granted at install time. Fix:
kirocrew setup — paste the new bot tokenAdd app_home_opened event, enable Home Tab in Slack app settings, reinstall the app.
Known Slack UI bug. Use Features → OAuth & Permissions → Install to Workspace instead — it does the same thing.
DISCORD_BOT_TOKEN is set and kirocrew doctor reports Discord connecteddiscord.allowed_users (deny-by-default allowlist)Add the user's Discord ID to discord.allowed_users via config or the dashboard's Discord settings panel.
Discord caps messages at 2000 characters. The transport splits automatically. If you see truncation instead of a split, check for a fragile custom formatter.
~/.kiro/agents/kirocrew.json has kirocrew-core and kirocrew-cronincludeMcpJson: false is setkirocrew doctor — it reports MCP probe statusNukes and rebuilds MCP config from scratch. Solves most "broken MCP" issues.
The gateway auto-triggers a probe when a new server appears, but results only surface on the next dashboard refresh. Wait a few seconds and reload. If it stays "Unknown", the server is failing to handshake — check the error text or kirocrew logs -f.
Correct behavior. kirocrew-core and kirocrew-cron are agent-scoped and should not appear in interactive kiro-cli sessions. If they do, something wrote them to a provider global — file a bug.
Check the Crew badge on the row. When it stays green, the preservation rule copies the server's config into ~/.kiro/crew/mcp.json before removing it from the global, so it keeps loading in Crew sessions.
Toggle the Crew badge off before removing from the global to fully remove.
Session reset drains the warm pool. Use Dashboard → Apply & Restart, or run kirocrew config set (which auto-triggers a restart).
kirocrew token --ttl 2hThe bundled runtime downloads its model over HTTPS from the Crew CDN on gateway startup. Check:
~/.kiro/crew/models/KIROCREW_EMBED_MODEL_URL to a mirror if the default CDN is unreachableUntil the model lands, memory works with keyword search.
session.pool_size (default 1) if you have RAM to spare.The gateway is still initializing. Common causes:
Wait 30 seconds, then refresh. Persistent → check kirocrew logs -f.
kirocrew doctor # diagnose kirocrew gateway --port auto # try a random port if 5476 is in use
If port 5476 is in use:
lsof -iTCP:5476 -sTCP:LISTEN # find what's on it
kirocrew restartSession context is filling too fast. Options:
skills.lazy_load: true for stricter budgetingsession.autocompact_pct: 95Watchdog fires at 60 min (warn) and 2 h (reset). If the task is genuinely stuck:
kirocrew logs -f for the specific step's session activityPOST /api/taskrunner/{task_id}/retry with from_step: NTEST_TIMEOUT is 90 min per test run; if your test suite takes longer, override with a per-step config or split the taskkirocrew run TASK.md --no-test to see what the agent produces before the test gateThe task retried the same failing step 3 times with identical errors. The task runner marks the step FAILED to avoid burning through retries on an impossible fix.
Debug: check the step's error message. Common causes:
Consider marking the step requires_approval: true and inspecting the state manually.
Check spawn list for status. If it shows stalled (no activity in 120s), the subagent is idle — either legitimately (waiting on approval) or stuck.
spawn cancel <id> from the dashboard row Stop buttonThe reaper force-reaps at the 30-minute hard timeout.
The subagent may have failed at spawn (empty task, low memory, cwd rejected, governance denial). Check spawn list for a terminal failed state with the reason.
kirocrew cron list shows status--no-crons was passed to gateway — the scheduler is disabledCheck the delivery routing:
<!-- deliver:C0123CHANNEL --> marker: routes to that Slack channel--silent: no notification unless the agent explicitly sends onekirocrew config set — auto-triggers a session pool restart. Should work.kirocrew restartkirocrew restart to force a reloadYou set a numeric config value outside the allowed range. It was clamped to the boundary; the SEL entry records the clamp. Adjust your value or check the Configuration reference for the valid ranges.
WAL checkpoint failed because the gateway holds a lock. The snapshot still proceeds — SQLite's backup() API produces a consistent copy including committed WAL data. The warning is informational.
Snapshots reject symlinks and hardlinks for security. If your snapshot contains one (unusual), the archive is malformed. Regenerate the snapshot from a clean source.
Set instances.enabled: true in ~/.kiro/crew/config.json and restart the gateway.
The CSP frame-src relaxation only applies to active tunnel ports. Confirm the instance is connected (Manage panel shows a green connected badge), not just added.
Refresh SSH credentials (re-add key to ssh-agent). Tunnels self-heal once SSH is restored.
Health probe + 2-tier self-heal retries over ~2 min (8 attempts, capped exponential backoff). If it gives up, diagnosis runs automatically. Check:
ssh <host> kirocrew doctor)Grant the browser microphone permission for the dashboard origin. In Chrome: address bar padlock → Site settings → Microphone → Allow.
~/.kiro/crew/voices/aws_transcribe for cloud-grade accuracy: pip install "kirocrew[voice]", then set voice.stt_provider: "aws_transcribe" and configure AWS credentialsThe reaper stack is missing for that profile / region. Two options:
install-reaper.sh --profile <name> --region <region>ttl_hours: 0 (persistent, no reaper needed)The deployed site's headers pre-date the current base stack. Any subsequent deploy updates the stack in place. Until then, the card shows the status fallback with a plain link — click through to see the site.
If nothing here fits your issue:
kirocrew logs -f (live tail), kirocrew doctor --verbosedocs/system-specs/modules/ in the Crew repo
Troubleshooting