16 KiB
2026-05-12 — Cascades ticket update posted + Agent OS install for ampipit + 7 standards drafted
User
- User: Howard Enos (howard)
- Machine: Howard-Home
- Role: tech
- Session span: 2026-05-12 ~07:00 PT (Cascades ticket update prep) → ~12:30 PT (mid-/discover-standards Shell-out pass, save)
Session Summary
Session opened with a Claude-update-recovery check after Howard had to reinstall Claude Code. Initial context recall pulled the wrong session log (root session-logs/2026-05-10-session.md — Mike's radio-show / Discord-bot / Apple-Dev work) and Howard corrected with "we have been working on the cascades phones for the past few days." Re-pulled the actual recent work from clients/cascades-tucson/session-logs/, with the 2026-05-11 7-hour Cascades log as the authoritative state: 19 SDM phones enrolled, ALIS SSO end-to-end validated, kiosk tile fix landed, three sign-in interruption layers eliminated, MHS half-screen rendering issue open and gated on Knox OEMConfig.
First substantive work was the Cascades ticket #32214 ("Entra setup") customer-visible update. Last public comment on the ticket was 2026-05-08; the four work days since had accumulated significant progress (kiosk tile fix, SSO validation, fleet rollout). Drafted via Ollama qwen3:14b, tightened by Claude to remove redundancy (Ollama duplicated the ALIS SSO point across two sections), then posted as comment 410494485 with hidden: false and do_not_email: true matching the 2026-05-08 update pattern.
Second piece of work was installing the Builder Methods Agent OS framework for use with Howard's standalone ampipit Rust project at C:\ampipit. Pre-flight: read the install docs, confirmed install paths (~/agent-os/ base + per-project agent-os/standards/ + .claude/commands/agent-os/), grepped the project-install.sh to verify it does NOT touch CLAUDE.md or anything else in the project, confirmed ~/agent-os/ and C:\ampipit\.claude\commands\ did not exist beforehand. Ran the base clone, then ran the project installer from inside C:\ampipit. Post-install verification confirmed ClaudeTools repo was untouched and ampipit's existing .claude/ contents (OLLAMA.md, COMPLEXITY_ROUTING.md, agents/, settings.json, settings.local.json) were preserved.
Third piece was advising Howard's parallel ampipit Claude Code session through the /discover-standards Q&A flow. Recommended Job/Step architecture as the first focus area (highest leverage — foundational pattern everything else obeys, plus high tribal-knowledge density). Picked all four candidate patterns plus the ProgressEvent channel as a fifth. Each standard ran through the full ask-why → draft → confirm → create loop, producing five files under C:\ampipit\agent-os\standards\job-engine/. Recommended Shell-out as the second pass. Started: Cmd wrapper and English-locale standards completed and written to disk. Atomic-write and SHA-256-verified-downloads are still in the Q&A loop at save time.
The standards captured the load-bearing tribal contracts of the engine: Step trait fatal-vs-non-fatal semantics, four-level RiskLevel ladder with typed-phrase gating that even --silent --force cannot bypass, hard-refusal-except-LoggedInUser-auto-impersonates ExecutionContext rule (with the Elevated-by-default DPAPI silent-failure gotcha), observable-effect idempotency, BinaryAdjacent-default JobAnchor with WinPeRamDisk as explicit non-resumable marker and ADR-025 forbidding LocalProgramData reintroduction, unbounded ProgressEvent channel with raw sender, and Cmd-wrapper-always (never std::process::Command).
Key Decisions
-
Used Ollama qwen3:14b for ticket-update drafting, Claude for tightening. Ollama produced a competent draft but duplicated the "ALIS SSO works end-to-end" point across two paragraphs and double-counted the kiosk-layout fix. Claude rewrote to single-source each point and reorder with the headline win first. Confirms the existing pattern: Ollama drafts, Claude reviews + tightens, user approves before POST.
-
Posted ticket comment with
do_not_email: truematching the 2026-05-08 pattern. Mike's last update used the same suppression; consistency means no surprise inbox bounces for Cascades while project is mid-rollout. Customer-visible (hidden: false) so the contact can read it when they look at the ticket portal. -
Verified Agent OS install footprint by reading project-install.sh before running. Grepped for
.claude,standards,commands,CLAUDE.md,cp,mkdirto confirm writes are scoped to exactly three locations. Standards docs were sparse on the interactive-prompt list, so script inspection was the only reliable way to know what the user would face. Found the script only writes to$PROJECT_DIR/agent-os/standards/and$PROJECT_DIR/.claude/commands/agent-os/, and the only interactive prompt fires when an existingstandards/folder is being overwritten — no prompt at all on first install. -
Installed Agent OS for
C:\ampipitnotC:\claudetools. Howard explicitly asked for a project-scoped install that wouldn't touch ClaudeTools. ampipit is its own directory outside the ClaudeTools tree, with its own.claude/. Clean separation: ClaudeTools' shared agents/skills/commands stay shared via Gitea, ampipit's Agent OS standards stay local and project-specific. -
Recommended Job/Step area first for /discover-standards. Highest leverage of the four proposed areas because every other piece of code obeys this contract. Picking it first means later areas (error handling, shell-out, profile) inherit the foundational vocabulary already documented.
-
Picked the strictest stance for IrreversibleDestructive bypass: never, not even with
--silent --force. For an MSP disk-touching tool, accidental wipes are unrecoverable. Typed phrase via answer file preserves automation while keeping the operator's intent durable on disk. Cheaper to type a phrase than to recover a customer disk. -
Captured "Elevated-by-default is the most common new-step mistake" in the ExecutionContext standard. Silent DPAPI failure is exactly the failure mode standards exist to prevent — code compiles, runs, returns wrong data, nobody notices until a customer reports it. The standard now warns explicitly.
-
Documented ProgressEvent channel as a separate standard rather than folding into step-trait.md. The channel rules (unbounded, send failure non-fatal, no async, raw sender never wrapped) are non-obvious enough to deserve their own page; merging would have buried them under the Step-trait contract.
-
English-locale standard scoped to "DISM today, document the extension pattern" rather than pre-flagging all Microsoft binaries. Pre-flagging tools that don't accept
/Englishwould cause spurious errors; the documented extension pattern lets future contributors add tools as locale issues surface.
Problems Encountered
-
Initial context recall pulled the wrong session log. Read
session-logs/2026-05-10-session.md(Mike's radio-show/Discord-bot session) first because the rootsession-logs/listing showed it as most recent. Howard caught it: "that is not right, we have been working on the cascades phones for the past few days." Real recent work lived inclients/cascades-tucson/session-logs/(2026-05-11 the most recent). Root listing's most-recent file is often stale during client-focused weeks because client work goes underclients/<slug>/session-logs/per the file-placement guide. Fix: always checkclients/*/session-logs/andprojects/*/session-logs/in addition to root before claiming "most recent work" context. -
Agent OS install docs did not enumerate interactive prompts. WebFetch summary said "the documentation does not list specific interactive prompts." Recovered by grepping
project-install.shdirectly forread -pand inspecting the surrounding context. Found the only prompt is the standards-folder-overwrite warning, which doesn't fire on first install. Lesson: install-script docs are often incomplete; reading the script is faster than testing-and-recovering.
Configuration Changes
Files modified (ClaudeTools repo)
session-logs/2026-05-12-session.md— NEW (this file)
Files created (outside ClaudeTools repo)
C:\Users\Howard\agent-os\— Builder Methods Agent OS base install (cloned fromhttps://github.com/buildermethods/agent-os.git,.gitremoved). Containsscripts/,profiles/default/,commands/agent-os/,config.yml.C:\ampipit\agent-os\standards\index.yml— empty standards index (default profile ships no preloaded standards)C:\ampipit\.claude\commands\agent-os\— 5 Agent OS slash commands installed:discover-standards.mdindex-standards.mdinject-standards.mdplan-product.mdshape-spec.md
C:\ampipit\agent-os\standards\job-engine\— 5 standards files from /discover-standards Job/Step pass:step-trait.mdrisk-level.mdexecution-context.mdidempotency.md(note: filename may vary if standard merged into job-anchor.md)job-anchor.mdprogress-channel.md
C:\ampipit\agent-os\standards\shell-out\— 2 standards files from /discover-standards Shell-out pass (in progress):cmd-wrapper.mdenglish-locale.md
Syncro changes
- Ticket #32214 ("Entra setup", Cascades of Tucson, In Progress) — comment id
410494485posted at2026-05-12T07:20:29.730-07:00. Subject: "Project update 2026-05-11".hidden: false,do_not_email: true. Customer-visible.
ClaudeTools repo untouched by Agent OS install
Verified post-install: C:\claudetools\.claude\commands\ does not contain an agent-os/ subfolder. No new files in the ClaudeTools tree from the Agent OS install.
Credentials & Secrets
None created or rotated this session. The Syncro API call used Howard's existing per-user key (Tde5174a6e9e312d14-…, vaulted at msp-tools/syncro-howard.sops.yaml).
Infrastructure & Servers
No infrastructure changes this session. Reference values used:
- Syncro:
https://computerguru.syncromsp.com/api/v1— ticket id109412123(number#32214) - Cascades tenant:
207fa277-e9d8-4eb7-ada1-1064d2221498(referenced in ticket body context, not touched) - Agent OS upstream:
https://github.com/buildermethods/agent-os.git
Commands & Outputs
Syncro ticket update post
BASE="https://computerguru.syncromsp.com/api/v1"
API_KEY="Tde5174a6e9e312d14-…" # Howard's per-user key
RESP=$(curl -s -X POST "${BASE}/tickets/109412123/comment?api_key=${API_KEY}" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"subject": "Project update 2026-05-11",
"body": "<b>End-to-end ALIS sign-in is working on the pilot caregiver phone.</b> ...",
"hidden": false,
"do_not_email": true
}
JSON
)
echo "$RESP" | jq '{id: .comment.id, subject: .comment.subject, created_at: .comment.created_at}'
# {"id": 410494485, "subject": "Project update 2026-05-11", "created_at": "2026-05-12T07:20:29.730-07:00"}
Agent OS base install
cd ~ && git clone https://github.com/buildermethods/agent-os.git
rm -rf ~/agent-os/.git
ls ~/agent-os/scripts/
# common-functions.sh project-install.sh sync-to-profile.sh
Agent OS project install (run from C:\ampipit)
cd /c/ampipit && ~/agent-os/scripts/project-install.sh
# === Agent OS Project Installation ===
# Configuration:
# Profile: default
# Commands only: false
# Creating project structure...
# Installed 5 commands to .claude/commands/agent-os/
# Agent OS installed successfully!
Pre-flight script inspection (verified no CLAUDE.md modification)
grep -n -E "\.claude|standards|commands|cp -|mkdir -p" ~/agent-os/scripts/project-install.sh | head -40
# Confirmed writes only to:
# $PROJECT_DIR/agent-os/standards/
# $PROJECT_DIR/agent-os/standards/index.yml
# $PROJECT_DIR/.claude/commands/agent-os/
grep -n -E "CLAUDE\.md|claude_md" ~/agent-os/scripts/project-install.sh
# (no output — script does not touch CLAUDE.md)
Pending / Incomplete Tasks
/discover-standards in flight (ampipit parallel session)
- Finish Shell-out area: atomic-write standard, sha256-downloads standard (both selected in the candidate-patterns step; Q&A in progress at save time)
- Optional: continue to Profile & persistence and Error handling & logging areas in a later session (per Howard's discretion — Job/Step and Shell-out are the load-bearing areas)
- Run
/index-standardsonce all standards in a pass are written to updateagent-os/standards/index.ymldescriptions
Cascades (carryover from 2026-05-11 — not new today)
- Knox OEMConfig setup (P1) — fix for MHS half-screen rendering on ~67% of phones
- SSPR portal step (P1) — Entra → Protection → Password reset → Properties → "Selected" →
SG-SSPR-Eligible→ Save - ALIS staff record email matching prep (P1) — for each real caregiver, ALIS staff record's Email field must exactly match Entra UPN before SSO flip
- John Trozzi Workplace Join completion (P2) — guide John through one-tap re-register
- Z Flip 5 user re-register (P2) — Mike's session deleted a personal Workplace-Join record; affected user needs 30-second re-register on next sign-in
- 4 ghost Intune device records (P3) — cosmetic cleanup post-wipe
ampipit (carryover, not part of standards work)
- ampipit is currently NOT a git repository (no
.gitfolder atC:\ampipit). If Howard wants version control on the Agent OS standards files (or any of the project),git init+ first commit needed. Not started this session — out of scope.
Reference Information
Agent OS
- Install docs:
https://buildermethods.com/agent-os/installation - Upstream repo:
https://github.com/buildermethods/agent-os - Base path:
C:\Users\Howard\agent-os\(home dir, outside ClaudeTools) - Project standards path:
C:\ampipit\agent-os\standards\<folder>\<name>.md - Project commands path:
C:\ampipit\.claude\commands\agent-os\(5 commands) - Profile in use:
default
Syncro
- Ticket #32214 ("Entra setup", Cascades of Tucson) — id
109412123- Last customer-visible comment before today: id
409911490(2026-05-08, "Project update 2026-05-08", posted by Mike) - This session's comment: id
410494485(2026-05-12 07:20 PT, "Project update 2026-05-11") - URL:
https://computerguru.syncromsp.com/tickets/109412123
- Last customer-visible comment before today: id
ampipit Job/Step standards files (created today)
| Standard | Path |
|---|---|
| Step trait fatal-vs-non-fatal | C:\ampipit\agent-os\standards\job-engine\step-trait.md |
| RiskLevel + Confirmation | C:\ampipit\agent-os\standards\job-engine\risk-level.md |
| ExecutionContext gating | C:\ampipit\agent-os\standards\job-engine\execution-context.md |
| JobAnchor placement | C:\ampipit\agent-os\standards\job-engine\job-anchor.md |
| ProgressEvent channel | C:\ampipit\agent-os\standards\job-engine\progress-channel.md |
ampipit Shell-out standards files (in progress today)
| Standard | Path | State |
|---|---|---|
| Cmd wrapper (always, never std::process::Command) | C:\ampipit\agent-os\standards\shell-out\cmd-wrapper.md |
written |
| English-locale forcing for parseable Microsoft CLI tools | C:\ampipit\agent-os\standards\shell-out\english-locale.md |
written |
| Atomic write pattern (.tmp + rename) | C:\ampipit\agent-os\standards\shell-out\atomic-write.md |
pending |
| SHA-256-verified downloads | C:\ampipit\agent-os\standards\shell-out\sha256-downloads.md |
pending |
Architectural decision records referenced in standards
- ADR-019 — engine actively transitions into LoggedInUser via WTSQueryUserToken
- ADR-025 — LocalProgramData removed; portable mode (binary-adjacent state) is the v1 spec; new JobAnchor variants require ADR amendment