Dashboard¶
Yeti's web dashboard gives you a real-time view of everything the daemon is doing. It runs at http://localhost:9384 by default --- a warm outpost where you can monitor all the activity happening across your repositories.
Authentication¶
The dashboard supports two authentication methods, which can be used independently or together:
Token auth --- Set authToken in your config. Pass the token as a query parameter or use the login form:
http://localhost:9384?token=your-secret-token
GitHub OAuth --- Configure your GitHub App's OAuth credentials (githubAppClientId, githubAppClientSecret, externalUrl) to enable "Sign in with GitHub" on the login page. Users must be members of at least one organization in githubOwners. See GitHub App Setup --- OAuth for details.
When both methods are configured, the login page shows both options. Without either configured, the dashboard is open to anyone who can reach the port --- fine on private networks or behind a reverse proxy with its own auth layer.
Main page¶
The root page (/) is your command center. It shows every registered job with:
| Column | Description |
|---|---|
| Job name | The job identifier (e.g., issue-refiner, ci-fixer) |
| Status | Current state: idle, running, or paused |
| Last run | When the job last executed, with duration |
| Next run | Countdown to the next scheduled execution |
Controls¶
Each job has action buttons:
- Trigger --- Run the job immediately, regardless of its schedule. Useful when you have just labeled an issue and do not want to wait for the next polling interval.
- Pause / Resume --- Temporarily stop a job from running on its schedule. The job stays registered but skips its intervals until resumed.
- Cancel --- Abort a currently running Claude task. Sends SIGTERM to the AI process, with SIGKILL escalation if it does not stop gracefully.
Queue page¶
The queue page (/queue) shows all labeled issues and PRs across your watched repositories, organized into two categories that make it clear who needs to act next.
Human attention¶
Items waiting on you. These have the Ready label --- Yeti has done its part and is waiting for your decision:
- Plans ready for review (approve with Refined or post feedback)
- Any item that needs a human judgment call
Yeti attention¶
Items Yeti will process on its next cycle. These are in various stages of the pipeline:
| State | Meaning |
|---|---|
| Needs Refinement | Waiting for issue-refiner to generate a plan |
| Refined | Waiting for issue-worker to implement |
| Needs Review Addressing | PR has unaddressed review comments |
| Auto-mergeable | PR meets merge criteria, waiting for auto-merger |
| Needs Triage | Error issue waiting for triage |
| Needs Plan Review | Plan waiting for adversarial review |
Item details¶
Each queue item shows:
- Repository name
- Issue or PR number and title
- Current labels
Actions¶
For items in the queue, you can:
- Merge --- For PRs that are ready, trigger a squash merge directly from the dashboard
- Skip --- Tell Yeti to ignore this item (persisted in config)
- Prioritize --- Move this item to the front of all processing queues
Logs page¶
The logs page (/logs) is where you go to understand what Yeti has been doing --- and what went wrong when something did.
Filtering¶
Narrow down the log list by:
- Job name --- Show runs for a specific job only
- Status --- Filter by success or failure
- Search text --- Free-text search across log output
Log entries¶
Each entry shows:
| Field | Description |
|---|---|
| Job | Which job produced this log |
| Timestamp | When the run started |
| Duration | How long it took |
| Status | Success or failed |
Click into any entry to see the full log output --- every line the job produced during that run.
Issue-specific view¶
You can also view all log entries related to a specific issue. This is useful when you want to trace the full history of how Yeti processed a particular item: the refinement run, the implementation run, any CI fix attempts, and review addressing.
Repos page¶
The repos page (/repos) shows all configured repositories with their current activity and recent history. It is the central place for understanding which repos Yeti is watching and what work is happening in each one.
Summary¶
At the top, a summary shows:
- Configured Repos --- How many repositories are in the
allowedReposconfig - Active Repos --- How many repos currently have items in the work queue
Per-repo detail¶
Each configured repository gets its own section showing:
- GitHub links --- Direct links to the repo's Issues and Pull Requests pages
- Active items --- Issues and PRs currently in the work queue, with labels, check status, and links to both Yeti logs and GitHub
- Recently Completed --- A collapsible list of tasks Yeti finished in the last 7 days, showing the job name, item number, and completion time
Adding repos¶
If allowedRepos is set in your config, the page shows an Add Repo button that lists other repositories in your GitHub org that are not yet configured. Selecting one adds it to allowedRepos via the config file. If no allowedRepos filter is set (all org repos are included), the page notes this instead.
Jobs page¶
The jobs page (/jobs) gives you a comprehensive view of every registered job --- both enabled and disabled. It is the go-to place for understanding what Yeti is configured to do and how each job is running.
Each job row shows:
| Column | Description |
|---|---|
| Job | Name and a short description of what the job does |
| Enabled | Whether the job is in the enabledJobs config list |
| Backend | Which AI backend the job uses (Claude or Copilot) |
| Model | The AI model override, or "default" |
| Schedule | Interval (e.g., "Every 5 min") or daily hour (e.g., "Daily at 1:00") |
| Status | Running, Paused, Idle, or Disabled |
| Last Run | Relative time since the last execution |
| Next Run | Countdown to the next scheduled run |
| Logs | Link to the latest run's log (or "Live" if currently running) |
Controls¶
Enabled jobs have action buttons:
- Run --- Trigger the job immediately
- Pause / Resume --- Toggle whether the job runs on its schedule
The page live-updates every 10 seconds, so you can leave it open to monitor job activity.
Config page¶
The config page (/config) lets you view and edit Yeti's configuration directly from the browser. Settings are organized into tabs:
| Tab | Contents |
|---|---|
| General | GitHub owners, allowed repos, forks, log level, plan review loop, server port |
| Scheduling | Job intervals and daily schedule hours |
| AI Backends | Worker concurrency, timeouts, and per-job backend/model overrides |
| Integrations | Discord bot, GitHub App, and OAuth settings |
| Security | Auth token and webhook secret |
- View --- All current configuration values are displayed. Sensitive fields like tokens are masked. Fields overridden by environment variables are shown as disabled with a note.
- Edit --- Modify
config.jsonin-place. Changes are saved to disk and trigger a live reload --- no restart needed for most fields. The active tab is preserved across saves.
See the Configuration guide for details on which fields reload live and which require a restart.
Notifications page¶
The notifications page (/notifications) shows a history of recent notifications from all jobs. Each entry displays:
| Column | Description |
|---|---|
| Time | When the notification was created (relative timestamp) |
| Job | Which job produced the notification |
| Message | The notification text, linked to the relevant GitHub item when available |
| Level | Severity: info, warn, or error |
The page shows the 50 most recent notifications in reverse chronological order.
Toast notifications¶
Every dashboard page connects to a Server-Sent Events (SSE) stream at /notifications/stream. When any job produces a notification, a toast popup appears in the bottom-right corner of the current page. Toasts are color-coded by level and auto-dismiss after 8 seconds. Clicking a toast with a URL opens the linked item in a new tab.
If you reload or reconnect, the SSE endpoint replays any notifications you missed using the Last-Event-ID mechanism.
Themes¶
The dashboard supports three display modes:
- Light --- Clean and bright, for those rare sunny days
- Dark --- Easy on the eyes during long sessions or late-night monitoring
- System --- Follows your OS preference automatically
Toggle between them from the dashboard header.