Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
286 commits
Select commit Hold shift + click to select a range
5ff8f6c
fix(android): answer a ticketed approval while the node still waits o…
claude Sep 26, 2026
38fa6c4
docs(android): record why approval cards have no "Always allow" (A56)
claude Sep 26, 2026
a44f16c
feat(android): usage pace line and context ring on inbox cards (A58)
claude Sep 26, 2026
d383e76
fix(android): announce each Inbox event once; trim the seen log by ag…
claude Sep 26, 2026
af587ac
fix(android): cap OSC 52 copies for the binder and catch a failed cli…
claude Sep 26, 2026
32330df
fix(android): bound the /pair answer's size and time (A54)
claude Sep 26, 2026
a40d11b
fix(android): pin the SSH host key only after auth; a changed key fal…
claude Sep 26, 2026
ea19490
fix(android): address review of A39+A75
claude Sep 26, 2026
45e21ec
docs(android): address review of A56
claude Sep 26, 2026
144bd40
fix(android): address review of A58
claude Sep 26, 2026
143543c
docs(pty): the #427 agent pin comment no longer claims relay attaches…
claude Sep 26, 2026
ec203db
fix(android): bound the OSC 52 selection field and a pairing refusal'…
claude Sep 26, 2026
f0f39d5
docs(android): batch A progress (A13 desktop, A72, A38, A39/A75, A48,…
claude Sep 26, 2026
a38d39d
fix(android): re-check the screen at the attach hand-off, and finish …
claude Sep 26, 2026
94a558a
fix(android): keep the input bar's draft when no terminal is attached…
claude Sep 26, 2026
1901939
fix(android): survive the terminal WebView's renderer going away (A45)
claude Sep 26, 2026
17ee526
fix(android): make the key row's ⌨ chip raise the soft keyboard (A46)
claude Sep 26, 2026
6966f25
fix(android): offer to wake a Sleeping session opened over direct SSH…
claude Sep 26, 2026
2be5e87
fix(android): keep the Host screen's tab, scroll and Board project ac…
claude Sep 26, 2026
7988087
fix(android): save Settings edits on the system back too (A44)
claude Sep 26, 2026
7debe67
fix(android): derive the New-session selection from the current listi…
claude Sep 26, 2026
8dbeb48
fix(android): show a multi-select question's options on its Inbox car…
claude Sep 26, 2026
52df0a3
fix(android): check relay-token presence without a Keystore decrypt o…
claude Sep 26, 2026
3780f5a
fix(android): keep command text and the agent's last message out of n…
claude Sep 26, 2026
e055f37
fix(android): announce live for the computer whose screen is open (A73)
claude Sep 26, 2026
9b4af70
fix(android): keep the phone's data out of device transfers and tie t…
claude Sep 26, 2026
0a2a1aa
fix(android): make room for the keyboard once on Android 15 (A77)
claude Sep 26, 2026
ac0923a
fix(android): make the R8 rules real and run R8 in CI (A37)
claude Sep 26, 2026
5fb3aea
fix(android): address review of A40
claude Sep 26, 2026
0507555
fix(android): address review of A41
claude Sep 26, 2026
a371483
fix(android): address review of A45
claude Sep 26, 2026
4ef21f0
fix(android): address review of A76
claude Sep 26, 2026
582bdae
fix(android): address review of A44
claude Sep 26, 2026
27ee194
fix(android): address review of A73
claude Sep 26, 2026
e0a7883
fix(android): address review of A37
claude Sep 26, 2026
46b0897
fix(android): review follow-ups for A44, A45, A51, A52, A73
claude Sep 26, 2026
e3cbc13
docs(android): batch B progress (A37, A40–A47, A51, A52, A57, A73, A7…
claude Sep 26, 2026
81a2e53
docs(android): name the A51 test class correctly in the handover
claude Sep 26, 2026
67e6297
fix(android): keep the interop fixture off the real electron package …
claude Sep 26, 2026
77c760d
fix(android): run the SSH transport tests on macOS, not only Linux (A62)
claude Sep 26, 2026
68d5da6
fix(android): let the interop tests run on Windows, off the real prof…
claude Sep 26, 2026
696fd10
fix(android): type-check the interop fixture against the desktop inte…
claude Sep 26, 2026
b3d4c6e
fix(android): run the Android workflow on every file the interop fixt…
claude Sep 26, 2026
f9782da
fix(android): test the relay projects.list blob against the desktop's…
claude Sep 26, 2026
6f3a8da
ci(android): validate the Gradle wrapper, cache Gradle, Dependabot an…
claude Sep 26, 2026
39e7995
docs(android): scope npm ci --ignore-scripts to CI and bound the JDK …
claude Sep 26, 2026
33af5e7
docs(android): a numbered device checklist, and say the debug APK is …
claude Sep 26, 2026
61e218b
fix(renderer): label the Android link as source and derive it from RE…
claude Sep 26, 2026
bf24cfc
fix(android): address review of A62
claude Sep 26, 2026
4806b92
fix(android): address review of A69
claude Sep 26, 2026
9d19bd1
fix(android): address review of A61+A71
claude Sep 26, 2026
d092639
fix(android): address review of A65+A50
claude Sep 26, 2026
612bcf4
docs(android): batch C progress; the device checklist lives in docs/a…
claude Sep 26, 2026
86d059d
ci(android): run the Kotlin CodeQL job from android.yml, where a bran…
claude Sep 26, 2026
2af8e6f
docs(android): handover TL;DR, next steps (batch D, batch E, A68 last…
claude Sep 26, 2026
9cdc4cf
fix(android): open the relay leg next to SSH for the app's own verbs …
claude Oct 2, 2026
0c5a1e1
feat(android): Source Control screen over the desktop's git bridge (A29)
claude Oct 2, 2026
7035bde
feat(android): open links and copy text from the phone terminal (A32)
claude Oct 2, 2026
4ffb8b7
feat(android): answer from a notification, and its tap opens the sess…
claude Oct 2, 2026
71b592a
feat(android): needs-you count per computer and an All computers scre…
claude Oct 2, 2026
57804cf
feat(android): dictate into the terminal's input bar (A59)
claude Oct 2, 2026
8691e6d
feat(android): browse a Server Edition and a desktop-driven host over…
claude Oct 2, 2026
1d8201f
feat(android): add a computer by its SSH address, SSH only (A27b)
claude Oct 2, 2026
1eeb5b8
fix(android): address review of A26
claude Oct 2, 2026
a5f38f5
fix(android): address review of A29
claude Oct 2, 2026
88beed2
fix(android): address review of A32
claude Oct 2, 2026
0d310cc
fix(android): address review of A25
claude Oct 2, 2026
0772cbf
fix(android): address review of A55
claude Oct 2, 2026
8020796
fix(android): address review of A59
claude Oct 2, 2026
9b5c342
fix(android): address review of A27a
claude Oct 2, 2026
c450e16
fix(android): address review of A27b
claude Oct 2, 2026
bdc8845
docs(android): record batch D (WP5 parity) in the handover and audit …
claude Oct 2, 2026
8430243
fix(relay): type quick answers into SSH-project nodes over their mast…
claude Oct 2, 2026
c199349
fix(remote): revoking a paired phone closes its live relay session (A…
claude Oct 2, 2026
f66fddf
fix(remote): approve a late-adopting paired phone on its first relay …
claude Oct 2, 2026
513c166
fix(android): anchor the SSH host-key pin in the sealed pairing answe…
claude Oct 2, 2026
cb12f3b
fix(android): refresh the LAN address and SSH host keys from the rela…
claude Oct 2, 2026
6afd8f5
fix(android): key the notification seen log by computer (seenlog-host)
claude Oct 2, 2026
a988a30
fix(remote): address review of A07-revoke
claude Oct 2, 2026
07b7276
fix(relay): address review of A07-late
claude Oct 2, 2026
402f139
fix(android): address review of A49-anchor
claude Oct 2, 2026
898d937
fix(android): address review of A74-refresh
claude Oct 2, 2026
a65e12f
fix(android): address review of seenlog-host
claude Oct 2, 2026
82940e1
docs(android): record batch E in the handover and audit index
claude Oct 2, 2026
0f39c33
fix(tmux): correlate startup attach replies before queued commands
CPlusPlus17 Oct 2, 2026
bb5b3e5
fix(remote): deliver ordered quick answers to the resolved tmux pane
CPlusPlus17 Oct 2, 2026
e64665c
fix(android): leave copy mode before confirming SSH quick answers
CPlusPlus17 Oct 2, 2026
9067e74
docs(android): record continuation fixes and remote-use preflight
CPlusPlus17 Oct 2, 2026
86390a4
fix(android): bound relay token requests and cancel stalled calls
CPlusPlus17 Oct 2, 2026
010240e
fix(remote): consume phone read acknowledgments only for owned nodes
CPlusPlus17 Oct 2, 2026
d5f561e
feat(android): package a private signed beta from verified release in…
CPlusPlus17 Oct 2, 2026
817fd92
fix(android): retain verified provenance through beta signing
CPlusPlus17 Oct 2, 2026
7e11e93
fix(android): bound relay requests while waiting for an HTTP worker
CPlusPlus17 Oct 2, 2026
6efde5f
ci(android): prepare unsigned private-beta inputs on the takeover branch
CPlusPlus17 Oct 2, 2026
df7bb31
docs(android): record private-beta preparation and remaining delivery…
CPlusPlus17 Oct 2, 2026
9197f47
docs(android): record retained signing identity for the first private…
CPlusPlus17 Oct 2, 2026
36281a2
style(android): trim trailing blank line from acknowledgment fixture
CPlusPlus17 Oct 2, 2026
338e67e
docs(android): order beta delivery after verification and CI inputs
CPlusPlus17 Oct 2, 2026
990f90c
merge: reconcile latest Android parity fixes before local beta build
CPlusPlus17 Oct 2, 2026
fa71cb0
fix(android): use R8 compatible with Kotlin 2.2 metadata
CPlusPlus17 Oct 2, 2026
1d6b04c
test(android): isolate SSH panes and shell startup between cases
CPlusPlus17 Oct 2, 2026
21c24a1
docs(android): record verified local beta and device handoff status
CPlusPlus17 Oct 2, 2026
febe022
fix(android): give terminal WebView a full-height layout
CPlusPlus17 Oct 2, 2026
d6619bf
test(android): verify pre-attach SSH terminal history
CPlusPlus17 Oct 2, 2026
cf0487a
docs(android): record Pixel beta and mobile VPN verification
CPlusPlus17 Oct 2, 2026
2f766b3
docs(android): record measured scroll responsiveness gaps
CPlusPlus17 Oct 2, 2026
e6bdb15
fix(android): disable SSH packet coalescing for terminal input
CPlusPlus17 Oct 2, 2026
245b42e
fix(android): match swipe distance and batch terminal scrolling
CPlusPlus17 Oct 2, 2026
2c5d15a
fix(android): serialize terminal scrolling and cancel stale input
CPlusPlus17 Oct 2, 2026
40c4ee4
fix(android): cancel queued scrolling before paste Enter
CPlusPlus17 Oct 2, 2026
14ab180
docs(android): record beta 3 scrolling fixes and Pixel verification
CPlusPlus17 Oct 2, 2026
fed68fb
fix(android): verify newer SDK signer reports for private betas
CPlusPlus17 Oct 2, 2026
3cffb49
fix(android): preserve swipe progress across terminal reports
CPlusPlus17 Oct 2, 2026
9ced678
docs(android): record beta 4 scroll delivery and phone traces
CPlusPlus17 Oct 2, 2026
53462f9
fix(android): interrupt queued scrolls when a new touch starts
CPlusPlus17 Oct 2, 2026
1ad2e94
feat(android): coast terminal history after a flick
CPlusPlus17 Oct 2, 2026
05cc664
test(android): ensure a fresh drag cannot revive old momentum
CPlusPlus17 Oct 2, 2026
f5fd382
fix(android): validate SDK 37 signing reports and pin beta test tools
CPlusPlus17 Oct 2, 2026
c4b1f6c
fix(android): keep swipe events alive across terminal redraws
CPlusPlus17 Oct 2, 2026
c37798b
docs(android): record redraw failure and beta 6 validation
CPlusPlus17 Oct 2, 2026
58a202b
docs(android): confirm Pixel drag momentum and green beta CI
CPlusPlus17 Oct 2, 2026
5925dfa
docs(android): record Pixel relay and device checklist results
CPlusPlus17 Oct 2, 2026
92ab112
docs(android): record successful cellular WireGuard beta check
CPlusPlus17 Oct 2, 2026
b53610d
docs(android): audit checklist scope and defer device checks
CPlusPlus17 Oct 2, 2026
4aa98f7
docs(android): record prepared same-signer pairing update
CPlusPlus17 Oct 2, 2026
bcc9236
feat(android): create persistent plain terminals over SSH
CPlusPlus17 Oct 3, 2026
b88d141
feat(android): add SSH New terminal folder picker
CPlusPlus17 Oct 3, 2026
17eb948
docs(android): record SSH terminal creation and prepared beta 8
CPlusPlus17 Oct 3, 2026
19da35a
docs(android): record beta 8 installation on the Pixel
CPlusPlus17 Oct 3, 2026
4d33a5b
fix(android): clear ended shells on empty SSH hosts
CPlusPlus17 Oct 3, 2026
071735d
docs(android): record beta 9 terminal checks and map empty-host test
CPlusPlus17 Oct 3, 2026
127b6b2
fix(terminal): keep hovered row in bounded link paragraphs
CPlusPlus17 Oct 4, 2026
3c217cb
fix(android): finish loading authoritative empty listings
CPlusPlus17 Oct 4, 2026
e3ce041
docs(android): record resumed device checks and relay refusal
CPlusPlus17 Oct 4, 2026
ec12ea9
fix: adopt phone Board edits live on desktop and server
CPlusPlus17 Oct 4, 2026
8fcb561
docs: record beta 10 Board and settings device checks
CPlusPlus17 Oct 4, 2026
f73633f
feat(android): search sessions by name agent and folder
CPlusPlus17 Oct 4, 2026
1b1872f
feat(android): search and highlight captured terminal output
CPlusPlus17 Oct 4, 2026
e07071e
fix: discover SSH pairing anchors through bounded Includes
CPlusPlus17 Oct 4, 2026
8443e71
fix(android): refresh all computers while visible
CPlusPlus17 Oct 4, 2026
2be09b6
docs(android): record four beta 11 additions and regression checks
CPlusPlus17 Oct 4, 2026
314105a
test(android): preserve New session note with searched session layout
CPlusPlus17 Oct 4, 2026
5d96ade
docs(android): record verified beta 11 candidate and paused phone checks
CPlusPlus17 Oct 4, 2026
2f693d8
feat(android): search retained terminal history on the host
CPlusPlus17 Oct 4, 2026
fbaa535
fix(core): reconnect interrupted session backend reads
CPlusPlus17 Oct 4, 2026
97b8a9a
fix(android): discard superseded history search results
CPlusPlus17 Oct 4, 2026
e584586
fix(android): preserve project launch settings on cold relay attach
CPlusPlus17 Oct 4, 2026
91e6a3f
fix(android): preserve agent approval policy on launch and resume
CPlusPlus17 Oct 4, 2026
2d6cb2c
fix(remote): wake sleeping agents outside the mounted project
CPlusPlus17 Oct 4, 2026
4f1985f
test(core): verify retained history output ordering
CPlusPlus17 Oct 4, 2026
db4abcc
feat(android): answer held rules and complete Claude questions
CPlusPlus17 Oct 4, 2026
7c206ec
feat(desktop): offer exact remembered approval rules
CPlusPlus17 Oct 4, 2026
489c30a
Add typed Source Control for direct SSH hosts
CPlusPlus17 Oct 4, 2026
4e2f877
test(android): retain three-digit finding IDs in device coverage
CPlusPlus17 Oct 4, 2026
d716138
feat(ssh): serve mobile Board writes through the owning workspace
CPlusPlus17 Oct 4, 2026
585e726
Enable selected-profile SSH Board and node actions
CPlusPlus17 Oct 4, 2026
43a016f
docs(android): reconcile companion contracts and remaining release ch…
CPlusPlus17 Oct 4, 2026
8c57016
Isolate SSH actions fixtures and pin merged inbox admission
CPlusPlus17 Oct 4, 2026
b2e4125
test(ssh): make unsafe directory fixture independent of umask
CPlusPlus17 Oct 4, 2026
e7419d8
docs(android): record verified beta 12 and remaining device work
CPlusPlus17 Oct 4, 2026
070a723
docs(android): correct direct SSH capability limits
CPlusPlus17 Oct 4, 2026
d652b96
feat(core): create managed tmux panes exclusively
CPlusPlus17 Oct 4, 2026
7f7f52c
fix(core): recheck managed folder and account at spawn
CPlusPlus17 Oct 4, 2026
70424bf
feat(core): journal and register managed terminal creation
CPlusPlus17 Oct 4, 2026
328d44c
feat(android): create managed canvas sessions through the SSH host
CPlusPlus17 Oct 4, 2026
9675c4d
fix(android): cover managed producer session-host inputs
CPlusPlus17 Oct 4, 2026
c211d7f
feat(android): offer durable managed New session over SSH
CPlusPlus17 Oct 4, 2026
ba64f62
test(core): cover managed session service wiring
CPlusPlus17 Oct 4, 2026
d69bac7
docs(android): record verified private beta 13 and next checks
CPlusPlus17 Oct 4, 2026
349b791
Report unconfirmed and retained phone relay revocation
CPlusPlus17 Oct 4, 2026
6b989e5
Add a searchable Android dictation language picker
CPlusPlus17 Oct 4, 2026
a6b3e88
Select the current pairing LAN or VPN adapter
CPlusPlus17 Oct 4, 2026
0a71c02
Retire replaced Android host records and pending connections
CPlusPlus17 Oct 4, 2026
facbbd0
docs(android): record companion follow-ups and remaining verification
CPlusPlus17 Oct 4, 2026
c87f7b1
docs(android): record verified private beta 14 and next checks
CPlusPlus17 Oct 4, 2026
ed2965b
Fix direct SSH coattachment without detaching external viewers
CPlusPlus17 Oct 4, 2026
32d412b
docs(android): record direct SSH coattachment verification
CPlusPlus17 Oct 4, 2026
08304b7
docs(android): record native Linux coattachment checks
CPlusPlus17 Oct 4, 2026
1153353
docs(android): use current host source for resumed device checks
CPlusPlus17 Oct 4, 2026
227a726
fix(pairing): exclude relative private host key names from Includes
CPlusPlus17 Oct 4, 2026
aa902d0
fix(android): prove legacy relay pairing identity with retained SSH key
CPlusPlus17 Oct 4, 2026
1da8ddd
docs(android): record private beta 15 and remaining live checks
CPlusPlus17 Oct 4, 2026
10f3710
test(android): register the outer timeout regression with JUnit
CPlusPlus17 Oct 4, 2026
3a68e42
feat(android): select an explicit SSH profile folder
CPlusPlus17 Oct 4, 2026
2723845
feat(android): enroll an SSH host with a one-time password
CPlusPlus17 Oct 4, 2026
bac1aa7
docs(android): record the verified private beta 16
CPlusPlus17 Oct 4, 2026
c0accdf
docs(android): verify enrollment against native OpenSSH
CPlusPlus17 Oct 4, 2026
67d99ea
test(android): verify relay advertisements against the actual writer
CPlusPlus17 Oct 4, 2026
01b4a2f
fix(terminal): let native mouse leave finish before blur
CPlusPlus17 Oct 4, 2026
dcdf664
docs(android): record native desktop link verification
CPlusPlus17 Oct 4, 2026
6598734
docs(android): record genuine Server terminal link verification
CPlusPlus17 Oct 4, 2026
7cf2bb3
docs(android): reconcile current handover verification status
CPlusPlus17 Oct 4, 2026
3908d49
docs(android): record native setup timing and installed PAM verification
CPlusPlus17 Oct 5, 2026
972f799
docs(android): distinguish native Quit dispatch from passive observat…
CPlusPlus17 Oct 5, 2026
9613cec
fix(desktop): keep native Quit available from focused terminals
CPlusPlus17 Oct 5, 2026
6bfa541
docs(android): record native Quit and Linux rendering checks
CPlusPlus17 Oct 5, 2026
db83fb7
fix(terminal): release a restored WebGL context before regrant
CPlusPlus17 Oct 5, 2026
fa259f6
docs(android): record tmux SSH and GPU recovery checks
CPlusPlus17 Oct 5, 2026
c371860
docs(android): record Server GPU and SSH reconnect verification
CPlusPlus17 Oct 5, 2026
7e91785
ci(android): limit push checks to main
CPlusPlus17 Oct 5, 2026
d12e14c
docs(android): record CI readiness and manual beta route
CPlusPlus17 Oct 5, 2026
15dd134
docs(ci): align Android CodeQL comments with main-only pushes
CPlusPlus17 Oct 5, 2026
651f46d
fix(core): resolve absolute executables for managed sessions
CPlusPlus17 Oct 5, 2026
4073138
docs(android): record Pixel 7a checks and A124 shell repair
CPlusPlus17 Oct 5, 2026
e6dc6ef
docs(android): record repaired Pixel 7a terminal checks
CPlusPlus17 Oct 5, 2026
11e2245
test(android): cover custom tmux scroll bindings
CPlusPlus17 Oct 6, 2026
415dae9
fix: reconnect open SSH terminal cards
CPlusPlus17 Oct 6, 2026
5b7286b
fix: give shared terminal replies one live viewer
CPlusPlus17 Oct 6, 2026
59e4c93
docs: record verified desktop SSH reconnect recovery
CPlusPlus17 Oct 6, 2026
6c570d6
docs: verify parked and inactive SSH terminal recovery
CPlusPlus17 Oct 6, 2026
0d50075
fix(android): describe closed terminal viewers accurately
CPlusPlus17 Oct 6, 2026
c61a172
docs(android): record Pixel lifecycle and input failures
CPlusPlus17 Oct 6, 2026
7e7d2c0
fix(android): submit input bar text to an attested pane
CPlusPlus17 Oct 6, 2026
5484ab9
test(android): run composed input checks in beta CI
CPlusPlus17 Oct 6, 2026
a79375c
docs(android): record composed Send source verification
CPlusPlus17 Oct 6, 2026
2a6e005
docs(android): verify beta 17 input and reconnect on Pixel 7a
CPlusPlus17 Oct 6, 2026
ce1121b
docs(android): correct handover CI triggers and suite count
CPlusPlus17 Oct 6, 2026
74d1d30
feat(core): add owner-bound composed PTY input
CPlusPlus17 Oct 7, 2026
0eed729
feat(android): support composed Send on native and session hosts
CPlusPlus17 Oct 7, 2026
944223e
docs(android): record native Send support and open history scrolling gap
CPlusPlus17 Oct 7, 2026
0818bbe
Add mode-aware native terminal history scrolling
CPlusPlus17 Oct 7, 2026
2d69326
Browse native terminal history from Android relay viewers
CPlusPlus17 Oct 7, 2026
1add040
Document native history contract and verified source checkpoint
CPlusPlus17 Oct 7, 2026
9da3632
Stop history momentum when the Live button is touched
CPlusPlus17 Oct 7, 2026
d6c4e24
Record published Android history and Live touch verification
CPlusPlus17 Oct 7, 2026
5bda2c3
Map Live-touch acceptance to the terminal checklist
CPlusPlus17 Oct 7, 2026
41406fe
Record beta 19 installation and bounded phone checks
CPlusPlus17 Oct 7, 2026
e06b554
Record real Claude remembered-rule application
CPlusPlus17 Oct 7, 2026
644445a
Record Pixel 7a approval and SSH pin verification
CPlusPlus17 Oct 7, 2026
11fbff0
Fence Android queued terminal work to its viewer
CPlusPlus17 Oct 7, 2026
656e5d8
Record beta 20 device checks and open output findings
CPlusPlus17 Oct 7, 2026
94c8d2c
fix(android): retain the last visible SSH pane after exit
CPlusPlus17 Oct 7, 2026
ef4caec
fix(android): preserve delayed Enter through layout changes
CPlusPlus17 Oct 7, 2026
9e740ce
docs(android): record beta 21 output and exit checks
CPlusPlus17 Oct 7, 2026
9b8bba2
docs(android): record beta 21 clipboard and font checks
CPlusPlus17 Oct 7, 2026
70fde6b
docs(android): record native diagnostics and browser checks
CPlusPlus17 Oct 7, 2026
3f38236
fix(core): bound login-shell probes with an independent deadline
CPlusPlus17 Oct 7, 2026
0d8594a
test(core): align shell mocks and viewer-preserving attach checks
CPlusPlus17 Oct 7, 2026
9890717
docs(android): record native startup and SSH continuity checks
CPlusPlus17 Oct 8, 2026
04da9b9
docs(android): record native capture and renderer reattach verification
CPlusPlus17 Oct 8, 2026
d361ce8
docs(android): record silent SSH recovery verification
CPlusPlus17 Oct 8, 2026
50e7a87
docs(android): record partial pending Send device check
CPlusPlus17 Oct 8, 2026
5a3013d
docs(android): verify held Send reply and newer draft
CPlusPlus17 Oct 8, 2026
675dd51
test(android): verify lost Enter acknowledgement after execution
CPlusPlus17 Oct 8, 2026
4524112
fix(android): consume only the captured Ctrl arm
CPlusPlus17 Oct 8, 2026
2ba0b14
fix(android): retain drafts with live terminal entries
CPlusPlus17 Oct 8, 2026
bb519ea
docs(android): verify beta 22 draft and Ctrl retention
CPlusPlus17 Oct 8, 2026
b9e4cbc
fix(android): retain Send outcomes across terminal remounts
CPlusPlus17 Oct 8, 2026
4769bd2
docs(android): record beta 23 build verification
CPlusPlus17 Oct 8, 2026
a370aad
Merge upstream main into Android app contribution
CPlusPlus17 Oct 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 38 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,41 @@ updates:
interval: weekly
day: monday
open-pull-requests-limit: 5

# The Android companion's Gradle build (audit A69), weekly and grouped like npm: two PRs carry the
# routine minor/patch bumps (the protocol's network and crypto stack, then everything else; see
# `groups`), a major (AGP, Kotlin, okhttp, Gradle itself) comes on its own. /android covers
# the whole build: the app (include(":app")), the protocol module, which is an included build
# (includeBuild("protocol") in android/settings.gradle.kts; Dependabot follows includeBuild, so it
# needs no entry of its own, and a second entry for /android/protocol would open each of its bumps
# twice), and the Gradle wrapper in android/gradle/wrapper. Not android/tools/typecheck: that offline
# type-check is not run by CI, so a PR against it would be untested, and its pins mirror the app's
# (Kotlin, BouncyCastle) or stand in for them (Compose Multiplatform desktop for Jetpack Compose,
# robolectric's android-all for compileSdk 35), so they move by hand with the app's, never to
# whatever is newest. GradleCiCoverageTest (android/protocol) pins this.
- package-ecosystem: gradle
directory: /android
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 5
groups:
# The protocol's network and crypto stack (the relay socket, the direct-SSH transport, the phone's
# Ed25519 identity and the BouncyCastle provider sshj needs on Android) gets a PR of its own. In the
# catch-all below it would only ever move together with every androidx/Compose/AGP/Kotlin bump, and
# that PR stays red whenever one of them needs something the build lacks: androidx releases raise
# the compileSdk their AAR metadata demands, which :app:checkDebugAarMetadata enforces against the
# app's compileSdk. Nothing of this group would land until someone fixed that by hand. Dependabot
# gives a dependency matching two groups to the more specific one (these patterns beat "*"), and
# within a run a group listed earlier handles it first, so keep this group above the catch-all.
# GradleCiCoverageTest (android/protocol) pins that no other dependency shares its PR.
protocol-net-crypto:
patterns:
- "com.squareup.okhttp3:*"
- "com.hierynomus:*"
- "net.i2p.crypto:*"
- "org.bouncycastle:*"
update-types: [minor, patch]
android-minor-patch:
patterns: ["*"]
update-types: [minor, patch]
440 changes: 440 additions & 0 deletions .github/workflows/android.yml

Large diffs are not rendered by default.

262 changes: 259 additions & 3 deletions CLAUDE.md

Large diffs are not rendered by default.

164 changes: 164 additions & 0 deletions CONTRIBUTING.md

Large diffs are not rendered by default.

21 changes: 14 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ turns that into a **map**: every shell is a node you can place, group, label, an
into. Sessions are spatial and persistent, so your mental model stays intact across
restarts. And because the app is built around a clean service seam, the same canvas runs
three ways — as the **desktop app for macOS, Linux and Windows (beta)**, as a **self-hosted browser app**
you reach from anywhere (Server Edition), and an **iOS companion** that attaches to the
same live sessions.
you reach from anywhere (Server Edition), and **phone companions for iOS and Android** that
attach to the same live sessions.

📚 **Full documentation lives at [nodeterm.dev/docs](https://nodeterm.dev/docs)** — get
started, concepts, agents, remote access, troubleshooting.
Expand Down Expand Up @@ -100,7 +100,7 @@ assign teammates. Toggle with `⌘⇧B`.

### Your sessions, anywhere

**Pair your phone** with one QR — *scan with the nodeterm iOS app* — and the **same
**Pair your phone** with one QR — *scan with the nodeterm app on iPhone or Android* — and the **same
live session continues in your pocket**, E2E encrypted **over the relay, not just your
LAN**. The same canvas also runs self-hosted in any browser (Server Edition).

Expand Down Expand Up @@ -148,9 +148,9 @@ Gemini / GitHub Copilot / opencode / Grok / custom) · 📝 **Sticky note** (lin
[setup and security details](./docs/github-issues-kanban.md).
- **AI commit messages & terminal names** — bring-your-own local agent CLI run read-only
on the staged diff or captured output.
- **Your sessions, in your pocket** — **nodeterm mobile** (iOS) attaches to the same live
tmux sessions: watch an agent work, answer a "needs you", or type into any terminal
from your phone — plus push notifications and a mobile board view.
- **Your sessions, in your pocket** — **nodeterm mobile** (iOS, and the Android app in
[`android/`](./android)) attaches to the same live tmux sessions: watch an agent work, answer a
"needs you", or type into any terminal from your phone — plus notifications and a mobile board view.
- **Power & sleep** — while an agent is working, nodeterm keeps the machine from
idle-sleeping, and lets go the moment it finishes (on by default; toggle in the setup
tour or Settings → Behavior). No app can hold a machine awake through a closed lid —
Expand Down Expand Up @@ -223,6 +223,12 @@ detects your platform. Everything is also listed at
[report what breaks](https://github.com/eneskirca/nodeterm/issues).
- **iOS** — **nodeterm mobile** on the
[App Store](https://apps.apple.com/app/nodeterm/id6790581233).
- **Android** — build it from [`android/`](./android) (`./gradlew :app:assembleDebug`); CI also
attaches a debug APK to every run of the Android workflow. Debug builds share a public signing
key so a newer APK installs over an older one; install them only from this repository's CI or
your own build. They are also debuggable, so anyone with adb access to the unlocked phone can pull
its pairing credentials ([`android/README.md`](./android/README.md#security)); there is no signed
release build yet. Not in a store yet, and not yet tested on a device.

**Trying it out?** Removal is one script — it stops every process nodeterm started, reverts
the status-hook/skill entries it merged into your agent CLIs' config (your own hooks and
Expand Down Expand Up @@ -354,7 +360,8 @@ on macOS** and applies to both canvas and kanban terminals.
- **React Flow is the single source of truth** for live nodes; projects persist serialized
nodes to disk, and tmux keeps sessions alive across restarts.
- **Three surfaces** — the desktop app, the browser **Server Edition**, and the
**mobile companion** (a separate SwiftUI repo) all ride the same core + transport seams.
**mobile companions** (iOS in a separate SwiftUI repo, Android in [`android/`](./android)) all
ride the same core + transport seams.

See [`docs/SERVER.md`](./docs/SERVER.md) for the Server Edition, and the design docs
under [`docs/`](./docs) for deeper notes.
Expand Down
14 changes: 14 additions & 0 deletions android/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Gradle / Android build output
.gradle/
build/
**/build/
local.properties
.idea/
*.iml
captures/
.externalNativeBuild/
.cxx/
*.keystore
!debug.keystore
.kotlin/
__pycache__/
Loading