bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
Claude Code, Codex or any agent reads and diagnoses real cars over OBD-II, or a built-in virtual car. Open source.
SkillsPythonGitHub @october-devOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Let your agent use your car. Claude Code, Codex or any agent reads and diagnoses real cars over OBD-II, or a built-in virtual car.
Loading the full README.
Read the full README ↗Your AI agent can read your car's error codes, check its sensors and tell you what's wrong. All you need is a $15 plug-in adapter. No car nearby? Use a virtual one.
Works with Claude Code, Codex, OpenClaw, Hermes and any AI agent that can run a command.
Cars: any car since 1996 (US), 2001 (EU) or 2020 (India), with almost any OBD-II adapter Motorsport: race cars, karts, project cars and Formula Student cars More than cars: cranes, diggers, generators and trucks, in one chat Car to car: your cars talk to each other and sort things out car-use Cloud: give every car its own always-on AI brain (early access)
You: My check engine light came on this morning. What's wrong?
| The agent… | What it found |
|---|---|
reads the error code · dtcs() | P0420: the catalytic converter isn't working well |
checks when it happened · freeze_frame() | At 2,210 rpm and 72 km/h. The fuel mix was normal. |
watches both oxygen sensors · watch(o2) | The rear one copies the front one. On a healthy car it stays steady. |
Agent: Most likely a worn-out catalytic converter. Have a mechanic check for an exhaust leak before the rear sensor first. If there isn't one, the converter needs replacing.
Paste this into your agent:
Install car-use with `uv tool install car-use`, run `car-use skill` and follow it, then read https://github.com/october-dev/car-use/blob/main/onboarding.md and walk me through it.
Your agent installs car-use, learns how to use it, shows you a practice diagnosis on a virtual car, then helps you plug in your adapter. You do the plugging in and turning the key. The agent does the rest.
car-use config set device tcp://192.168.0.10:35000 # Wi-Fi adapter (join its Wi-Fi first)
car-use config set device "serial:///dev/cu.usbserial-XXXX?baud=38400" # USB adapter (needs car-use[serial])
car-use doctor # is everything connected? tells you the one fix if not
car-use dongle-doctor # what adapter did you actually buy? graded A to D
car-use dongle-doctor --report # anonymised JSON to share (WMI and model year, not the full VIN).
# Takes ten minutes with the ignition on and prints its JSON at the end;
# --soak-seconds 30 takes a quick sample instead
Longer notes for Wi-Fi, USB, Windows and Bluetooth, plus which adapters are worth buying: setup/.
car-use inspect --expect-vin <the-VIN-from-the-windshield> # red / amber / green scan
car-use inspect --sim cleared-codes --html scan.html # try it on a virtual car
car-use inspect --md scan.md # save the markdown too
This is an OBD scan, not a mechanical inspection: codes, self-checks, identity and charging voltage. It does not compare odometer readings across modules yet. The report includes the full VIN, so don't post it publicly.
Pretend cars with real problems to solve. Pick one and let your agent work out what's wrong:
uv tool install car-use
car-use --sim p0420 <<'PY'
print(dtcs())
print(watch(["o2_b1s1", "o2_b1s2"], seconds=10))
PY
| Car | What's wrong | Difficulty |
|---|---|---|
p0420 | Worn-out catalytic converter. The rear oxygen sensor copies the front one. | Medium |
p0171 | Air leak. Fuel correction is high at idle and normal when driving. | Medium |
p0300 | Engine misfire. Shaky idle, two cylinders acting up. | Hard |
cleared-codes | The seller cleared the codes. Looks clean, but the self-checks haven't finished. | Tricky |
dying-battery | Battery not charging. Voltage keeps dropping while the engine runs. | Easy |
healthy | Nothing wrong. Use it to see what normal looks like. | Easy |
ignition-off | The adapter has power but the car doesn't answer. | Easy |
kwp2000 | Older car on KWP2000, not CAN. Several codes, slow to wake. | Medium |
iso9141 | Older car on ISO 9141-2. One code. | Medium |
p0128 | Thermostat stuck open. Coolant stays low after a long idle. | Easy |
p0442 | Small evap leak. The car drives normally. | Easy |
dpf-regen | Diesel filter regenerating. Idle and fuel use are high. | Medium |
hybrid-12v | Hybrid with a weak 12 V battery. The engine is not running. | Easy |
cng-bifuel | CNG car. The usual sensors look like a petrol car. | Tricky |
obd-2b | 2025 scooter on OBD Stage II-B. Only a few sensors answer. | Easy |
healthy-ev | Illustrative EV profile, not a real model. Almost no engine data, and nothing is wrong. | Tricky |
two-ecu | Engine and transmission both answer. Codes stay with the ECU that sent them. | Medium |
Each virtual car can also pretend to be a different adapter: a genuine ELM327, a cheap clone, or an OBDLink. Run one as a Wi-Fi adapter with car-use sim p0171 --port 35000 and point any OBD app at it. You can write your own in ~/.car-use/scenarios/.
Your agent sends short Python scripts. The helpers are already loaded. An agent with no shell can use the MCP server instead.
car-use <<'PY'
print(car().describe()) # which car and adapter
print(vin_info()) # model year, maker
print(dtcs()) # error codes, explained
print(readiness()) # the car's self-checks, and how long since codes were cleared
print(read_many(["rpm", "coolant", "ltft1", "battery"]))
PY
This is the beginning of the README. Read the rest at the original. Read the full README ↗