264 decisions · 379 AI-assisted sessions
Decision Log
Every architectural choice, tool selection, and technical direction documented across every project — from enterprise AI platforms to open-source tools and experimental systems.
Pollen
37 decisions- Crush vs Hermes-Agent features & port: Use React+Ink for the tree UI — Hermes' tree rendering is easier in React (composable components, automatic diffing)
-
Crush vs Hermes-Agent features & port: Use Unicode braille for spinners — Bubble Tea has a
spinnerpackage but limited to preset animations - Pollen CLI AI agent skill: Build a dedicated SKILL.md that documents all tool interfaces and session patterns for AI-agent consumption
- YOLO ONNX/WebAssembly: Wrap the ONNX Runtime in a sidecar process using the ONNX Runtime C API rather than embedding it directly
-
YOLO ONNX/WebAssembly: Use Rust CLI via
execto call the ONNX Runtime shared library, accepting the ~46ms cold-start cost - Voice-command STT on Pollen Mesh: Prioritize browser mic capture — simpler, no extra RPC needed, works on any device with a browser
- macOS menu bar daemon status indicator: Add a small HTTP health endpoint on the existing Prometheus metrics port, with a dedicated port as fallback
- Lightweight Matrix server & clients: Use Tuwunel + Cinny — both lightweight, actively maintained, Docker-ready pairing
- Integrating Charmbracelet repos: Focus on specific integration points rather than broad library inclusion
- Access CP-PLUS camera: Run steps 1 (password) and 2 (delete extra users) first before configuring network access
-
GitHub search YOLO Go/WASM:
yalue/onnxruntime_go+yalue/onnxruntime_go_examplesis the closest to drop-in - Research P2P URI schemes: Content-addressed (CIP hash) primarily for resource identification
- Research P2P URI schemes: Key-addressed (public key hashes) for identity and service discovery
-
Check pln://macbook/mx:8008: Instead of a new stream type, use the existing workload stream type (
StreamTypeWorkload) with a special marker -
Plan to surface new features: Option C —
pln dashboardCLI subcommand as the chosen approach -
Lightweight Pollen Android UI: Use the
pln/URI scheme for deep linking and cross-component navigation -
Automatic packaging and deployment: Keep package names as
pollen_*for backwards compatibility, even if the project name changes topln -
Automatic packaging and deployment: Keep
pollenin proto packages so the genpb directory stays atapi/genpb/pollen/ -
Port git app from pan to pollen: If gitd is running remotely, the
withEnvfunction handles SSH bridging via the-Hflag -
Research OSS backup patterns: Shell out to
rclone syncfor the Proton Drive storage backend - Needle-rs & Pollen use cases: Start with the CLI command + auto-execution bridge since they unlock all the other use cases at once
- Explore seed/examples and WASM: Tune busy_timeout to handle WAL lock contention (16+) in concurrent scenarios
- Installing Android SDK: Download the system image manually and install it instead of relying on the SDK manager
- Research Android APK alternatives: Use Termux for programmatically interfacing with Android devices
- Research Android APK alternatives: Build a Kotlin APK for streaming camera over WiFi/USB to OBS
- No camera capture backend configured: Set up camera capture from within the daemon process, targeting 29 FPS
- Available apps/services in Pollen: Last-writer-wins (LWW) conflict resolution is fine for personal notes
-
Available apps/services in Pollen: Use per-app databases (
pln://app/<name>/db) for service isolation -
Update pollens README and skills docs: Use
vtprotobufcodec in connectrpc for faster serialization - Research GitHub self-update patterns: Use GitHub token + ETag caching for release checks
-
Research GitHub self-update patterns: Use
Masterminds/semver/v3for semantic version comparison -
Explore pollen daemon structure: Add
github.com/...structured logging via the daemon's existing logger -
Find Go daemon gRPC setup: The
controlAddroption sets up a TCP listener optionally, and the token is still required for TCP connections - Explore pollen architecture: 72 test files out of 241 total files in the codebase
-
Find GoReleaser output artifacts: Use
shasum -a 256and compare checksums for artifact verification - Research Syncthing capabilities: Configure folder against the preset allow-list for selective sync
-
HTTP URL not working in note app:
httpsmismatch is the most likely issue — ensure the note app handles both schemes
Pan
8 decisions- WASMized git packaging: Choose "go-git to pan-gitd binary" over isomorphic-git or wasm-git+wasmtime for a native, portable approach
- WASMized git packaging: Add "New pan service" alongside syncthing, nats, and silverbullet as a managed service
-
WASMized git packaging: Use go-git as the pure-Go equivalent (portable,
CGO_ENABLED=0, same build pattern as pan-agent) - Lightweight UI for pan: Option 2 first (quick, no new toolchain), and if that feels hacky, Option 1 properly (native Go app, fits the project)
- Photo management service: Weighs ~34MB with zero problematic dependencies
-
Lightweight UI: ~60 MB APK size but only ~20-30 MB RAM at runtime; needs
fyne-crosstoolchain set up - Project explanation: Port the project from TypeScript to Go for improved performance and simpler deployment
- Explore pan project features: Systematically explore pan to understand its purpose, architecture, and identify features needing porting
Crush
3 decisions-
Run command: Use a single bash command with
&andwaitinstead of 6 separate parallel tool calls, reducing overhead -
Check parallel tool execution: Parallel tools can run concurrently; the
sequentialMuonly serializes sequential tools against each other -
Customizing opencode configuration: Handle
ConfigInvalidErrorgracefully by validating config before applying
Firewalla Local Web
7 decisions- Replicate Firewalla cloud behavior locally: Implement local target list simulation with a fallback that syncs to cloud when available
-
Research Firewalla target lists: Check if there's a
firewallaAPI endpoint for target lists that can be called locally - Firewalla TUI - find reusable OSS: Build with box, refresh interval, and device detail views when a device is selected
-
Firewalla TUI dev: Use
DeviceDetail()andCursorIndex()for potential enter-to-detail interaction - Explore TUI structure: Style components with lipgloss for consistent visual appearance
- Add project to GitHub: Push firewalla-local-web to GitHub under the deepthink-arch organization
-
Replicate cloud behavior: Set target list type to
type: dnswhen simulating cloud-like DNS-based target groups
Firewalla Local HA
3 decisions- Firewalla Purple local web UI: Take a phased approach — start with the highest value item first
- Firewalla Purple local web UI: Prioritize responsive layout as it has the highest user-facing impact
- Explore dashboard codebase: Map out existing data structures before planning modifications
Video / 3D
6 decisions- Three.js farmland scene: Add a waypoint indicator in the 3D scene, not just in the minimap, for in-world navigation
- Three.js farmland scene: Use animated pulse effect on waypoints for visual clarity
- Cloning and testing theatre-js: Use GSAP + Three.js integration instead of Theatre.js for animation control
- Three.js solar system animation: When a mesh gets a new object reference, the attached mesh in TransformControls is orphaned — avoid full mesh rebuilds
- 3D scene integration: Evaluate Hyperframes + Theatre.js + GSAP timeline approaches before committing to a stack
-
Three.js solar system: Debug by tracing where
isDebugModeis used to narrow down render issues
Meetily / Transcribe
4 decisions- AI4Bharat model integration: Run a separate Python service for this model (like the existing whisper-server-package) rather than embedding
- Indic-Conformer Telugu: Implement a dedicated transcription mode that calls a Python script for the Indic-Conformer model
- Indic-Conformer: Use an ASR model that doesn't require NeMo for simpler deployment
- Speaker diarization: Compare PyAnnote vs sherpa-onnx for speaker diarization, especially in the context of the IndicConformer model
IntentCore
3 decisions- Explore project directory: Build a macOS Tahoe-style "Liquid Glass" window component — simpler, modern macOS design system with blur effects and glassmorphism
- IntentCore data orchestration: Store intents as Markdown files on the filesystem (similar to Obsidian) for better accessibility
- IntentCore architecture: Use the filesystem as the primary store, making data directly accessible without a database layer
Hermes Agent
6 decisions- ByteRover index: Build ByteRover as a durable, offline-readable index that lives in the filesystem forever
- SSH daemon on Fire Stick: Keep Termux, ditch SimpleSSHD, and use Termux's built-in SSH server instead — Termux already has an active session
-
Fire Stick memory: Use SSH-only connectivity (phone/Pi, when
adbis unavailable) for remote device management - SilverBullet optimization: Put a tiny reverse proxy in front of SilverBullet that strips the service worker entirely — much lighter, but loses offline caching
-
Ladybug graph fix: Use Sigma.js v3 — but v3 beta has no UMD
Sigmaglobal (ESM only); v2 is the fallback - Skills index update: Add a short Querying section to the existing SKILL.md and delete outdated documentation
App with Backend
3 decisions-
Full-stack refunds workflow: Use a discriminated union type narrowing pattern — on line 284 the type narrows to
'pending' | 'processing' | 'refunded' - Full-stack refunds workflow: Implement Supabase backend with automated refunds workflow using local vertical agent architecture
- Type safety approach: Use strict TypeScript narrowing patterns to ensure type-safe state transitions in the refund pipeline
Obsidian Organizer
3 decisions-
Image viewing feature: Use
mlx-community/llava-v1as the vision model for image understanding and captioning -
Vision model loading: Find a reliable way to load the vision model — look for associated Python environments with
mlx_lminstalled - Feature extension: Add image viewing capabilities and filename update feature alongside existing organization functionality
Memory
3 decisions- Hindsight integration: Use SHA-256 with a fixed 32-byte length for content-addressed storage
-
Project relocation: Option B — redo everything in a permanent location (
~/Desktop) instead of working from temp directories - Strategic pivot documentation: When a pivot based on competitor data affects employees or customers, document the decision logic for compliance