* chore: update AlphaHuman version to 0.49.3 and configure updater plugin in tauri.conf.json - Bumped the AlphaHuman package version in Cargo.lock to 0.49.3. - Added updater configuration in tauri.conf.json to enable automatic updates with specified endpoints. * refactor: rename AlphaHuman to OpenHuman across the codebase - Updated all instances of "AlphaHuman" to "OpenHuman" in comments, tooltips, and constants to reflect the new branding. - Adjusted relevant documentation and prompts to ensure consistency with the new name. * refactor: update documentation and configurations to reflect OpenHuman branding - Replaced all instances of "AlphaHuman" with "OpenHuman" in documentation, comments, and configuration files to ensure consistency with the new branding. - Updated deep link URLs and related authentication flows to use the new "openhuman://" scheme. - Adjusted paths and references in the skills system and other related files to align with the new project name.te * refactor: standardize OpenHuman references and update configurations - Replaced all instances of "AlphaHuman" with "OpenHuman" across documentation, comments, and configuration files to maintain branding consistency. - Updated URLs and paths to reflect the new "openhuman://" scheme. - Adjusted environment variable names and related settings to align with the new project identity. - Enhanced documentation for clarity and accuracy regarding the OpenHuman framework.r * chore: update subproject commit reference in skills directory * refactor: update backend URL to reflect new service domain - Changed default backend URL from "https://api.openhuman.xyz" to "https://api.tinyhumans.ai" in both JavaScript and Rust configuration files. - Ensured consistency across the codebase regarding the new backend service endpoint. * feat: introduce identity and migration modules for OpenHuman - Added a new identity module to support AIEOS v1.1 JSON format, including structures for identity, psychology, linguistics, motivations, capabilities, physicality, history, and interests. - Implemented a migration module to facilitate data migration from OpenClaw memory, including SQLite and Markdown sources, with detailed reporting on migration statistics and warnings. - Established utility functions for handling multimodal content and image processing within the OpenHuman framework. - Enhanced the agent system with new dispatcher and classifier functionalities to improve tool management and message classification. * chore: remove Android project files and configurations - Deleted various Android project files including .editorconfig, .gitignore, build.gradle.kts, gradle.properties, and others to clean up the project structure. - Removed all related resources, layouts, and source files from the Android app directory to streamline the codebase. - This cleanup is part of a larger effort to refactor and simplify the project structure. * refactor: update login flow and remove Telegram integration - Removed the TelegramLoginButton component and its references from the OAuthLoginSection, streamlining the login options. - Updated the AppRoutes to remove the login route, reflecting changes in the authentication flow. - Enhanced the RotatingTetrahedronCanvas component with improved geometry and lighting effects for better visual presentation. - Adjusted the TypewriterGreeting component's styling for consistency. - Cleaned up the Welcome page to integrate the OAuthLoginSection directly, improving user experience. * chore: update subproject commit reference in skills directory * chore: update test configurations and improve test assertions - Modified test scripts in package.json to use a specific Vitest configuration file for consistency. - Updated assertions in loader tests to ensure loading durations are non-negative. - Enhanced tool loading tests to clarify expected behavior regarding localStorage and cache management. - Adjusted agent tool registry tests to improve error handling and ensure accurate statistics. - Refined device detection tests to reflect updated fallback URLs. * fix: enhance parameter formatting and remove unused components - Updated the `formatParameters` function to handle cases where schema properties are empty, returning a more informative response. - Deleted the `DownloadScreen` component and associated device detection utilities to streamline the codebase and remove unused functionality. - Adjusted tests to reflect changes in the tool loading and agent tool registry, ensuring accuracy in assertions. * chore: simplify Vitest configuration by removing unused include patterns - Updated the Vitest configuration to remove unnecessary test file patterns, streamlining the test setup for better clarity and maintainability. * refactor: update paths and comments for AI configuration and file watching - Modified Vite configuration to ignore only the `src-tauri` directory. - Updated logging messages to reflect the correct path for writing AI configuration files. - Adjusted fetch calls in the file watcher to use the new path for `TOOLS.md`. - Revised comments and logic in Rust code to clarify the handling of AI configuration file paths, including legacy fallback options. * chore: remove unused updater secrets from GitHub Actions workflow - Deleted UPDATER_GIST_URL and UPDATER_GIST_ID environment variables from the package-and-publish workflow, streamlining the configuration. * chore: comment out Vitest thresholds for clarity - Commented out the thresholds section in the Vitest configuration to improve clarity and maintainability, as it is currently not in use. * ran formatter * chore: update updater public key in tauri configuration - Replaced the existing public key in the updater plugin configuration with a new value to ensure proper functionality and security. * chore: update ESLint configuration and refactor components - Added `localStorage` and `sessionStorage` as readonly globals in ESLint configuration for better linting support. - Removed unused imports from `SkillsPanel.tsx` to clean up the code. - Changed the type of `watcherInterval` in `file-watcher.ts` for improved type safety. - Refactored toast management logic in `Intelligence.tsx` to enhance clarity and maintainability. - Simplified import statements in `IntelligenceProvider.tsx` for consistency. - Streamlined object property shorthand in `agentToolRegistry.ts` for cleaner code. * refactor: improve error handling and type safety in Intelligence component - Enhanced toast notification logic to defer state updates, preventing potential issues with setState in effects. - Updated the source filter dispatch to use a more specific type for improved type safety. * refactor: enhance type safety across various components and services - Updated type definitions from `any` to `unknown` in multiple files to improve type safety and prevent potential runtime errors. - Refactored state management in `TauriCommandsPanel` to use more specific types. - Adjusted context and parameters in several interfaces to ensure consistent typing. - Added ESLint directive to `polyfills.ts` for intentional global assignments. - Streamlined type handling in utility functions and API responses for better clarity and maintainability. * refactor: streamline import statements and improve code clarity - Consolidated import statements in `agentToolRegistry.ts` and `intelligenceSlice.ts` for better readability. - Simplified the `createTestStore` function in `test-utils.tsx` to enhance code conciseness. - Cleaned up the `isExecutionStepProgressEvent` function in `intelligence-chat-api.ts` for improved clarity and maintainability.
4.9 KiB
Skills System Troubleshooting Guide
Overview
The Skills System is a Python-based plugin architecture that allows AI agents to have domain-specific knowledge, tools, and automated behaviors. Skills run as isolated Python subprocesses and communicate with the main Tauri application via JSON-RPC.
Common Issue: "Setup Failed" with Exit Code 1
Symptoms
- Skills modal shows "Setup Failed" with "Skill process exited with code: 1"
- Console shows
ModuleNotFoundError: No module named 'pydantic' - Error paths like
/Users/cyrus/openhuman/skills/skills/telegram/ - Python import failures and subprocess stderr messages
Root Cause Analysis
Primary Issue: Missing Skills Git Submodule
The main cause is that the skills Git submodule is not initialized. The system expects skills to be available in the skills/skills/ directory structure but finds an empty directory.
Secondary Issues:
- Missing Python Virtual Environment: No
.venvdirectory in the skills folder - Missing Python Dependencies: Core packages like
pydantic,telethon,mcpnot installed - Incorrect Python Paths: PYTHONPATH configuration issues
Skills System Architecture
skills/ # Git submodule root
├── .venv/ # Python virtual environment
├── requirements.txt # Shared dependencies
├── skills/ # Individual skill packages
│ ├── telegram/ # Telegram skill
│ │ ├── skill.py # Main skill logic
│ │ ├── manifest.json # Skill metadata
│ │ ├── requirements.txt # Skill-specific dependencies
│ │ └── ...
│ ├── browser/ # Browser automation skill
│ ├── calendar/ # Calendar integration skill
│ └── ... # Other skills
└── ...
Solution Steps
1. Initialize Git Submodule
git submodule init
git submodule update
This downloads the skills repository from https://github.com/openhumanxyz/skills.
2. Create Python Virtual Environment
cd skills
python3 -m venv .venv
.venv/bin/pip install --upgrade pip
3. Install Dependencies
.venv/bin/pip install -r requirements.txt
This installs:
- Core Dependencies:
mcp>=1.0.0,pydantic>=2.0,aiosqlite>=0.20.0 - Skill-Specific Dependencies: Each skill's requirements.txt (telegram, browser, etc.)
4. Verify Installation
# Test core imports
.venv/bin/python -c "import pydantic, mcp; print('✅ Core dependencies OK')"
# Test skill import
.venv/bin/python -c "import skills.telegram; print('✅ Telegram skill OK')"
How Skills System Works
Development vs Production Paths
- Development: Skills in git submodule at
./skills/skills/ - Production: Skills in
~/.openhuman/skills/ - Configuration:
src/lib/skills/paths.tshandles path resolution
Skill Execution Process
- Discovery:
SkillProviderscans for skill manifests - Registration: Skills registered in Redux store
- Startup: Python subprocess spawned with proper environment
- Communication: JSON-RPC transport over stdin/stdout
- Setup: Interactive setup flow if required
Environment Variables
The system automatically configures:
- PYTHONPATH: Includes skills directory and virtual environment
- Telegram API:
TELEGRAM_API_ID,TELEGRAM_API_HASH - Working Directory: Skills submodule root
Verification Commands
# Check submodule status
git submodule status
# Verify skills directory structure
ls -la skills/skills/telegram/
# Check virtual environment
ls -la skills/.venv/
# Test Python environment
cd skills && .venv/bin/python -c "import sys; print('\\n'.join(sys.path))"
Prevention
To prevent this issue in fresh checkouts:
-
Always initialize submodules:
git clone --recurse-submodules <repo-url> # or after clone: git submodule update --init --recursive -
Setup script: Consider adding to
package.json:{ "scripts": { "setup": "git submodule update --init && cd skills && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt" } }
Related Files
- Frontend:
src/lib/skills/- Skills management system - Backend:
src-tauri/src/commands/skills.rs- Rust skill commands - Configuration:
src/utils/config.ts- Environment variables - Providers:
src/providers/SkillProvider.tsx- Skills lifecycle
Expected Behavior After Fix
- Skills modal should show "Connect Telegram" instead of error
- No more Python import errors in console
- Skill setup process should work correctly
- Background GitHub sync should function properly
This fix resolves the fundamental infrastructure issue preventing skills from loading and running properly.