MCPcopy Index your code
hub / github.com/MaxMaeder/OpenPin

github.com/MaxMaeder/OpenPin @v1.0.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.2 ↗ · + Follow
737 symbols 1,684 edges 281 files 84 documented · 11%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

OpenPin

OpenPin is an open-source project which lets you use your Ai Pin after Humane bricked them. You can install it in a few clicks & without any ADB certs!

Installing OpenPin

Please see OpenPin.org for installation and usage instructions.

Building a Interposer

Assembled interposers

Bill of Materials

Qty Name Where to Buy
4 M2x8mm Hex Screws Amazon
4 M2 Hex Locknuts Amazon
4 Small Magnets Amazon
1 Micro-USB Port DigiKey
1 Pogo-Pin Assembly DigiKey

If you order the PCB with the USB-port already soldered (as in the instructions below) you do NOT need to buy the 'Micro-USB Port' part.

Tools Required

Name Where to Buy
1.5mm Hex Driver Inc. with Screws
4mm Nut Driver Amazon
T27 TORX Hex Driver Amazon

You will also need soldering tools and a 3D printer, depending on how much you choose to do yourself (versus using a service).

  1. Order the PCBs

The following instructions are for if you want to buy the PCBs with the surface mount USB port already soldered.

These instructions are for JLCPCB. I don't have any affiliation, I just like them.

Upload gerbers

  • Download the pin-interposer.zip (the zipped Gerber files)
  • Take pin-interposer.zip, go to JLCPCB.com, and simply upload into the file dropbox

Set PCB details

  • The only setting you need to change is toggling on 'PCB Assembly'
  • Click next, confirm you see the PCB in the preview, then click next again

Upload assembly files

  • Download bom.csv and positions.csv
  • Upload bom.csv into the left dropbox & positions.csv into the right, then click next

Set parts to assemble

BOM final configuration

  • Click the search icon across from J1, enter 10118193-0001LF, and search & select it
  • Leave the other rows alone
  • Click next, it will ask if you are sure you don't want to assemble the other rows, click confirm

Click through rest of process and check out!

  1. 3D-print plastic parts

  2. Download the two 3D models: Pin-Base.stl and Pin-Cradle.stl

  3. Print with 0.2mm quality or better in PLA

  4. Solder the pogo-pins

  5. Push the pins of the part into the 4 matching holes on the board

Make sure the part is on the same face of the board as the USB port! - Solder one pin to start with, make sure its flush with the board and perfectly vertical

If not soldered correctly, reheat the solder joint and adjust. - Solder the remaining pins

  1. Final assembly

Putting the parts together

  • Put the Pin Base down on a table
  • Press the PCB into the matching recess (it should be fairly obvious how it fits)
  • Place the Pin Cradle overtop of this assembly, aligning it so the pogo pins protrude through the hole

Screwing everything in

  • Feed the four M2 screw through the holes in top, hand-tighten on nuts
  • Use the 1.5mm Hex Driver and 4mm Nut Driver to tighten everything up

Install magnets

⚠️ It's really important you get the orientation of the magnets correct!

  • Place four magnets on the underside of AI Pin like so:

AI Pin with magnets test-fit on back

  • Mark the exposed face of each magnet with a sharpie
  • Being careful not to get mixed up, transfer each magnet to the corresponding hole on the Pin Cradle, sharpie-side down

Again, make sure its in the correct hole & in correct orientation!! - Depending on your printer tolerances, the magnet may be too hard to push into the hole - Use the T27 TORX Hex Driver to file the hole until it fits - The driver works great for actually pushing the magnet into the hole, too

  1. Enjoy & move on to installing client!

Extension points exported contracts — how you extend this code

AudioSource (Interface)
* Defines an audio source that allows volume adjustment. */
client/appframework/src/main/java/org/openpin/appframework/media/AudioSource.kt
ProcessCallback (Interface)
Callback interface for process completion.
daemon/src/nativeMain/kotlin/org/openpin/daemon/processes/ProcessCallback.kt
Request (Interface)
(no doc)
server/types/express/index.d.ts
MoreContentPayload (Interface)
(no doc)
server/src/sockets/msgHandlers/devContentReq.ts
LoadingPlaceholderProps (Interface)
(no doc)
server/dashboard/src/components/LoadingPlaceholder.tsx
CaptureSession (Interface)
* A capture session interface. * The waitForResult suspend function will complete when the capture operation finalizes.
client/appframework/src/main/java/org/openpin/appframework/sensors/camera/CaptureSession.kt
Response (Interface)
(no doc)
server/types/express/index.d.ts
DeleteContentPayload (Interface)
(no doc)
server/src/sockets/msgHandlers/devContentReq.ts

Core symbols most depended-on inside this repo

get
called by 28
client/appframework/src/main/java/org/openpin/appframework/daemonbridge/manager/DaemonFileSystem.kt
play
called by 23
client/appframework/src/main/java/org/openpin/appframework/media/soundplayer/SoundPlayer.kt
push
called by 23
client/appframework/src/main/java/org/openpin/appframework/ui/controllers/NavigationController.kt
Text
called by 20
client/appframework/src/main/java/org/openpin/appframework/ui/components/Text.kt
bind
called by 13
server/dashboard/src/routes/Device/tabs/Settings/useBindSettings.ts
release
called by 11
client/appframework/src/main/java/org/openpin/appframework/daemonbridge/process/ProcessHandler.kt
getString
called by 11
client/apps/primaryapp/src/main/java/org/openpin/primaryapp/configuration/ConfigurationManager.kt
set
called by 11
client/apps/primaryapp/src/main/java/org/openpin/primaryapp/configuration/ConfigurationManager.kt

Shape

Function 288
Method 212
Class 131
Interface 106

Languages

TypeScript55%
Kotlin45%
C1%

Modules by API surface

server/src/davis/index.ts21 symbols
server/src/services/maps.ts16 symbols
client/appframework/src/main/java/org/openpin/appframework/daemonbridge/process/RequestProcess.kt16 symbols
server/src/endpoints/device/voice/common.ts15 symbols
client/appframework/src/main/java/org/openpin/appframework/sensors/camera/CameraManager.kt15 symbols
client/apps/primaryapp/src/main/java/org/openpin/primaryapp/GestureManager.kt14 symbols
server/src/services/completions.ts13 symbols
client/apps/primaryapp/src/main/java/org/openpin/primaryapp/backend/BackendManager.kt13 symbols
daemon/src/nativeMain/kotlin/org/openpin/daemon/gestures/GestureDetector.kt9 symbols
client/apps/primaryapp/src/main/java/org/openpin/primaryapp/gestureinterpreter/GestureInterpreter.kt9 symbols
client/appframework/src/main/java/org/openpin/appframework/ui/config/ButtonConfig.kt9 symbols
client/appframework/src/main/java/org/openpin/appframework/devicestate/location/LocationManager.kt9 symbols

For agents

$ claude mcp add OpenPin \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact