Repository navigation
Releases: Microck/ambivalence
Release list
v0.3.0
the phone can now record and share audio with your agent on android, ios and the browser.
- record a wav clip with
audio_record, or listen continuously withaudio_listen_start,audio_listen_nextandaudio_listen_stop. - check loudness and clipping with
audio_level. - record from the cli with
ambivalence listen --duration 2m -o recording.wav, or use--duration 0until Ctrl+C. - stopping a listening session interrupts a pending chunk without timing out or disconnecting the agent. recording also stops when the agent or phone disconnects.
audio uses the existing encrypted pairing link. update the phone app and agent together to use the new tools. see the audio guide for limits and examples.
the android apk is debug-signed. the ios ipa is unsigned and needs signing with your own team before installation. checksums.txt covers the cli and mobile downloads.
v0.2.2
the ios app now has a forget agent action. confirm it to remove the saved pairing, disconnect active agent sessions and return to the first-time pairing instructions. your hub address and camera permissions stay saved.
- pending pairing prompts are cancelled, and old sessions cannot keep using the camera after forgetting.
- pair again with the fresh code shown in the app.
the iOS IPA is unsigned. sign it with your own team before installing. the Android APK is debug-signed.
the simulator pairing tests are running separately.
v0.2.1
browser-host recovery fixes and smoother repeated captures.
- invalid hub URLs now show a recoverable error without disconnecting the active link. late callbacks from an old socket no longer reset its replacement.
- same-size captures reuse the canvas backing store while still drawing every frame; changing image dimensions resizes it.
- CLI, MCP and mobile version reporting are aligned at 0.2.1.
verified with deterministic browser flows, Go tests, a real-process simulated-phone pairing/reconnect/capture run, and native build checks. physical cameras and mobile-device image quality were not tested in this pass.
download the binary for your platform below and check it against checksums.txt. the APK is debug-signed. sign the unsigned iOS IPA with your own team before installing it. npm publication is pending.
full changelog: v0.2.0...v0.2.1
v0.2.0
select an exact camera lens and control still-camera settings from MCP or the cli.
camera_listnow returns lens IDs, labels and control capabilities. usecamera_switchorambivalence switch '<id>'to select one.camera_configureandambivalence configure JSONset manual focus, shutter time and ISO, exposure bias, and white balance where the selected camera supports them. omitted groups keep their settings; auto resets replace the selected group.- status and capture metadata include the camera ID and settings. unsupported controls return explicit errors.
ambivalence cameras
ambivalence configure '{"focusMode":"manual","focusPosition":0}'
ambivalence configure '{"exposureMode":"manual","exposureTime":0.008,"iso":100}'
ambivalence capture -o shot.jpgsee camera controls for ranges, platform differences and examples. Android accepts RGB white-balance gains; iOS also accepts Kelvin. browser controls depend on the browser and camera.
install with npm install -g ambivalence@0.2.0, or download a binary below and check it against checksums.txt. the APK is debug-signed. sign the unsigned iOS IPA with your own team before installing it.
full changelog: v0.1.0...v0.2.0
v0.1.0
first release. your coding agent gets a camera: your phone.
https://github.com/Microck/ambivalence/raw/main/.github/assets/demo.mp4
what's in it
ambivalence mcp: mcp server withcamera_capture(returns the jpeg to the model),camera_connect,camera_switch,camera_torch,camera_zoom,camera_list,camera_statusambivalencecli:pair,capture,torch,switch,zoom,cameras,status, plushub(with--tunnelfor phones off your network)- android app (
ambivalence.apk), ios app (ambivalence-unsigned.ipa, sign it with your own team to sideload) and a browser host served by the hub
how it behaves
- pair once: the phone shows a code, you give it to the agent, both sides show the same confirmation code, you tap confirm. after that the agent reaches the phone by itself, through app restarts and network drops
- the app finds the hub on your wi-fi over mdns, nothing to type. on networks that block that, scan the qr code
ambivalence hub --tunnelprints - hubs are untrusted relays. pairing is a p-256 key exchange checked by the confirmation codes, and every request, reply and frame after it is aes-256-gcm sealed in strict order, so a rogue hub can't see frames, inject requests or forge images
install
grab the binary for your platform below, or go install github.com/Microck/ambivalence/cmd/ambivalence@latest. check downloads against checksums.txt.
the apk is a debug-signed build. the browser host trusts the hub that serves it, so only use it through a hub you run.