HAPI
Copy
Copied
text
Could not render diagram.
Binary file not shown
Show %1$d more lines
Collapse
Pair with your hub
HAPI is self-hosted: your coding agents run on your own machines behind a HAPI hub you operate. Pair this app with that hub to watch and steer them from your phone.
Scan the “Companion app” QR code your hub prints on startup (with --relay), or enter the hub URL and access token by hand.
Scan QR code
Enter manually
Dismiss
Dismiss
Checking hub…
Pair with this hub?
This hub is already paired on this device.
Pair now
Use existing pairing
Re-pair with the new code
Cancel
That pairing link is invalid, incomplete, or does not use HTTPS.
Back
Manual pairing
Find both values in the hub terminal on startup, or in the web app under Settings → Companion pairing.
Hub URL
https://hub.example.com
Access token
Paste the access token
Pair
Scan pairing QR
Point the camera at the pairing QR code
That QR code is not a valid HTTPS HAPI pairing code. Scan one of the two QR codes your hub prints (Companion app or Web app).
Scan again
Camera access is needed to scan the pairing QR code. You can also pair manually instead.
Grant camera access
Menu
Settings
Hub
Hubs and settings
Switch hub
Pair another hub…
Sign out
Remove this hub pairing? The stored credentials are deleted from this device (the hub itself is untouched).
Cancel
New session
Back
New session
Machine
Loading machines…
No machines online
Runner last spawn error: %1$s
Directory
/path/to/project
Browse directories
Choose directory
Go to parent directory
Refresh
Show hidden
No subdirectories
Select current directory
Recent paths
Session type
Simple
Use selected directory as-is
Worktree
Create a new git worktree next to the repo
Worktree name
feature-x (optional)
Agent
Checking installed Agents…
Retry
Model
Effort
Reasoning effort
Permission mode
Managed by agent
This agent manages its own permissions. YOLO mode is not available.
unavailable
Grok did not enable Auto permissions for this account or CLI build.
YOLO mode
Bypass approvals and sandbox
Uses dangerous agent flags when spawning.
Applies native %1$s mode.
Collaboration mode
Agent mode
Fast mode
Standard
Fast
Loading…
Create
Creating…
Create and make directory
Settings
General
Appearance, language, and about
Back
Cancel
Retry
Could not load this dashboard.
This dashboard is only available to the hub owner (default namespace).
Appearance
Theme
Follow system
Light
Dark
OLED black
Material You colors
Derive app colors from your wallpaper.
Not available with OLED black.
Color theme
Default
Notion
One
Proof
Raycast
Rose Pine
Solarized
Vercel
VS Code Plus
Xcode
Linear
Lobster
Material
Matrix
Monokai
Night Owl
Nord
Not available while a color theme is in use.
Language
App language
Follow system
Insights
Token usage across agents and models
Hub database size on disk
About
App version
Protocol version
Hub
Checking hub…
Status: %1$s · protocol v%2$d
Hub unreachable — tap to retry.
Usage
7 days
30 days
All time
Total tokens
Uncached
Input
Output
Cache read
Cache creation
Cache hit rate
Requests
Daily tokens
%1$s tokens · %2$d req · in %3$s / out %4$s
0 tokens
By agent
By model
%1$d requests · in %2$s · out %3$s
Sessions with usage: %1$d
No usage recorded in this period.
Storage
Disk footprint of the hub\'s SQLite database (database, write-ahead log, shared memory).
SQLite files
No storage data reported.
Database
Write-ahead log
Shared memory
Total
Path
Refresh
Refreshing…
Permission requests
An agent is waiting for you to allow or deny a tool call
Questions for you
An agent needs you to answer a question in the session
Agent ready
An agent finished and is waiting for input
Task notifications
Task completed or failed, and other updates
Allow
Deny
Reply
Dismiss
Message
Allowing…
Denying…
Sending…
Allowed
Denied
Reply sent
Already handled
Session is no longer active — open the app to resume it
Session not found on any paired hub
Couldn’t reach the hub — open the app to respond
Reply not sent — open the app to try again
Pinned
Sessions
All
Unknown machine
Offline — showing cached sessions
Recent
Connecting…
Reconnecting…
Paused
Offline · updated %1$s
Retry
Mark as read
Unread
Connected
Running
Couldn’t mark as read
Search sessions
Search sessions
Close search
No sessions matching “%1$s”
Try another term, or clear the search.
Loading sessions…
Hub unreachable
No sessions yet
Fetching the session list from the hub.
Pull to retry once you are back online.
Start an agent with the hapi CLI and it will appear here.
needs input
approve %1$s
pending
Unpin
Pin to project
Pin globally
Rename
Reopen
Archive
Delete
Pin failed
Archive failed
Rename failed
Delete failed
Reopen failed
Could not load machines
Session is still active — archive it first
Failed to reopen session
Rename session
Session name
Delete session?
“%1$s” and its message history will be removed from the hub permanently. Active sessions must be archived first.
Cancel
now
Back
Session files
Scratchlist
Scratchlist (%1$d)
Session settings
Session actions
Scratchlist
Session inactive — send to resume, or
Retry
Loading messages…
Loading older messages…
Couldn’t load this session
Check the connection to your hub and try again.
No messages yet
Messages will appear here as the agent works.
1 new message ↓
%1$d new messages ↓
No transcription provider configured on hub
Microphone permission is needed for dictation
Camera permission is needed to take a photo
%1$s is over the 50 MB upload limit
Couldn’t read %1$s
Draft parked to scratchlist
Scratchlist is full (200 entries)
Couldn’t park the draft — check the hub connection
Attachments are still uploading — wait, or retry/remove the failed ones
Session is inactive and could not be resumed
Failed to abort
Failed to rename session
Failed to delete session
Failed to cancel queued message
Message cancelled — kept your current draft
Schedule dropped — attachments cannot be scheduled
Scheduled sends cannot carry attachments — remove the chips or clear the schedule
Already delivered to the agent
Failed to steer message
Request was already handled
Request failed
Failed to load models
Failed to update session
Message the agent…
Uploading…
Failed — tap to retry
● Recording… %1$s
Cancel
Park draft to scratchlist
Add attachment
Start dictation
Stop recording
Send
Stop the current turn
Mention suggestions
Send & steer into current turn
Schedule send
Relative
Specific
Max 7 days. Requires the hub running; the CLI catches up the next time it connects after that time.
Scheduled time must be in the future.
Maximum schedule time is 7 days.
Enter the full date and time (YYYY-MM-DD, HH:mm).
1 queued message
%1$d queued messages
Scheduled for %1$s
Steer
Edit
Attach
Photo library
Camera
Files
Could not start recording
Could not reach the hub
Audio recording failed
No audio was recorded
Transcription failed
Session is offline — changes apply after it resumes or may be rejected.
Session is controlled from the terminal — config changes will be rejected.
Permission mode
Model
Loading models…
Model list unavailable for this session.
Effort
Awaiting approval
⏳ Awaiting approval
✓ Approved
✓ Approved for session
✓ Approved: allow all edits
✕ Denied
✕ Aborted
Resolved in Codex
— Canceled
pending
error
1 agent step
%1$d agent steps
1 tool
%1$d tools
Before
After
Edit %1$d/%2$d
(empty)
Result
Result · error
💭 Reasoning ▾
💭 Reasoning ▸
Not delivered — tap to retry
Not delivered
Code review
1 finding
%1$d findings
Allow
Deny
Abort
Allow for this session
Allow all edits
Already handled elsewhere
Type your answer…
Add a note…
None of the above
Optionally, add details in notes.
Could not open the sign-in page. Check that a browser is installed and try again.
Awaiting response
Answered
Question handled
Question canceled
Question failed
Submitting answer…
Your answer
Question %1$d of %2$d
Details
This question could not be displayed. Open details to inspect the request.
Select all that apply
Optional
Other answer
Hide note
Previous question
Submit answer
Next question
Recommended
Open link?
Open
No app can open this link
Terminal
Read file
Read notebook
Edit file
Edit notebook
Write file
Search files
Search content
List files
Web fetch
Web search
Task
Launch Agent
Agent: %1$s
Agent
Spawn agent
Resume agent
Wait for agent
Close agent
Interrupt agent
Broadcast
Shutdown: %1$s
agent
Shutdown Response
Message: %1$s
Message agent
List agents
Team: %1$s
Create Team
Delete Team
Todo list
Plan
Plan proposal
Implement plan
Continue planning
Skill
Skill: %1$s
Reasoning
Permission request
Permission: %1$s
Apply changes
Diff
%1$s log
Inspecting task log
Background task
Error
Run shell
Search
Open URL
Query
Question
%1$d Questions
%1$s (+%2$d more)
%1$d lines
%1$d chars
%1$s (%2$d edits)
Back
Files
Refresh
Changes
Browse
Search
Git status unavailable for this session
Detached HEAD
%1$d staged · %2$d unstaged
No changes in the working tree
Staged (%1$d)
Unstaged (%1$d)
Project root
Show hidden files
Collapse
Expand
Search files…
Type to search files in the session directory
No files matched
Git status unavailable
Unstaged diff unavailable: %1$s
Staged diff unavailable: %1$s
unknown error
Failed to list directory
Failed to search files
Failed to load diff
Failed to read file
Copied
Copy path
Diff
File
Unstaged
Staged
Source
Preview
Line %1$d
No changes in this file
This file is empty
Binary file — no preview available
Preview not available for this image format
Back
Scratchlist
No notes
1 note
%1$d notes
New note
Edit note
To composer
Attachment only
Note, draft, parking-lot idea…
Add photo
Delete
Cancel
Save
Move note up
Move note down
Copy text to clipboard (not images)
Copied!
Delete this scratchlist entry? This cannot be undone.
Retry
Couldn’t load the scratchlist
Check the connection to your hub and try again.
No notes yet
Park drafts from the composer, or tap + to jot a note for this session.
Scratchlist is full (200 entries) — delete one first
Scratchlist is full (200 entries)
A note needs text or an attachment — use Delete to remove it
Couldn’t save the note — check the hub connection
Couldn’t delete the note — check the hub connection
Couldn’t attach the file — check the hub connection
Couldn’t remove the attachment — check the hub connection
That file is over the hub’s per-file size limit
Upload failed — check the hub connection
Couldn’t read the selected file
Image is too large even after compression
A note can hold at most %1$d attachments
That file type isn’t allowed for scratchlist attachments
That file is over the %1$d MB limit
This note’s attachment budget is used up
Enter a valid HTTPS hub URL, like https://hub.example.com.
Enter the access token shown by your hub.
The hub rejected this access token. Tokens change when the hub rotates its CLI_API_TOKEN — grab a fresh QR code or token and try again.
That hub is no longer paired. Pair it again below.
Could not reach %1$s. Check the address, your network, and that the hub is running.
%1$s answered, but not like a HAPI hub. Double-check the URL (it should be the hub’s own address, not the web app’s).
This hub speaks protocol v%1$d but the app supports v%2$d. Update the app and try again.
This hub speaks protocol v%1$d but the app supports v%2$d. Update the hub and try again.
Pairing failed (HTTP %1$d). Try again in a moment.
This device’s pairing was revoked — the hub’s access token changed. Pair again to continue.
The hub kept rejecting this device’s session. Pair again to continue.
The stored credentials for this hub went missing. Pair again to continue.
Worktree sessions require an existing repository directory.
Directory does not exist. Creating the session will create it automatically.
Directory does not exist. Tap Create again to create it automatically.
Failed to create session
Failed to load Codex models
Failed to load models: %1$s
Name needs at least one letter or digit
Directory must be inside one of this machine’s workspace roots.
Failed to browse directories
Failed to check installed Agents
Upgrade and restart this machine’s HAPI runner before creating sessions.
No supported Agents are installed on this machine.
The selected Agent is not available on this machine.
Back to latest ↓
Couldn\'t load history. Tap to retry.
Continue loading history
Load older messages
Beginning of conversation
ctx %1$s · %2$d%% left
ctx %1$s
Context details
Message details
Close
Copy full content
Showing %1$d of %2$d parts
Load more content
Questions & Answers
Answers
Custom answer
Note
View full message
Full message
Previous part
Next part
Part %1$d
Retry export
Export full text
Copied
Close reader
Read-only snapshot. This record is no longer in the current message window.
Earlier calls are not loaded. Return to the conversation to load older history.
Tool details
This content is unavailable. Return to the conversation to load it again.
Latest tool
View current file
View full input
View process · %1$d steps
Agent process
Show image
Displayed image
Displayed video
Displayed audio
Displayed file
%1$s: %2$s
%1$s is unavailable. %2$s
Load video
Load audio
Prepare download
Failed to load inline media
Playback failed
Open
Save
No app can open this file.
Save failed.
Play
Pause
Reconnecting… Tap to retry
Filters
Filters applied
Reset
Done
Machines
Activity dates
Any date
Clear date filter
Machine · %1$s
Filter sessions by last activity
Apply
Clear
%1$s – %2$s
No sessions in this date range
Adjust or clear the date filter to see more sessions.
Recent activity
Privacy Policy
No app can open this link.
Share to session
Choose a session
Search sessions
Preparing shared file…
Adding shared content…
Cannot read this file. Retry or remove it.
File exceeds the attachment size limit.
Preparation was interrupted. Retry or remove this file.
Retry
Remove
Cancel
Cannot receive this share. Please share the content again.
Restore session?
This session is stopped. Restore it before adding the shared content?
Restore and add
Stopped · restore before adding
Cannot open this session. Check the connection and try again.
Refresh sessions
No matching sessions
Cannot refresh sessions. Check the connection or switch hubs.
Another share received
There is already shared content waiting to be added. Keep it and discard the new share, or replace it with the new share?
Keep current
Use new share
Share unavailable
OK
Pair a hub to choose a session for the shared content.
Couldn’t save read status
Reconnecting…
Syncing…
heartbeat timeout
resuming after background
connect timeout
stream error
stream closed
HTTP %1$d
%1$d runner(s) out of date
Upgrade the HAPI CLI on each host below, then restart that runner. Minimize or snooze this banner to reach sessions underneath.
%1$d outdated runner(s): %2$s — tap to expand
Minimize
Snooze 1h
Restart runner
Upgrade CLI first
Restarting…
(newer CLI on disk — runner should self-restart soon)
(no newer CLI on disk yet — install/upgrade on that host)
Failed to restart runner