# Hajware (Full Reference) > Hajware is David Weng's software label. Agent-friendly CLI tools, desktop apps, a Steam Deck plugin, a browser extension, and a personal finance backend. All open-source, all single-binary where possible. ## Projects ### canvas-cli 50+ commands for Canvas LMS — courses, assignments, submissions, grading, and more. - Docs: https://app.blahaj.uk/canvas-cli/ - GitHub: https://github.com/thedavidweng/canvas-cli - Authentication: OAuth2 token via canvas-cli auth - JSON output: --json flag on all commands - Safety: --dry-run, --confirm on mutations - Key commands: courses list, assignments list, submissions list, grade, enroll ### zenodo-cli Record management, file upload, and full InvenioRDM API access for Zenodo. - Docs: https://app.blahaj.uk/zenodo-cli/ - GitHub: https://github.com/thedavidweng/zenodo-cli - Authentication: API token via zenodo-cli auth - Capabilities: records, deposits, files, communities, grants - Safety: read-only default, --confirm on uploads ### monarchmoney-cli Accounts, transactions, budgets, and cashflow from your terminal. - Docs: https://app.blahaj.uk/monarchmoney-cli/ - GitHub: https://github.com/thedavidweng/monarchmoney-cli - Authentication: session token via monarchmoney-cli auth - JSON output: --json flag, versioned JSON envelope - Key commands: accounts list, transactions list, budgets list, cashflow ### flickr-cli Photo management, backup, upload, albums, and full Flickr API access. - Docs: https://app.blahaj.uk/flickr-cli/ - GitHub: https://github.com/thedavidweng/flickr-cli - Authentication: OAuth1 via flickr-cli auth - Capabilities: photos, albums, galleries, favorites, backup, upload - Piwigo import: migrate from Flickr to self-hosted Piwigo - Safety: --dry-run on bulk operations ### qualtrics-cli Agent-friendly CLI for Qualtrics XM Platform & offline survey compiler. - Docs: https://app.blahaj.uk/qualtrics-cli/ - GitHub: https://github.com/thedavidweng/qualtrics-cli - Authentication: API token via qualtrics auth - Capabilities: surveys, definitions, async response export/import, distributions, contacts, webhooks, raw API - Offline QSF: compile Markdown survey specs to .qsf without API credentials - Safety: --read-only, --dry-run, --confirm gates ### money Local-first, self-hostable personal finance backend for AI agents and power users. - Docs: https://app.blahaj.uk/money/ - GitHub: https://github.com/thedavidweng/money - Agent JSON: https://app.blahaj.uk/money/agent.json - Install: brew install --cask thedavidweng/tap/money - Go install: go install github.com/thedavidweng/money/cmd/money@latest - Features: encrypted SQLite, BYOK providers (Plaid, Bridge), stable JSON contracts, CLI-first, demo mode - Key commands: accounts list, transactions list, transactions search, categories list, tags list, recurring list, link, sync, setup, doctor, demo - License: Apache 2.0 ## Desktop Apps ### OpenKara Cross-platform desktop karaoke app. On-device stem separation, synced lyrics, live mixing. - Site: https://openkara.blahaj.uk/ - GitHub: https://github.com/thedavidweng/OpenKara - Built with: Tauri (Rust + web frontend) - Platforms: macOS, Windows, Linux - Features: 2- or 4-stem AI separation (Demucs), live stem mixing, synced lyrics (LRC, embedded, CD+G), portable self-contained library ### Sukiru Native macOS app that checks and repairs coding agents' skill libraries. - Site: https://sukiru.blahaj.uk/ - GitHub: https://github.com/thedavidweng/sukiru - Install: brew install --cask thedavidweng/tap/sukiru - Requires: macOS 14 Sonoma or later on Apple silicon - Features: health checks for stale lock records, broken links, diverged copies, and skills claimed by both installers; one-click fixes routed to the owning installer (npx skills or gh skill); snapshot/rollback for every batch; skill search and install - Privacy: no accounts, analytics, or telemetry ### Apple Say Native macOS speech synthesis and timed text. - Site: https://apple-say.blahaj.uk/ - GitHub: https://github.com/thedavidweng/apple-say - Install: brew install --cask thedavidweng/tap/apple-say - Requires: macOS 14 Sonoma or later - Features: Plain Text, LRC, and Enhanced LRC (word-level) with automatic rate scaling; System Voice, Siri Natural, and Personal Voice; export AAC, AIFF, WAV, or CAF - Privacy: fully local, no network calls or telemetry ### SDF Flash GUI Cross-platform desktop front end for MakeMKV's sdftool. Dump, flash, and recover MT1959 (LG and ASUS) Blu-ray drive firmware. - Site: https://sdf-flash-gui.blahaj.uk/ - GitHub: https://github.com/thedavidweng/sdf-flash-gui - Install: brew install --cask thedavidweng/tap/sdf-flash-gui - Built with: Rust and egui; the site embeds the real UI compiled to WebAssembly with simulated drives - Platforms: macOS, Windows, Linux - Safety: MT1959-only platform check, form-factor cross-flash acknowledgement, SHA-256 firmware identity, exclusive flash modes, typed confirmation, dry-run - Features: drive probe, firmware dump, flash with progress, boot-token recovery, sdf.bin parser, sdftool or makemkvcon backends, argv-only backend calls - License: GPL-2.0-or-later ### tg-drive Desktop app that turns a Telegram channel into a recoverable file tree. td is the command-line interface for the same engine. - Site: https://tg-drive.blahaj.uk/ - Docs: https://github.com/thedavidweng/tg-drive/tree/main/docs/guides - GitHub: https://github.com/thedavidweng/tg-drive - Install: brew install --cask thedavidweng/tap/tg-drive - Built with: Wails v3 (Go + web frontend) - Platforms: macOS, Windows, Linux - Features: drive browser, transfers, Saved Messages import, maintenance; td covers the same engine from the terminal - Authentication: MTProto user login via td auth login - Storage: Telegram messages as source of truth, local SQLite cache - Safety: operation locks, DB transactions, --confirm on mutations ### Vapourfly Desktop app that organizes a Steam library into playlists, with recommendations and junk cleanup. vapourfly is the command-line interface for the same app. - Site: https://vapourfly.blahaj.uk/ - Docs: https://github.com/thedavidweng/vapourfly/blob/main/docs/tutorials/getting-started.md - GitHub: https://github.com/thedavidweng/vapourfly - Install: brew install --cask thedavidweng/tap/vapourfly - Platforms: macOS, Windows, Linux - Features: manual and rule-based playlists, recommendations, junk cleanup, Steam Deck - Safety: dry-run or confirmation before Steam file writes, with a backup taken first ### OpenLoop Desktop app that turns a prompt and lyrics into tracks with open models on Apple Silicon. openloop-cli is the command-line interface for the same app. - Site: https://openloop.blahaj.uk/ - Docs: https://github.com/thedavidweng/OpenLoop#readme - GitHub: https://github.com/thedavidweng/OpenLoop - Install: brew install --cask thedavidweng/tap/openloop - Platforms: macOS 15+, Apple Silicon - Features: projects and Takes, A/B compare, reproduce, region repaint, on-device ACE-Step - Safety: prompts, lyrics, and audio stay on the Mac; generation does not upload them ## Plugins ### DeckPad Decky Loader plugin that uses a Steam Deck as a Bluetooth game controller for a PC, phone, or tablet. - Site: https://deckpad.blahaj.uk/ - GitHub: https://github.com/thedavidweng/DeckPad - Install: Decky Loader, then DeckPad.zip from the latest GitHub release. Not in the Decky Plugin Store yet. - Platforms: SteamOS (Steam Deck) - Hosts: pairs through the host's own Bluetooth settings. Requires Bluetooth Low Energy HID over GATT. Tested on Linux, where it appears as an Xbox Wireless Controller. - Controls sent: face buttons, bumpers, analog triggers, both sticks and stick clicks, D-pad, View, Menu. Steam button becomes Guide; Quick Access becomes Share. Rear buttons, trackpads, gyro, and rumble are not sent. - Behavior: Controller Mode changes bluetoothd in memory and is undone when the mode turns off. It is off after a reboot. Quit combo is Menu + View + L1 + R1. - License: BSD 3-Clause ## Extensions ### ADP Shifts Browser extension that copies an ADP Workforce Now schedule into a Google Calendar the extension creates and owns, then keeps that calendar current. - Site: https://adp-shifts.blahaj.uk/ - GitHub: https://github.com/thedavidweng/adp-calendar - Install: Chrome Web Store (ADP Shifts). Automatic sync into a calendar named ADP Shifts. Export .ics is also in the toolbar popup. - Userscript: Greasy Fork, ADP Schedule Export. Adds an Export .ics button on Workforce Now and does not use a Google account. - Platforms: Chrome, Edge, Brave, Arc, and other Chromium browsers for the extension. The userscript needs Tampermonkey, Violentmonkey, or another userscript manager. - Sync: checks daily and when Workforce Now is open. Runs when the last successful sync is more than three and a half days old. Sync now updates immediately. - Scope: Google calendar.app.created only. It cannot read or change any other calendar. Past shifts are not rewritten. - Privacy: no servers and no analytics. The extension uses the existing ADP session and never asks for the ADP password. Disconnect revokes Google access and erases local data. - License: MIT ## Documentation Pages ### canvas-cli - Overview: https://app.blahaj.uk/canvas-cli/ - Auth: https://app.blahaj.uk/canvas-cli/docs/auth - Commands: https://app.blahaj.uk/canvas-cli/docs/command-spec - JSON Contract: https://app.blahaj.uk/canvas-cli/docs/json-contract - Safety: https://app.blahaj.uk/canvas-cli/docs/safety-model - Architecture: https://app.blahaj.uk/canvas-cli/docs/architecture - Agent Domain: https://app.blahaj.uk/canvas-cli/docs/agents/domain ### zenodo-cli - Overview: https://app.blahaj.uk/zenodo-cli/ - Auth: https://app.blahaj.uk/zenodo-cli/docs/auth - Capabilities: https://app.blahaj.uk/zenodo-cli/docs/capabilities - Safety: https://app.blahaj.uk/zenodo-cli/docs/safety - Agent Guide: https://app.blahaj.uk/zenodo-cli/docs/agent-guide - Architecture: https://app.blahaj.uk/zenodo-cli/docs/ARCHITECTURE ### monarchmoney-cli - Overview: https://app.blahaj.uk/monarchmoney-cli/ - Capabilities: https://app.blahaj.uk/monarchmoney-cli/docs/capabilities - Auth: https://app.blahaj.uk/monarchmoney-cli/docs/auth - Safety: https://app.blahaj.uk/monarchmoney-cli/docs/safety - Agent Guide: https://app.blahaj.uk/monarchmoney-cli/docs/agent-guide - JSON Schema: https://app.blahaj.uk/monarchmoney-cli/docs/json-schema ### flickr-cli - Overview: https://app.blahaj.uk/flickr-cli/ - Auth: https://app.blahaj.uk/flickr-cli/docs/auth - Capabilities: https://app.blahaj.uk/flickr-cli/docs/capabilities - Upload: https://app.blahaj.uk/flickr-cli/docs/upload - Backup: https://app.blahaj.uk/flickr-cli/docs/backup - Safety: https://app.blahaj.uk/flickr-cli/docs/safety - Agent Guide: https://app.blahaj.uk/flickr-cli/docs/agent-guide - Piwigo: https://app.blahaj.uk/flickr-cli/docs/piwigo - Architecture: https://app.blahaj.uk/flickr-cli/docs/ARCHITECTURE ### money - Overview: https://app.blahaj.uk/money/ - Getting Started: https://app.blahaj.uk/money/docs/GETTING_STARTED - Architecture: https://app.blahaj.uk/money/docs/ARCHITECTURE - Contracts: https://app.blahaj.uk/money/docs/CONTRACTS - Schema: https://app.blahaj.uk/money/docs/SCHEMA - Config: https://app.blahaj.uk/money/docs/CONFIG - Roadmap: https://app.blahaj.uk/money/docs/ROADMAP ### qualtrics-cli - Overview: https://app.blahaj.uk/qualtrics-cli/ - QSF Spec: https://app.blahaj.uk/qualtrics-cli/docs/qsf-spec - Commands: https://app.blahaj.uk/qualtrics-cli/COMMANDS - JSON Schema: https://app.blahaj.uk/qualtrics-cli/JSON_SCHEMA - Context: https://app.blahaj.uk/qualtrics-cli/CONTEXT ### tg-drive - Site: https://tg-drive.blahaj.uk/ - Getting Started: https://github.com/thedavidweng/tg-drive/blob/main/docs/guides/getting-started.md - Guides: https://github.com/thedavidweng/tg-drive/tree/main/docs/guides ## Design Principles - Agent-friendly — versioned JSON on stdout, logs on stderr, documented exit codes - Safety first — --read-only, --dry-run, --confirm gates on mutations - Single binary — no runtime, no containers, no dependencies ## Contact - GitHub: https://github.com/thedavidweng - Site: https://app.blahaj.uk/