ido-agent 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. ido_agent-0.1.0/.dockerignore +13 -0
  2. ido_agent-0.1.0/.env.example +50 -0
  3. ido_agent-0.1.0/.github/workflows/ci.yml +45 -0
  4. ido_agent-0.1.0/.github/workflows/release.yml +113 -0
  5. ido_agent-0.1.0/.gitignore +26 -0
  6. ido_agent-0.1.0/Dockerfile +33 -0
  7. ido_agent-0.1.0/PKG-INFO +183 -0
  8. ido_agent-0.1.0/README.md +163 -0
  9. ido_agent-0.1.0/adapters/__init__.py +1 -0
  10. ido_agent-0.1.0/adapters/blender/__init__.py +1 -0
  11. ido_agent-0.1.0/adapters/blender/ido_blender/__init__.py +20 -0
  12. ido_agent-0.1.0/adapters/blender/ido_blender/client.py +195 -0
  13. ido_agent-0.1.0/adapters/blender/ido_blender/executor.py +254 -0
  14. ido_agent-0.1.0/adapters/blender/ido_blender/harness.py +70 -0
  15. ido_agent-0.1.0/adapters/blender/ido_blender/planner.py +75 -0
  16. ido_agent-0.1.0/adapters/blender/ido_blender/state.py +109 -0
  17. ido_agent-0.1.0/adapters/blender/ido_blender/trace_timeline.py +45 -0
  18. ido_agent-0.1.0/adapters/blender/ido_blender/ui.py +560 -0
  19. ido_agent-0.1.0/adapters/openscad/__init__.py +5 -0
  20. ido_agent-0.1.0/adapters/openscad/adapter.py +204 -0
  21. ido_agent-0.1.0/assets/ido-banner.png +0 -0
  22. ido_agent-0.1.0/backend/__init__.py +4 -0
  23. ido_agent-0.1.0/backend/__main__.py +16 -0
  24. ido_agent-0.1.0/backend/airbyte_exporter.py +146 -0
  25. ido_agent-0.1.0/backend/api_validation.py +83 -0
  26. ido_agent-0.1.0/backend/clickhouse_exporter.py +223 -0
  27. ido_agent-0.1.0/backend/composio_exporter.py +162 -0
  28. ido_agent-0.1.0/backend/config.py +122 -0
  29. ido_agent-0.1.0/backend/guild_exporter.py +301 -0
  30. ido_agent-0.1.0/backend/integrations.py +59 -0
  31. ido_agent-0.1.0/backend/main.py +882 -0
  32. ido_agent-0.1.0/backend/openscad_service.py +41 -0
  33. ido_agent-0.1.0/backend/openui_exporter.py +154 -0
  34. ido_agent-0.1.0/backend/providers/__init__.py +10 -0
  35. ido_agent-0.1.0/backend/providers/base.py +32 -0
  36. ido_agent-0.1.0/backend/providers/factory.py +113 -0
  37. ido_agent-0.1.0/backend/providers/fallback.py +263 -0
  38. ido_agent-0.1.0/backend/providers/openai_provider.py +235 -0
  39. ido_agent-0.1.0/backend/providers/pioneer_provider.py +31 -0
  40. ido_agent-0.1.0/backend/request_context.py +43 -0
  41. ido_agent-0.1.0/backend/sponsor_exports.py +106 -0
  42. ido_agent-0.1.0/backend/sponsor_insights.py +74 -0
  43. ido_agent-0.1.0/backend/status.py +34 -0
  44. ido_agent-0.1.0/backend/tracing.py +52 -0
  45. ido_agent-0.1.0/backend/user_config.py +119 -0
  46. ido_agent-0.1.0/companion/__init__.py +1 -0
  47. ido_agent-0.1.0/companion/cli.py +457 -0
  48. ido_agent-0.1.0/companion/platforms.py +96 -0
  49. ido_agent-0.1.0/deploy_truefoundry.py +60 -0
  50. ido_agent-0.1.0/ido +4 -0
  51. ido_agent-0.1.0/ir_schema.json +374 -0
  52. ido_agent-0.1.0/packaging/README.md +19 -0
  53. ido_agent-0.1.0/packaging/ido.spec +24 -0
  54. ido_agent-0.1.0/packaging/windows.iss +38 -0
  55. ido_agent-0.1.0/pyproject.toml +44 -0
  56. ido_agent-0.1.0/render.yaml +37 -0
  57. ido_agent-0.1.0/scripts/blender_render.py +49 -0
  58. ido_agent-0.1.0/scripts/blender_smoke.py +56 -0
  59. ido_agent-0.1.0/scripts/test_real_quickstart.sh +111 -0
  60. ido_agent-0.1.0/shared/__init__.py +36 -0
  61. ido_agent-0.1.0/shared/contracts.py +155 -0
  62. ido_agent-0.1.0/shared/ir.py +117 -0
  63. ido_agent-0.1.0/shared/validation.py +68 -0
  64. ido_agent-0.1.0/site/ido_blender.zip +0 -0
  65. ido_agent-0.1.0/site/index.html +720 -0
  66. ido_agent-0.1.0/site/screenshot1.png +0 -0
  67. ido_agent-0.1.0/site/screenshot3.png +0 -0
  68. ido_agent-0.1.0/tests/fixtures/house_ir.json +152 -0
  69. ido_agent-0.1.0/tests/test_airbyte_exporter.py +90 -0
  70. ido_agent-0.1.0/tests/test_api.py +351 -0
  71. ido_agent-0.1.0/tests/test_blender_adapter.py +84 -0
  72. ido_agent-0.1.0/tests/test_blender_client.py +72 -0
  73. ido_agent-0.1.0/tests/test_blender_harness.py +27 -0
  74. ido_agent-0.1.0/tests/test_cli.py +130 -0
  75. ido_agent-0.1.0/tests/test_clickhouse_exporter.py +93 -0
  76. ido_agent-0.1.0/tests/test_composio_exporter.py +51 -0
  77. ido_agent-0.1.0/tests/test_config.py +34 -0
  78. ido_agent-0.1.0/tests/test_furniture.py +62 -0
  79. ido_agent-0.1.0/tests/test_guild_exporter.py +120 -0
  80. ido_agent-0.1.0/tests/test_integrations.py +117 -0
  81. ido_agent-0.1.0/tests/test_ir.py +74 -0
  82. ido_agent-0.1.0/tests/test_openscad.py +92 -0
  83. ido_agent-0.1.0/tests/test_openscad_clean.py +76 -0
  84. ido_agent-0.1.0/tests/test_openui_exporter.py +74 -0
  85. ido_agent-0.1.0/tests/test_pioneer_provider.py +102 -0
  86. ido_agent-0.1.0/tests/test_providers.py +173 -0
  87. ido_agent-0.1.0/tests/test_sponsor_insights.py +47 -0
  88. ido_agent-0.1.0/tests/test_trace_timeline.py +34 -0
  89. ido_agent-0.1.0/web/eslint.config.js +22 -0
  90. ido_agent-0.1.0/web/index.html +18 -0
  91. ido_agent-0.1.0/web/package-lock.json +3183 -0
  92. ido_agent-0.1.0/web/package.json +29 -0
  93. ido_agent-0.1.0/web/public/ido-icon.svg +4 -0
  94. ido_agent-0.1.0/web/src/App.tsx +860 -0
  95. ido_agent-0.1.0/web/src/main.tsx +10 -0
  96. ido_agent-0.1.0/web/src/setupCommands.ts +52 -0
  97. ido_agent-0.1.0/web/src/styles.css +452 -0
  98. ido_agent-0.1.0/web/tsconfig.app.json +20 -0
  99. ido_agent-0.1.0/web/tsconfig.json +7 -0
  100. ido_agent-0.1.0/web/tsconfig.node.json +11 -0
  101. ido_agent-0.1.0/web/vite.config.ts +7 -0
