diff --git a/CLAUDE.md b/CLAUDE.md
index 0444294..c1abb0a 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -27,7 +27,7 @@ npm run build
- IPC methods are narrow and sender-validated against the main local file frame.
- Bridge is exactly `127.0.0.1:18247`, exact committed extension origin, and `X-APT-Pairing` authenticated.
- Persist only the pairing hash envelope under Electron `userData`; plaintext is shown once after first run/rotation.
-- Proxy helper launches directly with `shell: false`; stop only app-owned child processes.
+- Proxy helper launches directly with `shell: false`; passwordless launch uses the main-owned paired session only through the helper's required `-k` argument. Never expose that cookie to renderer IPC, UI, logs, files, shell commands, or tracked process metadata; stop only app-owned child processes.
- Update behavior is check-only against the exact GitPeji API. The only follow-up action opens the fixed GitPeji releases page externally.
- Never add download/install/replace logic, arbitrary URLs, redirect following, shell scripts, broad process killing, hardcoded bridge secrets, or credential-bearing renderer state.
- Synthetic tests only: never use a real tenant or Alta session.
diff --git a/README.md b/README.md
index 48a4dc6..805924c 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ APT is a Windows Electron desktop app that imports an existing Alta Video sessio
- The renderer receives only connection origin/state, device/site/auth responses, and owned proxy metadata. It never receives or supplies the Alta session value.
- The bridge listens only on `127.0.0.1:18247`, accepts only the committed extension origin, requires the `X-APT-Pairing` secret, limits concurrent/body/deadline work, and validates an exact canonical Alta HTTPS origin.
- The pairing envelope is a scrypt hash stored atomically under Electron `userData` with restrictive permissions. The plaintext secret is shown once on first run or rotation. Revoke invalidates it.
-- Proxy launch is a direct, detached `spawn` of the fixed helper with `shell: false`. Its exact arguments are deployment host, non-secret Alta username/email, and selected device UUID; no session bearer, password, or 2FA value reaches the command line. Stop actions can target only children owned by this app.
+- Proxy launch is a direct, detached `spawn` of the fixed helper with `shell: false`. APT passes the main-process-only paired Alta session through the helper's supported `-k` cookie mode so users are not prompted for Alta credentials again. The cookie never crosses renderer IPC, enters a shell, or reaches logs, files, tracked process metadata, or UI state; it is necessarily present in the helper process arguments because the external helper exposes no pipe/stdin credential interface. Stop actions can target only children owned by this app.
- Updates are **check-only**. APT checks the exact GitPeji release API and can open only `https://git.pejicorp.com/peji/Alta-Proxy-Tool/releases` in the system browser. It never downloads, replaces, or executes an update.
## Requirements
@@ -30,8 +30,7 @@ npm start
2. Start APT. Under **Bridge Pairing**, copy the one-time secret.
3. Open the extension pairing settings, paste the secret, and save it.
4. Visit your Alta deployment in Chrome and use **Send to APT**.
-5. Select a local camera, enter your Alta username/email, and choose **Start Proxy**.
-6. Complete the password and 2FA prompts in the helper's visible Windows console. APT does not collect or pass those secrets.
+5. Select a local camera and choose **Start Proxy**. APT reuses the paired Chrome session; no Alta username, password, or 2FA prompt is required.
Use **Generate / Rotate** if a pairing may have been exposed, then update the extension. Use **Revoke** to immediately disable bridge authentication.
diff --git a/chrome-extension/manifest.json b/chrome-extension/manifest.json
index 522b3e1..b1f7f52 100644
--- a/chrome-extension/manifest.json
+++ b/chrome-extension/manifest.json
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "Alta Proxy Tool Bridge",
- "version": "1.2.0",
+ "version": "1.2.5",
"description": "Send Alta session cookies to a paired Alta Proxy Tool desktop app.",
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt4EZdkSgOsyiy5DRe0JkX+BpK94FpMjBU59NVIqDPO8QBDwvqNDWT/UjqHK/0aqSxzed5KibX6MdAvc495+u1sCybFdjDdXyBewEvg+PDqGiJketlZKC9dcR1RXHuPgAoM3NaNbMb3TqYcS9J4iGq0UwadxubkQrEcPiuyR6oriOkop8q9/5DWGb15wOGmiCuVmlXfUjNJIvNBm9P/ZHtgFBYDI2PuSSI5GI4j04VFpEyfNlFCrpi8GQ7bYZzezigZWXRjhhNwkx39bNHlkAWYa8XGZseCpKKvi0EaeCoBPjoYSAt161SM1dqX+/UC61/sLOU/SpDB1SYGTm5DC+7wIDAQAB",
"permissions": ["cookies", "activeTab", "clipboardWrite", "storage"],
diff --git a/chrome-extension/options.css b/chrome-extension/options.css
index 51251b2..d659ef4 100644
--- a/chrome-extension/options.css
+++ b/chrome-extension/options.css
@@ -75,9 +75,3 @@ button:disabled { cursor: not-allowed; opacity: 0.45; }
padding-top: 14px;
border-top: 1px solid #3c3c3c;
}
-
-.privacy-note {
- margin-top: 24px;
- color: #aaa;
- font-size: 12px;
-}
diff --git a/chrome-extension/options.html b/chrome-extension/options.html
index 0879681..c3a5c29 100644
--- a/chrome-extension/options.html
+++ b/chrome-extension/options.html
@@ -10,7 +10,7 @@
Pair with Alta Proxy Tool
-
In the desktop app, create a one-time pairing secret. Paste it below on this computer. Treat it like a password.
+
Create a one-time pairing secret in APT, then paste it below.
Copying exposes the full bearer token. Clipboard history or sync may retain it. A confirmation is required.
diff --git a/chrome-extension/popup.js b/chrome-extension/popup.js
index 9af6a92..fb91d9b 100644
--- a/chrome-extension/popup.js
+++ b/chrome-extension/popup.js
@@ -45,7 +45,6 @@ function createPopupController({
const pairingInfo = documentApi.getElementById('pairingInfo');
const sendBtn = documentApi.getElementById('sendBtn');
const copyBtn = documentApi.getElementById('copyBtn');
- const copyWarning = documentApi.getElementById('copyWarning');
const statusMsg = documentApi.getElementById('statusMsg');
const openOptionsBtn = documentApi.getElementById('openOptionsBtn');
@@ -159,9 +158,7 @@ function createPopupController({
async function copyToken() {
if (!detectedOrigin || !pairingSecret || busy) return;
- const confirmed = confirmCopy(
- 'Copy the full VA bearer token? Clipboard history or sync may retain it. Continue only if you will paste it into a trusted destination.'
- );
+ const confirmed = confirmCopy('Copy VA token?');
if (!confirmed) {
showStatus('Copy cancelled. The VA token was not read.', 'info');
return;
@@ -172,7 +169,7 @@ function createPopupController({
try {
cookieValue = await getVaCookieValue();
await navigatorApi.clipboard.writeText(cookieValue);
- showStatus('VA token copied. Clear your clipboard after use.', 'success');
+ showStatus('VA token copied.', 'success');
} catch (error) {
showCookieError(error, true);
} finally {
@@ -182,7 +179,6 @@ function createPopupController({
}
async function init() {
- copyWarning.textContent = 'Copying exposes the full bearer token. Clipboard history or sync may retain it. A confirmation is required.';
sendBtn.addEventListener('click', sendToApt);
copyBtn.addEventListener('click', copyToken);
openOptionsBtn.addEventListener('click', () => chromeApi.runtime.openOptionsPage());
diff --git a/docs/plans/2026-08-19-apt-security-foundation.md b/docs/plans/2026-08-19-apt-security-foundation.md
index dba08e9..4b5f61b 100644
--- a/docs/plans/2026-08-19-apt-security-foundation.md
+++ b/docs/plans/2026-08-19-apt-security-foundation.md
@@ -40,7 +40,7 @@ Feature discovery begins only after Phase A passes independent security review a
- Use a fresh worktree from GitPeji `master` at `a80074ac57b7a4517837b5d95754f5e6433df3ac` or newer.
- Preserve current Tool Hub downloads and production visibility until Zac approves replacement.
- Do not use real Alta cookies in automated tests; use conspicuous synthetic sentinels.
-- Do not write cookies to logs, disk, command files, shell strings, crash reports, analytics, or test artifacts.
+- Do not write cookies to logs, disk, command files, shell strings, crash reports, analytics, or test artifacts. The sole accepted exception is the fixed helper's required `-k` argv value for Zac's explicitly required paired-extension passwordless proxy flow; keep it main-process-only, direct-spawned with `shell: false`, redacted from errors, and absent from renderer IPC and tracked metadata.
- No production release until the exact candidate passes controller verification plus independent security and release reviews.
- Mac distribution remains approval-gated under Kanban task `t_42bad4d3`.
diff --git a/docs/security/2026-08-security-baseline.md b/docs/security/2026-08-security-baseline.md
index df20ddb..5a5defb 100644
--- a/docs/security/2026-08-security-baseline.md
+++ b/docs/security/2026-08-security-baseline.md
@@ -16,3 +16,7 @@
- Synthetic sentinel credentials only in tests.
- Work remains on the isolated hardening branch until review gates pass.
- No feature additions until Critical/Important security closure.
+
+## Accepted passwordless proxy exception
+
+Zac explicitly requires the paired-extension **Connect → select camera → Start Proxy** flow without re-entering Alta credentials. The external `aware-cam-proxy.exe` helper supports cookie authentication only through `-k`; it exposes no stdin, named-pipe, environment-variable, or credential-file interface. APT therefore passes the validated main-owned session directly to the fixed helper as one argv value. This exception remains bounded by direct `shell: false` spawn, trusted-device allowlisting, no renderer/IPC credential parameter, no logs/files/shells, redacted launch errors, safe tracked metadata, and synthetic regression tests.
diff --git a/index.html b/index.html
index e8b21cb..465aadb 100644
--- a/index.html
+++ b/index.html
@@ -51,11 +51,12 @@
+
-
+
Bridge Pairing
Only the committed APT Chrome extension can send a session. Pair it with a one-time secret.
@@ -70,6 +71,7 @@
+
@@ -80,11 +82,7 @@
-
-
-
-
-
The proxy helper opens a Windows console and prompts for your password and 2FA. APT never sends those secrets on its command line.
+
APT uses the paired Chrome extension session. Select a camera, then start the proxy—no Alta credentials need to be entered again.