The Problem
AI agents quickly accumulate reusable “skills” (functions, prompts, pipelines). Teams then struggle to locate the right skill, assess its reliability, share it across projects, and keep it up‑to‑date without rebuilding everything from scratch.
What This Does
OpenSpace provides a skill‑management layer that stores skill definitions, execution traces, and quality metrics. The core Python package lives under openspace/ (≈ 440 Python files) and implements the data model, grounding, and runtime support. Two front‑ends consume this layer:
- Dashboard UI – a React/Vite app in
apps/dashboard/(entryapps/dashboard/src/main.tsx) that visualises skill lineage, quality summaries, and workflow evolution. - Terminal UI (TUI) – a TypeScript‑based console client in
apps/tui/(entryapps/tui/src/bridge/index.ts) for quick skill queries and REPL interaction.
Example files:
openspace/utils/logging.py– central logger used by 150 modules.openspace/grounding/core/types.py– defines the canonical skill‑type schema.apps/dashboard/src/components/skill-detail/SkillEvolutionGraph.tsx– renders the evolution chart.
How It Is Wired
Execution starts in the UI entry point:
- Dashboard –
apps/dashboard/src/main.tsxmounts<App/>. The first API call goes throughapps/dashboard/src/api/index.ts, which uses the generated client inapps/dashboard/src/api/client.tsto hit the Python backend (the repo does not include a server starter script; the backend is expected to be launched separately, e.g., via a Django/Flask run command). - The backend imports
openspace/runtime/app.py(the runtime entry point). This module pulls configuration fromopenspace/services/runtime_support/settings.pyand registers the skill store. - Requests for skill data travel through
openspace/services/tooling/context.py→openspace/grounding/core/tool/base.py. The latter is a hub module (40 inbound, 8 outbound imports) and participates in a circular import withopenspace/services/tooling/context.py, inflating its instability (0.17) and making changes risky. - All logging funnels through
openspace/utils/logging.py, the most‑connected module (150 inbound imports, zero outbound). Its breadth means any modification propagates widely. - The TUI follows a similar path:
apps/tui/src/bridge/index.tscreates a bridge object that importsapps/tui/src/state/AppStateStore.ts. This state store importsopenspace/grounding/core/tool/base.py(causing a second import cycle) and heavily usesapps/tui/src/screens/REPL.tsx(high instability 0.96).
The import graph contains 111 circular dependencies; the most unstable modules (apps/tui/src/screens/REPL, openspace/runtime/app) have > 0.9 instability, indicating they are likely to break when upstream code changes.
How To Use It
# Clone the repo
git clone https://github.com/moses-y/OpenSpace
cd OpenSpace
# Install Python dependencies (no lockfile, install from source)
pip install -r requirements.txt # <-- missing; you must create it from imports or use a virtual env
# Install Dashboard UI
cd apps/dashboard
npm ci # uses package-lock.json
npm run dev # starts Vite dev server (http://localhost:5173)
# Install TUI
cd ../tui
npm ci
npm run dev # starts TUI (node script)
Configuration – the dashboard expects an .env file matching the example apps/dashboard/.env.example. The Python backend reads settings from openspace/services/runtime_support/settings.py; you must supply any required environment variables (e.g., database URL) before launching the server (e.g., uvicorn openspace.runtime.app:app).
Running the backend – not bundled in the repo; typical entry is python -m openspace.runtime.app after installing the package.
Real‑World Use
A company deploying multiple LLM‑based agents can run a private OpenSpace instance. Each agent, after completing a task, posts its execution trace to the backend (/api/trace). The dashboard then shows a lineage graph (SkillEvolutionGraph.tsx) where analysts can see which skill versions succeeded, retire low‑quality ones, and push updated skill packages to the shared library for all agents to import.
Code Health & Issues
- HIGH – Missing lockfile for
openspace/communication/bridges/whatsapp/package.json. - HIGH – No CI pipeline; repository lacks any
.github/workflows/*. - HIGH – Committed SQLite dump
benchmarks/gdpval/.openspace/openspace.dbleaks data. - MEDIUM – No Dependabot/Renovate configuration for 7 manifests.
- MEDIUM – No pre‑commit secret‑scan hook.
- MEDIUM – Large binary assets (
frontend_3.gif, etc.) stored directly in Git. - LOW – Missing repository convention files (
.editorconfig, formatter config).
Additional observations from static analysis:
- 12 places use broad
except:clauses (e.g.,openspace/utils/logging.py). - 11 modules have nesting depth ≥ 6, reducing readability.
- 13 files exceed 1 000 lines, increasing cognitive load.
- 14 import‑cycle members increase change risk.
The Bottom Line
OpenSpace offers a functional skill‑catalogue and UI for AI agents, with a clear separation between core Python services and modern React/TS front‑ends. However, the codebase suffers from tight coupling (hub modules, import cycles), missing production safeguards (CI, lockfiles, secret scans), and some hygiene gaps (large binaries, data leaks). It is suitable for teams comfortable handling Python backend setup manually and willing to invest in refactoring the most volatile modules before using it in production.