@@ -0,0 +1,13 @@
1
+ .venv
2
+ __pycache__
3
+ *.pyc
4
+ .git
5
+ .github
6
+ tests
7
+ site
8
+ *.blend
9
+ airbyte
10
+ .pytest_cache
11
+ node_modules
12
+ web/node_modules
13
+ backup
@@ -0,0 +1,50 @@
1
+ CAD_AGENT_PROVIDER=openai
2
+ CAD_AGENT_DEMO_MODE=false
3
+ OPENAI_API_KEY=
4
+ OPENAI_BASE_URL=https://api.openai.com/v1
5
+ OPENAI_MODEL=gpt-4o-mini
6
+ TRUEFOUNDRY_API_KEY=
7
+ TRUEFOUNDRY_HOST=
8
+ CAD_AGENT_LOG_LEVEL=INFO
9
+ IDO_API_URL=http://127.0.0.1:8010
10
+ IDO_OUTPUT_DIR=
11
+
12
+ # Guild AI trace export (OpenTelemetry OTLP/HTTP JSON)
13
+ GUILD_TRACE_ENABLED=false
14
+ GUILD_OTLP_ENDPOINT=
15
+ GUILD_API_KEY=
16
+ GUILD_WORKSPACE_ID=
17
+ GUILD_TRACE_VIEW_URL=https://app.guild.ai/workspaces/{workspace_id}/sessions/{request_id}
18
+ GUILD_SERVICE_NAME=cad-agent-api
19
+ GUILD_EXPORT_TIMEOUT=10
20
+
21
+ # ClickHouse trace analytics (auto-exports every prompt + execution)
22
+ CLICKHOUSE_ENABLED=false
23
+ CLICKHOUSE_HOST=
24
+ CLICKHOUSE_PORT=8123
25
+ CLICKHOUSE_DATABASE=default
26
+ CLICKHOUSE_TABLE=cad_agent_traces
27
+ CLICKHOUSE_USERNAME=default
28
+ CLICKHOUSE_PASSWORD=
29
+ CLICKHOUSE_SECURE=false
30
+ CLICKHOUSE_AUTO_CREATE_TABLE=true
31
+ CLICKHOUSE_EXPORT_TIMEOUT=10
32
+
33
+ # Composio agent actions
34
+ COMPOSIO_ENABLED=false
35
+ COMPOSIO_API_KEY=
36
+ COMPOSIO_USER_ID=cad-agent-user
37
+ COMPOSIO_TOOL_SLUG=
38
+ COMPOSIO_EXPORT_TIMEOUT=15
39
+
40
+ # Pioneer inference (OpenAI-compatible API)
41
+ PIONEER_API_KEY=
42
+ PIONEER_MODEL_ID=gpt-4o
43
+ PIONEER_BASE_URL=https://api.pioneer.ai/v1
44
+
45
+ # Airbyte context layer (JSONL file and/or HTTP endpoint)
46
+ AIRBYTE_ENABLED=false
47
+ AIRBYTE_CONTEXT_DIR=./airbyte/context
48
+ AIRBYTE_CONTEXT_ENDPOINT=
49
+ AIRBYTE_API_KEY=
50
+ AIRBYTE_EXPORT_TIMEOUT=10
@@ -0,0 +1,45 @@
1
+ name: Test
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ python:
10
+ strategy:
11
+ matrix:
12
+ os: [ubuntu-latest, windows-latest, macos-latest]
13
+ python-version: ["3.11", "3.13"]
14
+ runs-on: ${{ matrix.os }}
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: ${{ matrix.python-version }}
20
+ cache: pip
21
+ - run: python -m pip install -e ".[dev]"
22
+ - run: python -m pytest
23
+
24
+ web:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: actions/setup-node@v4
29
+ with:
30
+ node-version: 22
31
+ cache: npm
32
+ cache-dependency-path: web/package-lock.json
33
+ - run: npm ci
34
+ working-directory: web
35
+ - run: npm run lint
36
+ working-directory: web
37
+ - run: npm run build
38
+ working-directory: web
39
+
40
+ docker:
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+ - name: Build Render Docker image
45
+ run: docker build -t ido-api .
@@ -0,0 +1,113 @@
1
+ name: Release desktop companion
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ package:
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ include:
17
+ - os: macos-latest
18
+ artifact: ido-macos.dmg
19
+ - os: windows-latest
20
+ artifact: ido-windows.exe
21
+ - os: ubuntu-latest
22
+ artifact: ido-linux.AppImage
23
+ runs-on: ${{ matrix.os }}
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - uses: actions/setup-node@v4
27
+ with:
28
+ node-version: 22
29
+ cache: npm
30
+ cache-dependency-path: web/package-lock.json
31
+ - uses: actions/setup-python@v5
32
+ with:
33
+ python-version: "3.13"
34
+ cache: pip
35
+ - run: npm ci && npm run build
36
+ working-directory: web
37
+ - run: python -m pip install -e ".[packaging]"
38
+ - run: pyinstaller packaging/ido.spec --clean
39
+
40
+ - name: Package macOS disk image
41
+ if: runner.os == 'macOS'
42
+ run: |
43
+ mkdir -p release
44
+ cp dist/ido release/ido
45
+ if [ -n "${{ secrets.MACOS_SIGNING_IDENTITY }}" ]; then
46
+ codesign --force --options runtime --sign "${{ secrets.MACOS_SIGNING_IDENTITY }}" release/ido
47
+ fi
48
+ hdiutil create -volname ido -srcfolder release -ov -format UDZO ido-macos.dmg
49
+
50
+ - name: Package Windows installer
51
+ if: runner.os == 'Windows'
52
+ shell: pwsh
53
+ run: |
54
+ if ("${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}" -ne "") {
55
+ $bytes = [Convert]::FromBase64String("${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}")
56
+ [IO.File]::WriteAllBytes("certificate.pfx", $bytes)
57
+ signtool sign /f certificate.pfx /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 dist/ido.exe
58
+ }
59
+ choco install innosetup --yes --no-progress
60
+ & "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" packaging\windows.iss
61
+ if ("${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}" -ne "") {
62
+ signtool sign /f certificate.pfx /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 ido-windows.exe
63
+ }
64
+
65
+ - name: Package Linux AppImage and deb
66
+ if: runner.os == 'Linux'
67
+ run: |
68
+ mkdir -p ido.AppDir/usr/bin ido.AppDir/usr/share/applications
69
+ cp dist/ido ido.AppDir/usr/bin/ido
70
+ printf '#!/bin/sh\nexec "$APPDIR/usr/bin/ido" "$@"\n' > ido.AppDir/AppRun
71
+ chmod +x ido.AppDir/AppRun ido.AppDir/usr/bin/ido
72
+ printf '[Desktop Entry]\nName=idō\nExec=ido\nType=Application\nCategories=Graphics;\n' > ido.AppDir/ido.desktop
73
+ cp ido.AppDir/ido.desktop ido.AppDir/usr/share/applications/ido.desktop
74
+ curl -fsSL -o appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
75
+ chmod +x appimagetool
76
+ ARCH=x86_64 APPIMAGE_EXTRACT_AND_RUN=1 ./appimagetool ido.AppDir ido-linux.AppImage
77
+ mkdir -p deb/DEBIAN deb/usr/bin
78
+ cp dist/ido deb/usr/bin/ido
79
+ printf 'Package: ido\nVersion: 0.1.0\nArchitecture: amd64\nMaintainer: idō\nDescription: Local Blender and OpenSCAD companion\n' > deb/DEBIAN/control
80
+ dpkg-deb --build deb ido-linux.deb
81
+
82
+ - uses: actions/upload-artifact@v4
83
+ with:
84
+ name: ${{ runner.os }}
85
+ path: |
86
+ ido-macos.dmg
87
+ ido-windows.exe
88
+ ido-linux.AppImage
89
+ ido-linux.deb
90
+ if-no-files-found: ignore
91
+
92
+ blender-addon:
93
+ runs-on: ubuntu-latest
94
+ steps:
95
+ - uses: actions/checkout@v4
96
+ - run: cd adapters/blender && zip -r ../../ido_blender.zip ido_blender
97
+ - uses: actions/upload-artifact@v4
98
+ with:
99
+ name: blender-addon
100
+ path: ido_blender.zip
101
+
102
+ release:
103
+ runs-on: ubuntu-latest
104
+ needs: [package, blender-addon]
105
+ steps:
106
+ - uses: actions/download-artifact@v4
107
+ with:
108
+ path: release
109
+ merge-multiple: true
110
+ - uses: softprops/action-gh-release@v2
111
+ with:
112
+ files: release/*
113
+ generate_release_notes: true
@@ -0,0 +1,26 @@
1
+ .env
2
+ .venv/
3
+ __pycache__/
4
+ *.py[cod]
5
+ .pytest_cache/
6
+ .coverage
7
+ htmlcov/
8
+ dist/
9
+ build/
10
+ *.egg-info/
11
+ .DS_Store
12
+ cad_agent_backend.egg-info/
13
+ blender-smoke-test.blend
14
+ *.blend1
15
+ adapters/blender/*.zip
16
+ airbyte/context/
17
+ /cad_agent.zip
18
+ /ido_blender.zip
19
+ web/node_modules/
20
+ web/dist/
21
+ *.tsbuildinfo
22
+ web/vite.config.js
23
+ web/vite.config.d.ts
24
+ *.dmg
25
+ *.AppImage
26
+ *.deb
@@ -0,0 +1,33 @@
1
+ FROM node:22-bookworm-slim AS web
2
+
3
+ WORKDIR /web
4
+ COPY web/package.json web/package-lock.json ./
5
+ RUN npm ci
6
+ COPY web/ ./
7
+ RUN npm run build
8
+
9
+ FROM python:3.11-slim
10
+
11
+ ENV PYTHONDONTWRITEBYTECODE=1 \
12
+ PYTHONUNBUFFERED=1 \
13
+ PORT=8000
14
+
15
+ WORKDIR /app
16
+
17
+ COPY pyproject.toml README.md ir_schema.json ./
18
+ COPY backend ./backend
19
+ COPY shared ./shared
20
+ COPY companion ./companion
21
+ COPY adapters ./adapters
22
+ RUN apt-get update && apt-get install -y --no-install-recommends zip && rm -rf /var/lib/apt/lists/* \
23
+ && cd adapters/blender && zip -r /app/ido_blender.zip ido_blender
24
+ COPY --from=web /web/dist ./web/dist
25
+
26
+ RUN pip install --no-cache-dir .
27
+
28
+ EXPOSE 8000
29
+
30
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
31
+ CMD python -c "import os, urllib.request; urllib.request.urlopen(f'http://127.0.0.1:{os.environ.get(\"PORT\", \"8000\")}/api/health', timeout=3)"
32
+
33
+ CMD ["sh", "-c", "uvicorn backend.main:app --host 0.0.0.0 --port ${PORT:-8000}"]
@@ -0,0 +1,183 @@
1
+ Metadata-Version: 2.4
2
+ Name: ido-agent
3
+ Version: 0.1.0
4
+ Summary: Tool-agnostic Engineering IR backend and Blender adapter
5
+ Requires-Python: >=3.11
6
+ Requires-Dist: fastapi<1,>=0.115
7
+ Requires-Dist: openai<3,>=1.75
8
+ Requires-Dist: platformdirs<5,>=4.3
9
+ Requires-Dist: pydantic<3,>=2.10
10
+ Requires-Dist: uvicorn[standard]<1,>=0.34
11
+ Provides-Extra: dev
12
+ Requires-Dist: httpx<1,>=0.28; extra == 'dev'
13
+ Requires-Dist: pytest-cov<8,>=6; extra == 'dev'
14
+ Requires-Dist: pytest<10,>=8.3; extra == 'dev'
15
+ Provides-Extra: packaging
16
+ Requires-Dist: pyinstaller<7,>=6.12; extra == 'packaging'
17
+ Provides-Extra: sponsors
18
+ Requires-Dist: composio>=0.9; extra == 'sponsors'
19
+ Description-Content-Type: text/markdown
20
+
21
+ <div align="center">
22
+
23
+ <img width="850" alt="Screenshot 2026-06-12 at 11 50 14 PM" src="https://github.com/user-attachments/assets/0343ef96-fdf0-4aa0-b138-b53c30d5cd7b" />
24
+
25
+ ### _The universal agent harness for 3D Design • Top 3 @ AWS x Anthropic Harness Engineering Hack_
26
+
27
+ <br>
28
+
29
+ <img width="650" alt="ido demo" src="https://github.com/user-attachments/assets/e8a34511-fdf2-494f-89cc-36b95c4b9948" />
30
+
31
+ </div>
32
+
33
+ </div>
34
+
35
+ ### what people are building with Ido for Blender →
36
+
37
+ <div align="center">
38
+
39
+ <img width="250" height="180" alt="Blender example 1" src="https://github.com/user-attachments/assets/5f72c99c-3a76-468f-bc2a-bb1b90be6ee4" />
40
+ <img width="250" height="180" alt="Blender example 2" src="https://github.com/user-attachments/assets/8f5882c3-5b7b-4215-8570-3f92b770a80a" />
41
+ <img width="250" height="180" alt="Blender example 3" src="https://github.com/user-attachments/assets/c66922c6-7f37-4a65-a8e5-dca2d4932d61" />
42
+
43
+ <br />
44
+
45
+ <img width="250" height="180" alt="Blender example 4" src="https://github.com/user-attachments/assets/df3ee458-9054-4fe1-8faa-800ea297b2fe" />
46
+ <img width="250" height="180" alt="Blender example 5" src="https://github.com/user-attachments/assets/eb0bbbdb-11b8-4aa0-81a2-8f7c13969def" />
47
+ <img width="250" height="180" alt="Blender example 6" src="https://github.com/user-attachments/assets/77d1dd88-31de-407f-9e5e-9ca6952ea720" />
48
+
49
+ </div>
50
+
51
+ ### what people are building with Ido for OpenSCAD →
52
+
53
+ <div align="center">
54
+
55
+ <img width="260" height="105" alt="Screenshot 1" src="https://github.com/user-attachments/assets/03db51fc-6078-4540-b222-e7c755b9f0c5" />
56
+ <img width="260" height="105" alt="Screenshot 2" src="https://github.com/user-attachments/assets/6667fa06-53ac-482e-b1b0-e139b23ec3f7" />
57
+ <img width="260" height="105" alt="Screenshot 3" src="https://github.com/user-attachments/assets/fb9c25d0-fa6d-4c33-ab96-754c01ead670" />
58
+
59
+ <br />
60
+
61
+ <img width="260" height="105" alt="Screenshot 4" src="https://github.com/user-attachments/assets/6b6cb0bc-1d8a-4242-9340-381603d0d174" />
62
+ <img width="260" height="105" alt="Screenshot 5" src="https://github.com/user-attachments/assets/86f080fa-56e8-49bf-b114-af71a10863be" />
63
+ <img width="260" height="105" alt="Screenshot 6" src="https://github.com/user-attachments/assets/f076383e-971f-449d-bb45-671ff027b03c" />
64
+
65
+ <br />
66
+
67
+ <img width="260" height="105" alt="Screenshot 7" src="https://github.com/user-attachments/assets/71364a6f-7bea-4fab-8d21-7a9b4a84ee36" />
68
+ <img width="260" height="105" alt="Screenshot 8" src="https://github.com/user-attachments/assets/1ac1c257-11b1-431c-af56-19b0d9363a85" />
69
+ <img width="260" height="105" alt="Screenshot 9" src="https://github.com/user-attachments/assets/c99bf2fb-e996-4136-ad2c-fb40a4329a1e" />
70
+
71
+ </div>
72
+
73
+ <br>
74
+
75
+ <table>
76
+ <tr>
77
+ <td width="42%" valign="middle">
78
+ <img width="666" alt="ido screenshot" src="https://github.com/user-attachments/assets/7e3ac19f-d885-442f-80b1-9f965e81903b" />
79
+ </td>
80
+ <td width="58%" valign="middle">
81
+ <h2>idō pet</h2>
82
+ <p>
83
+ the idō pet allows you to track idō's task progress while working in another tab or viewing results in your modeling software
84
+ </p>
85
+ </td>
86
+ </tr>
87
+ </table>
88
+
89
+ </br>
90
+
91
+ <details>
92
+ <summary><strong>Install</strong></summary>
93
+
94
+ Requires Python 3.11+ and your own OpenAI-compatible API key.
95
+
96
+ ```bash
97
+ pipx install ido-agent
98
+ ido
99
+ ```
100
+
101
+ On first run, idō prompts for your API key, validates it with a tiny real API
102
+ request, saves it in your user config directory, then starts the terminal CAD
103
+ agent. Future runs use the saved local key:
104
+
105
+ ```bash
106
+ ido
107
+ ```
108
+
109
+ Useful setup commands:
110
+
111
+ ```bash
112
+ ido login
113
+ ido login --provider openai --model gpt-4o-mini
114
+ ido login --provider openrouter --base-url https://openrouter.ai/api/v1 --model <model>
115
+ ido doctor --api
116
+ ido config
117
+ ido config set model <model>
118
+ ido logout
119
+ ```
120
+
121
+ Credentials are stored outside the repo with `platformdirs`, for example
122
+ `~/Library/Application Support/ido/config.json` on macOS. `ido config` only
123
+ prints a masked key.
124
+
125
+ </details>
126
+
127
+ <details>
128
+ <summary><strong>Blender setup</strong></summary>
129
+
130
+ ```bash
131
+ cd adapters/blender
132
+ zip -r ../../ido_blender.zip ido_blender
133
+ cd ../..
134
+
135
+ ido serve
136
+ ```
137
+
138
+ In Blender:
139
+
140
+ 1. Open `Edit -> Preferences -> Add-ons`
141
+ 2. Install `ido_blender.zip`
142
+ 3. Press `N` in the 3D View
143
+ 4. Open the `idō` tab
144
+ 5. Use `http://127.0.0.1:8010` as the backend
145
+
146
+ Prompt from the CLI:
147
+
148
+ ```bash
149
+ ido prompt --tool blender "make a small cabin"
150
+ ```
151
+
152
+ </details>
153
+
154
+ <details>
155
+ <summary><strong>OpenSCAD setup</strong></summary>
156
+
157
+ Install OpenSCAD and make sure `openscad` is on your `PATH`
158
+
159
+ ```bash
160
+ ido open openscad
161
+ ido prompt --tool openscad "make a bracket with two mounting holes"
162
+ ```
163
+
164
+ Outputs are written to your user data directory, for example
165
+ `~/Library/Application Support/ido/projects/default` on macOS.
166
+
167
+ </details>
168
+
169
+ <details>
170
+ <summary><strong>Command</strong></summary>
171
+
172
+ ```bash
173
+ ido # terminal OpenSCAD CAD agent
174
+ ido login # replace the saved local API key
175
+ ido logout # delete the saved local API key
176
+ ido doctor --api # real minimal API validation
177
+ ido config # show config path, provider, model, masked key
178
+ ido serve # run the API
179
+ ido status # check runtime status
180
+ ido reset # clear generated files
181
+ ```
182
+
183
+ </details>
@@ -0,0 +1,163 @@
1
+ <div align="center">
2
+
3
+ <img width="850" alt="Screenshot 2026-06-12 at 11 50 14 PM" src="https://github.com/user-attachments/assets/0343ef96-fdf0-4aa0-b138-b53c30d5cd7b" />
4
+
5
+ ### _The universal agent harness for 3D Design • Top 3 @ AWS x Anthropic Harness Engineering Hack_
6
+
7
+ <br>
8
+
9
+ <img width="650" alt="ido demo" src="https://github.com/user-attachments/assets/e8a34511-fdf2-494f-89cc-36b95c4b9948" />
10
+
11
+ </div>
12
+
13
+ </div>
14
+
15
+ ### what people are building with Ido for Blender →
16
+
17
+ <div align="center">
18
+
19
+ <img width="250" height="180" alt="Blender example 1" src="https://github.com/user-attachments/assets/5f72c99c-3a76-468f-bc2a-bb1b90be6ee4" />
20
+ <img width="250" height="180" alt="Blender example 2" src="https://github.com/user-attachments/assets/8f5882c3-5b7b-4215-8570-3f92b770a80a" />
21
+ <img width="250" height="180" alt="Blender example 3" src="https://github.com/user-attachments/assets/c66922c6-7f37-4a65-a8e5-dca2d4932d61" />
22
+
23
+ <br />
24
+
25
+ <img width="250" height="180" alt="Blender example 4" src="https://github.com/user-attachments/assets/df3ee458-9054-4fe1-8faa-800ea297b2fe" />
26
+ <img width="250" height="180" alt="Blender example 5" src="https://github.com/user-attachments/assets/eb0bbbdb-11b8-4aa0-81a2-8f7c13969def" />
27
+ <img width="250" height="180" alt="Blender example 6" src="https://github.com/user-attachments/assets/77d1dd88-31de-407f-9e5e-9ca6952ea720" />
28
+
29
+ </div>
30
+
31
+ ### what people are building with Ido for OpenSCAD →
32
+
33
+ <div align="center">
34
+
35
+ <img width="260" height="105" alt="Screenshot 1" src="https://github.com/user-attachments/assets/03db51fc-6078-4540-b222-e7c755b9f0c5" />
36
+ <img width="260" height="105" alt="Screenshot 2" src="https://github.com/user-attachments/assets/6667fa06-53ac-482e-b1b0-e139b23ec3f7" />
37
+ <img width="260" height="105" alt="Screenshot 3" src="https://github.com/user-attachments/assets/fb9c25d0-fa6d-4c33-ab96-754c01ead670" />
38
+
39
+ <br />
40
+
41
+ <img width="260" height="105" alt="Screenshot 4" src="https://github.com/user-attachments/assets/6b6cb0bc-1d8a-4242-9340-381603d0d174" />
42
+ <img width="260" height="105" alt="Screenshot 5" src="https://github.com/user-attachments/assets/86f080fa-56e8-49bf-b114-af71a10863be" />
43
+ <img width="260" height="105" alt="Screenshot 6" src="https://github.com/user-attachments/assets/f076383e-971f-449d-bb45-671ff027b03c" />
44
+
45
+ <br />
46
+
47
+ <img width="260" height="105" alt="Screenshot 7" src="https://github.com/user-attachments/assets/71364a6f-7bea-4fab-8d21-7a9b4a84ee36" />
48
+ <img width="260" height="105" alt="Screenshot 8" src="https://github.com/user-attachments/assets/1ac1c257-11b1-431c-af56-19b0d9363a85" />
49
+ <img width="260" height="105" alt="Screenshot 9" src="https://github.com/user-attachments/assets/c99bf2fb-e996-4136-ad2c-fb40a4329a1e" />
50
+
51
+ </div>
52
+
53
+ <br>
54
+
55
+ <table>
56
+ <tr>
57
+ <td width="42%" valign="middle">
58
+ <img width="666" alt="ido screenshot" src="https://github.com/user-attachments/assets/7e3ac19f-d885-442f-80b1-9f965e81903b" />
59
+ </td>
60
+ <td width="58%" valign="middle">
61
+ <h2>idō pet</h2>
62
+ <p>
63
+ the idō pet allows you to track idō's task progress while working in another tab or viewing results in your modeling software
64
+ </p>
65
+ </td>
66
+ </tr>
67
+ </table>
68
+
69
+ </br>
70
+
71
+ <details>
72
+ <summary><strong>Install</strong></summary>
73
+
74
+ Requires Python 3.11+ and your own OpenAI-compatible API key.
75
+
76
+ ```bash
77
+ pipx install ido-agent
78
+ ido
79
+ ```
80
+
81
+ On first run, idō prompts for your API key, validates it with a tiny real API
82
+ request, saves it in your user config directory, then starts the terminal CAD
83
+ agent. Future runs use the saved local key:
84
+
85
+ ```bash
86
+ ido
87
+ ```
88
+
89
+ Useful setup commands:
90
+
91
+ ```bash
92
+ ido login
93
+ ido login --provider openai --model gpt-4o-mini
94
+ ido login --provider openrouter --base-url https://openrouter.ai/api/v1 --model <model>
95
+ ido doctor --api
96
+ ido config
97
+ ido config set model <model>
98
+ ido logout
99
+ ```
100
+
101
+ Credentials are stored outside the repo with `platformdirs`, for example
102
+ `~/Library/Application Support/ido/config.json` on macOS. `ido config` only
103
+ prints a masked key.
104
+
105
+ </details>
106
+
107
+ <details>
108
+ <summary><strong>Blender setup</strong></summary>
109
+
110
+ ```bash
111
+ cd adapters/blender
112
+ zip -r ../../ido_blender.zip ido_blender
113
+ cd ../..
114
+
115
+ ido serve
116
+ ```
117
+
118
+ In Blender:
119
+
120
+ 1. Open `Edit -> Preferences -> Add-ons`
121
+ 2. Install `ido_blender.zip`
122
+ 3. Press `N` in the 3D View
123
+ 4. Open the `idō` tab
124
+ 5. Use `http://127.0.0.1:8010` as the backend
125
+
126
+ Prompt from the CLI:
127
+
128
+ ```bash
129
+ ido prompt --tool blender "make a small cabin"
130
+ ```
131
+
132
+ </details>
133
+
134
+ <details>
135
+ <summary><strong>OpenSCAD setup</strong></summary>
136
+
137
+ Install OpenSCAD and make sure `openscad` is on your `PATH`
138
+
139
+ ```bash
140
+ ido open openscad
141
+ ido prompt --tool openscad "make a bracket with two mounting holes"
142
+ ```
143
+
144
+ Outputs are written to your user data directory, for example
145
+ `~/Library/Application Support/ido/projects/default` on macOS.
146
+
147
+ </details>
148
+
149
+ <details>
150
+ <summary><strong>Command</strong></summary>
151
+
152
+ ```bash
153
+ ido # terminal OpenSCAD CAD agent
154
+ ido login # replace the saved local API key
155
+ ido logout # delete the saved local API key
156
+ ido doctor --api # real minimal API validation
157
+ ido config # show config path, provider, model, masked key
158
+ ido serve # run the API
159
+ ido status # check runtime status
160
+ ido reset # clear generated files
161
+ ```
162
+
163
+ </details>
@@ -0,0 +1 @@
1
+ """Desktop CAD tool adapters."""
@@ -0,0 +1 @@
1
+ """Blender adapter package."""
@@ -0,0 +1,20 @@
1
+ bl_info = {
2
+ "name": "ido-blender",
3
+ "author": "ido",
4
+ "version": (0, 3, 0),
5
+ "blender": (4, 5, 0),
6
+ "location": "3D View > Sidebar > ido",
7
+ "description": "Generate and edit 3D scenes from natural language",
8
+ "category": "3D View",
9
+ }
10
+
11
+ def register() -> None:
12
+ from .ui import register_ui
13
+
14
+ register_ui()
15
+
16
+
17
+ def unregister() -> None:
18
+ from .ui import unregister_ui
19
+
20
+ unregister_ui()