Repository navigation
Releases: Akshaz7/capsules-harmonyos
Release list
Harmoniser v1.0 (HackYeah 2026)
Built from 93a34b8. The tag adds documentation only; the code is identical.
Harmoniser v1.0 (HackYeah 2026)
Tiny apps you don't need to download. Describe what you need in a sentence and Harmoniser builds a small app (a "capsule") on your phone: timers, counters, checklists, converters, scoreboards, weather-aware task lists. Each capsule asks before it uses a phone capability, and can be pinned to the home screen as a widget.
HarmonyOS / OpenHarmony, API 24 target (minimum API 20). Built from commit 93a34b8.
Downloads: which HAP to use
| You have | Use | SHA256 |
|---|---|---|
| The DevEco emulator | harmoniser-final-93a34b8-emulator-unsigned.hap |
dd71b8b033e7267a102b2f84ba568d0e42d5fdff59bf1c7e30d50d5020a8e957 |
| A real phone | Build from source with DevEco automatic signing (see "Real phone" below). The signed HAP only installs on our team's test phones. | |
| One of our team's test phones | harmoniser-final-93a34b8.hap (debug-signed with our profile) |
67b01028f2a418099773114182f5411486a7cb574b149ce5ec9e11f2d76a217f |
Both HAPs were scanned before upload: no API keys, tokens or config files inside. 363/363 unit tests pass at 93a34b8.
Install
Bundle name: com.hackyeah.capsules.
hdc uninstall com.hackyeah.capsules
hdc install -r harmoniser-final-93a34b8-emulator-unsigned.hap # emulator
hdc shell aa start -a EntryAbility -b com.hackyeah.capsulesWith more than one device connected, add -t <device-id> (from hdc list targets) to each command.
Rules, templates and the on-device AI work without any key.
Optional cloud AI (Claude). config.local.json must set the provider to Claude, with your own Anthropic API key. Never commit it, and never put it inside the HAP:
cat > /tmp/config.local.json <<'EOF'
{"default":"anthropic","providers":{"anthropic":{"apiKey":"<your Anthropic API key>"}},
"marketplace":{"baseUrl":"https://harmoniser-web.vercel.app"}}
EOF
hdc file send -b com.hackyeah.capsules /tmp/config.local.json data/storage/el2/base/files/
rm /tmp/config.local.json
hdc shell aa force-stop com.hackyeah.capsules && hdc shell aa start -a EntryAbility -b com.hackyeah.capsulesMost requests are built on the phone. When one needs a cloud model, the app names the provider first, which may be outside the EU. Only the request text (plus the weather line for live capsules) is sent, and only after you tap OK.
Real phone
harmoniser-final-93a34b8.hap is debug-signed with our team profile, which only covers our test phones; on any other phone the install fails with a signature or profile error. On a real phone, build the same code yourself:
git clone https://github.com/Akshaz7/capsules-harmonyos.git && cd capsules-harmonyos
git checkout v1.0-hackyeah
ohpm install --allOpen the folder in DevEco Studio, connect the phone, and tick File → Project Structure → Signing Configs → Automatically generate signature. Then Run ▶. Don't commit the signing change it writes to build-profile.json5.
Known issues
- After pressing Back on the "Use Claude" notice, the Create button can stop responding. Restart the app.
- After a restart, that request builds on the phone without offering Claude again.
- Mistral code is still in the app but switched off; it is being removed.
Third-party
Weather data by Open-Meteo.com (CC BY 4.0), shown with attribution in the app.
Old test build, do not use
Test build 1 of Harmoniser, built from e493911. It's an unsigned debug build, so it installs on the emulator only.
Install
- In DevEco Studio, start a HarmonyOS phone emulator (API 24).
- Install and launch:
hdc install -r harmoniser-test-1.hap hdc shell aa start -a EntryAbility -b com.hackyeah.capsules
- On-device AI: launch the app once, then run
scripts/push-model.shfrom the repo.
If push-model.sh fails, download the model manually from https://huggingface.co/Cactus-Compute/LFM2-VL-450M/resolve/v2.0/lfm2-vl-450m-cq4.zip, unzip it, and pass the folder to the script. A fixed script is coming. - Mistral EU (optional): put your own free key in
config.local.json:
{"default":"mistral","providers":{"mistral":{"apiKey":"<your key>","model":"ministral-14b-latest"}}}
Then push it to the app:
hdc file send -b com.hackyeah.capsules config.local.json data/storage/el2/base/files/
Never commit this file.
Without the model or a key, the app still works using its built-in rules.
What to test
- Offline (airplane mode on): "pasta 9 min, sauce 15 min, bread 6 min", "water 8 glasses", "checklist for leaving home: keys, wallet, charger", "split 84 between 4", "medication 8am and 8pm"
- On-device: "a counter for coffees today", "laundry done in 55 minutes"
- Mistral EU (needs your own free key, airplane mode off): "km to miles converter", "tennis scoreboard me vs Sam", "tip calculator with bill and tip percent", "darts score for 3 players", "quiz me on 3 capitals"
- Gatekeeper: deny a permission, then check the Log
- Widgets: add one, tap it, open the app, and check the numbers match
- Sharing: share a capsule, import it back, and check it says "From someone else"
- Removing: remove a capsule and check it's gone from the app, the widget and Calendar
- Weird input: "asdf", emoji, a very long request
Reporting bugs
Use this format: what you typed -> what happened -> what you expected (+ screenshot).
SHA-256: f7063d7f101ee43ec4e9d992d391e41c2cd09481fe0cf84a7d5b666369ccc467