Web Dashboard¶
The Web Dashboard provides a modern browser-based interface for Kubernetes management with full AI integration.
Overview¶
The Web UI offers:
- Modern Interface: Responsive design with dark/light themes
- Real-time Updates: Stale-first dashboard refresh with background revalidation
- AI Assistant: Integrated chat interface
- GitHub Automation Receiver: Optional webhook endpoint for issue-driven dev/review jobs
- Multi-cluster: Switch between contexts
- Reports: Generate cluster analysis reports
Getting Started¶
Launch Web Mode¶
# Start web server on default port 8080
k13d --web
# Specify custom port
k13d --web --port 3000
# With local authentication
k13d --web --auth-mode local
Access the Dashboard¶
Open your browser to: http://localhost:8080
Interface Layout¶
┌─────────────────────────────────────────────────────────────────┐
│ k13d │ Context: prod │ Namespace: default │ [Settings] [Help] │
├───────────┬─────────────────────────────────────────────────────┤
│ │ │
│ Resources │ Resource Table │
│ ─────────│ │
│ Pods │ NAME READY STATUS AGE │
│ Services │ nginx-abc 1/1 Running 2d │
│ Deploys │ api-def 2/2 Running 5d │
│ ConfigMaps│ │
│ Secrets │ │
│ ... │ │
│ │ │
├───────────┴─────────────────────────────────────────────────────┤
│ AI Assistant │
│ ───────────────────────────────────────────────────────────────│
│ Ask me anything about your cluster... │
│ [Send] │
└─────────────────────────────────────────────────────────────────┘
Navigation¶
Sidebar¶
| Section | Description |
|---|---|
| Workloads | Pods, Deployments, StatefulSets, DaemonSets |
| Config | ConfigMaps, Secrets |
| Network | Services, Ingresses, Endpoints |
| Storage | PVs, PVCs, StorageClasses |
| Cluster | Nodes, Namespaces, Events |
| Helm | Helm releases |
Resource Table¶
- Click row to view details
- Search bar for filtering
- Namespace dropdown for switching
- Refresh button for manual refresh
- Freshness badge when cached data is shown first and live data is still revalidating
Jobs and CronJobs¶
The Web UI now shows Job and CronJob timing in more operational detail:
- Jobs show status, start time, duration, source CronJob/manual trigger, and completion progress
- CronJobs show schedule, active/suspended state, next run, last run, and recent execution history
- Detail modal shows timestamps in your configured local/browser timezone
- Runs tab on CronJobs shows recent Jobs with started/finished time, duration, and pod outcome counts
- Security section on pod-backed workloads shows seccomp profile,
runAsNonRoot, token mount, host namespace usage, and container privilege settings
When a CronJob does not set .spec.timeZone, k13d still estimates the next run, but it labels that estimate clearly because Kubernetes ultimately follows the controller-manager timezone.
Resource Actions¶
Right-Click Menu¶
Right-click on any resource to see available actions:
| Action | Description |
|---|---|
| View YAML | Display full YAML manifest |
| Describe | Show resource description |
| Edit | Edit resource (opens YAML editor) |
| Delete | Delete resource (with confirmation) |
| AI Analyze | Get AI analysis |
Quick Actions¶
| Button | Description |
|---|---|
| 📋 | Copy resource name |
| 📄 | View YAML |
| 🔍 | Describe |
| 🗑️ | Delete |
| 🤖 | AI Analyze |
AI Assistant¶
Chat Interface¶
- Type your question in the input field
- Click "Send" or press Enter
- View streaming response
- Approve/reject tool requests
Example Queries¶
"Why is my nginx pod crashing?"
"Scale the api deployment to 5 replicas"
"Show me all pods with high CPU usage"
"Explain this HPA configuration"
Tool Approval¶
When AI needs to execute a command:
┌──────────────────────────────────────┐
│ Tool Approval Required │
│ │
│ kubectl get pods -n production │
│ │
│ [Approve] [Reject] │
└──────────────────────────────────────┘
By default, this modal appears for both read-only and write AI tool actions. You only skip it for read-only commands if you explicitly enable auto-approve in Settings.
Some requests never reach approval. k13d blocks unsupported interactive kubectl flows such as kubectl edit, kubectl port-forward, kubectl attach, kubectl exec -it, plus bash-wrapped kubectl or helm commands.
Features¶
Dark/Light Theme¶
Toggle theme in Settings or click the theme icon in the header.
Real-time Updates¶
Resources update automatically. The dashboard now follows a stale-while-revalidate pattern:
- recent data is reused immediately when you switch resources or reload the page
- live data is fetched in the background and the table updates in place
- the header shows a freshness badge when cached data is being refreshed
Configure refresh interval:
Settings → General → Refresh Interval
Keyboard Shortcuts¶
| Key | Action |
|---|---|
| Ctrl+K | Focus search |
| Ctrl+/ | Toggle AI panel |
| Esc | Close modal |
| ? | Show shortcuts |
Settings¶
LLM Configuration¶
Settings → AI → LLM Configuration
| Setting | Description |
|---|---|
| Provider | OpenAI, Ollama, Gemini, Anthropic |
| Model | gpt-4, llama3.2, etc. |
| Endpoint | Custom API endpoint |
| API Key | Provider API key |
The Web UI saves active LLM settings back to config.yaml immediately and can also manage named profiles through Add Model Profile, Use, and Delete.
For agentic AI, k13d is kubectl-first by default. bash and external MCP tools are opt-in via config.yaml:
For the full storage model, including how llm, models[], and active_model change, see Model Settings & Storage.
AI Input History¶
The AI input box supports shell-like history recall:
- Up loads the previous submitted prompt
- Down moves forward again
- on a single-line draft, history works even when the cursor is at the end of the line
- in a multi-line draft, history only takes over from the first line on Up and the last line on Down, so normal caret movement still works inside the textarea
The recent prompt history is stored in browser localStorage under k13d_query_history, so it survives reloads in the same browser profile.
MCP Servers¶
Settings → AI → MCP Servers
Manage external MCP servers for extended AI capabilities.
GitHub Issue Automation¶
The Web server can also act as a GitHub webhook receiver for issue-driven automation. This is useful if you want a newly labeled issue to trigger:
- an isolated git worktree
- a development-agent command
- an optional review-agent command
- auto-commit / auto-push
- draft PR creation and issue comment reporting
- GitHub check-run waiting before review/deploy
- branch preview routing through the same Web UI domain
Webhook Endpoint¶
Typical public URL:
If you already expose k13d directly on 443, GitHub can reach this endpoint without another relay service.
Status Endpoints¶
There is not yet a dedicated GUI page for automation jobs. Today, the operational view is API-based:
| Endpoint | Purpose |
|---|---|
/api/admin/github-automation/status | Current enablement, config summary, recent jobs |
/api/admin/github-automation/jobs | Same summary response for admin polling |
/api/admin/github-automation/jobs/{id} | Details for one queued/running/finished job |
Trigger Rules¶
- GitHub
issueswebhooks start automation jobs, andissue_commentwebhooks handle review/merge commands - Default label gate:
codex:auto - The
Codex 개발 요청GitHub Issue Form collects goal, context, desired behavior, acceptance criteria, validation, and safety confirmation - Issue authors must be members of the repository owner organization when
require_author_org_memberis enabled - Trusted issues can mention organization members when
mention_org_membersis enabled - Trusted issues are assigned to the issue author
- Generated PRs request organization members as reviewers
- One issue uses one stable branch, such as
codex/issue-123, and reuses the existing open PR on later runs - If
review_commandis configured, organization members can commentk13d 코드리뷰 해줘on the issue to re-run Codex review and post a PR Review - If
allow_issue_mergeis enabled, organization members can commentk13d merge 해줘on the issue to merge the linked PR and close the issue as completed - GitHub token env vars are stripped from automation command environments and redacted from captured output
- Built-in issue comments and PR review wrappers use Korean by default through
review_language: ko - Supported issue actions:
opened,reopened,labeled - Webhook signatures are verified with
X-Hub-Signature-256 - Repositories can be allow-listed in
config.yaml
Practical Setup Pattern¶
- Run k13d Web UI on a reachable HTTPS endpoint.
- Configure
github_automationinconfig.yaml. - Add a GitHub webhook for
IssuesandIssue comments. - Set the same webhook secret in GitHub and in
config.yaml. - Create a
Codex 개발 요청issue, review it, then label it withcodex:auto.
When the job finishes, k13d can comment back on the issue and create a draft PR if a GitHub token is configured.
For author requirements and a recommended issue template, see the GitHub Issue Automation Guide.
Branch Preview URLs¶
If k13d is the only service exposed on your public 443 endpoint, use path-based previews:
The preview deploy command can start each branch on a different local port and print:
k13d stores that target on the automation job and reverse-proxies /previews/<branch-slug>/... to it. The browser app also rewrites its own /api/... calls under the preview path, so the preview talks to the branch instance rather than the main server. After CI and preview deployment succeed, the issue completion comment includes the preview URL as a human verification link.
User Management¶
Settings → Admin → Users
| Action | Description |
|---|---|
| Add User | Create new user |
| Edit | Modify user settings |
| Delete | Remove user |
Reports¶
Generate comprehensive cluster reports with selectable sections:
- Navigate to Reports section
- Choose which sections to include:
- Nodes - node readiness, cordon state, pressure warnings, taints, capacity and allocatable values
- Namespaces - namespace inventory and workload counts
- Workloads - pods, deployments, services, and images
- Events - recent warning events
- Security - built-in security summary
- Security Full - extended scanner output when available
- FinOps - heuristic compute-cost analysis and rightsizing guidance
- Metrics - historical metrics when collection is enabled
- Optionally include AI analysis
- Preview inline or download as HTML, CSV, or JSON
The exported report now respects the section selection you make in the modal. FinOps output is request-based and prefers live pod metrics when available, and the node section includes operational checks such as pressure conditions and cordon status.
Custom Resource Detail¶
Click on any Custom Resource to view a rich detail modal:
- Overview tab with auto-detected status, metadata, key fields, spec/status summary, conditions table, labels, and annotations
- YAML tab with full manifest
- Events tab with related Kubernetes events
Pod Actions¶
View Logs¶
- Click on a pod
- Select container (if multiple)
- View streaming logs
- Options:
- Previous logs
- Follow
- Timestamps
- Download
Execute Shell¶
- Click on a pod
- Click "Exec" or 🖥️ icon
- Select container
- Enter commands in terminal
Port Forward¶
- Click on a pod
- Click "Port Forward"
- Configure:
- Local port
- Container port
- Click "Start"
- Access at
localhost:<port>
Deployment Actions¶
Scale¶
- Select deployment
- Click "Scale" or use slider
- Enter replica count
- Confirm
Restart¶
- Select deployment
- Click "Restart"
- Confirm rollout restart
Rollback¶
- Select deployment
- Click "Rollback"
- Select revision
- Confirm
Node Actions¶
Cordon/Uncordon¶
- Select node
- Click "Cordon" to prevent scheduling
- Click "Uncordon" to allow scheduling
Drain¶
- Select node
- Click "Drain"
- Configure options:
- Ignore DaemonSets
- Delete local data
- Force
- Confirm
API Access¶
The Web UI exposes REST APIs:
# Get pods
curl http://localhost:8080/api/k8s/pods
# With authentication
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/k8s/pods
# AI chat
curl -X POST http://localhost:8080/api/chat/agentic \
-H "Content-Type: application/json" \
-d '{"message": "list pods"}'
Mobile Support¶
The Web UI is responsive and works on mobile devices:
- Touch-friendly navigation
- Collapsible sidebar and AI panel
- Condensed panel header and filter bar on narrow screens
- Horizontal table scrolling with sticky pagination for resource-heavy views
- Optimized for smaller screens without dropping core dashboard actions
Security¶
Authentication¶
Run the Web UI with local authentication:
For production, prefer token auth:
Provider-specific LDAP/OIDC settings are startup-configured in the current build and are not persisted from the Web UI settings page.
HTTPS¶
For production, use a reverse proxy (nginx, traefik) with TLS.
Troubleshooting¶
WebSocket Connection Failed¶
- Check if port is accessible
- Verify no firewall blocking
- Try different browser
Slow Performance¶
- k13d now shows recent cached resource data first and refreshes in the background, so the first paint should feel faster after the initial load
- Reduce refresh interval
- Limit namespace scope
- Use filters to reduce data
AI Not Responding¶
- Check LLM configuration
- Verify API key
- Check network connectivity
Next Steps¶
- TUI Dashboard - Terminal interface
- Keyboard Shortcuts - All shortcuts
- Configuration - Full options