OpenVoiceOS/Neon Skills Configuration Tool
Project description
OVOS Skill Config Tool
A modern web interface for configuring OpenVoiceOS and Neon AI skills, built with React and FastAPI.
Features
- Clean, intuitive UI for managing voice assistant skills
- Support for skill-specific configuration settings
- Dark mode support
- Skill grouping and organization
- Basic Authentication for security
Screenshots
Technology Stack
- Frontend: React with Vite
- Backend: FastAPI
- Styling: Modern Tailwind CSS with dark mode support
- Security: Basic Authentication
Installation & Usage
You can run the OVOS Skill Config Tool either directly via Pip or using the official Docker container.
Method 1: Pip Install (Local/Virtual Env)
Installation
Ensure you have Python 3.9+ and Pip installed. It's recommended to use a virtual environment.
# Create and activate a virtual environment (optional but recommended)
python -m venv .venv
source .venv/bin/activate # On Windows use `.venv\Scripts\activate`
# Install the tool
pip install ovos-skill-config-tool
Running
Once installed, run the tool from your terminal (ensure your virtual environment is active if you used one):
ovos-skill-config-tool
The application will be available at http://0.0.0.0:8000 by default.
Authentication (Pip Install)
By default, the application uses Basic Authentication with the credentials:
- Username:
ovos - Password:
ovos
You can override these by setting environment variables before running the application:
OVOS_CONFIG_USERNAME: Sets the username.OVOS_CONFIG_PASSWORD: Sets the password.
Example:
export OVOS_CONFIG_USERNAME=myuser
export OVOS_CONFIG_PASSWORD=mypassword
ovos-skill-config-tool
All API endpoints under /api/v1/ require Basic Authentication.
Customization (Pip Install)
When installed via Pip, the application serves static files (like index.html, CSS, JavaScript, and config.json) directly from its installation directory within your Python environment's site-packages.
-
Find the Installation Directory: You can find the location using pip:
pip show ovos-skill-config-tool # Look for the "Location:" line, e.g., /path/to/.venv/lib/python3.11/site-packages
The static files will be inside
ovos_skill_config/staticwithin that location (e.g.,/path/to/.venv/lib/python3.11/site-packages/ovos_skill_config/static). -
Modify
config.json: Edit theconfig.jsonfile found in the static directory. See the configuration options below. -
Add Custom Logo: Place your custom logo file (e.g.,
my-logo.png) in the same static directory alongsideconfig.json. Update thesrcpath inconfig.jsonaccordingly (e.g.,"/my-logo.png").
Note: Modifications made directly within the site-packages directory may be overwritten when you update the ovos-skill-config-tool package using pip.
(Advanced): You can alternatively override the static file directory entirely by setting the OVOS_CONFIG_STATIC_DIR environment variable to point to a local directory containing your customized frontend build assets (including index.html, JS/CSS, config.json, and your logo).
Method 2: Docker
Using Docker provides a convenient and isolated way to run the application.
Pulling the Image
Pull the latest official image from the GitHub Container Registry:
docker pull ghcr.io/oscillatelabsllc/ovos-skill-config-tool:latest
# Or replace :latest with a specific version tag
Running the Container
Run the container, mapping the port and optionally setting authentication credentials:
docker run --rm --name ovos-config -p 8000:8000 \
-e OVOS_CONFIG_USERNAME=myuser \
-e OVOS_CONFIG_PASSWORD=mypass \
-v $HOME/.config:/home/appuser/.config \
ghcr.io/oscillatelabsllc/ovos-skill-config-tool:latest
--rm: Removes the container when it stops.--name ovos-config: Assigns a name to the container.-p 8000:8000: Maps port 8000 on your host to port 8000 in the container.-e OVOS_CONFIG_USERNAME=...: Sets the authentication username. Defaults toovos.-e OVOS_CONFIG_PASSWORD=...: Sets the authentication password. Defaults toovos.-v $HOME/.config:/home/appuser/.config: (Recommended) Mounts a local directory to persist skill configuration data saved via the UI. Adjust the host path ($HOME/.config) as needed. The container path should remain/home/appuser/.config.
The application will be available at http://localhost:8000.
Customization (Docker)
When running the Docker image, you can customize the appearance and logo by mounting specific files into the container's static assets directory (/app/static).
Configuration File (config.json)
The UI behavior and logo configuration are controlled by a config.json file located within the container at /app/static/config.json. Create your own config.json file locally with the following structure:
{
"logo": {
"type": "image", // "image" or "text"
"src": "/my-logo.png", // Path to the logo file *relative to /app/static* inside the container
"alt": "My Custom Logo", // Alt text for accessibility
"width": 32, // Optional, defaults to 32
"height": 32, // Optional, defaults to 32
"text": "OVOS" // Text to display if type is "text"
}
// Add other future configuration options here
}
Important: The src path for the logo should be relative to the static root (/app/static) within the container.
Running with Customizations
To use your custom files, add Docker's volume mount (-v) flags when running the container. Mount your local files to their corresponding paths inside /app/static.
Example:
Assuming you have my-config.json and my-logo.png in your current directory:
docker run --rm --name ovos-config -p 8000:8000 \
-v $(pwd)/my-config.json:/app/static/config.json \
-v $(pwd)/my-logo.png:/app/static/my-logo.png \
-v $HOME/.config:/home/appuser/.config \
-e OVOS_CONFIG_USERNAME=myuser \
-e OVOS_CONFIG_PASSWORD=mypass \
ghcr.io/oscillatelabsllc/ovos-skill-config-tool:latest
Explanation:
-v $(pwd)/my-config.json:/app/static/config.json: Mounts your localmy-config.jsonover the default one in the container.-v $(pwd)/my-logo.png:/app/static/my-logo.png: Mounts your localmy-logo.pnginto the container at the path specified in yourmy-config.json.- Remaining flags are as described in the basic run command.
If no custom config.json is mounted, the application will use the default configuration built into the image.
Troubleshooting
If you encounter issues reading from skill config files, ensure that the files are readable by the application. You can check this by running:
docker exec -it ovos-config ls -l /home/appuser/.config/ovos/skills # replace with the path to the skill config files
If the files are not readable, you can change the user and group that the container runs as to match your user and group. We do not recommend running the container as root or changing the permissions of the files!
If using Docker directly:
docker run --rm --name ovos-config -p 8000:8000 \
-v $HOME/.config:/home/appuser/.config \
-u $(id -u):$(id -g) \
ghcr.io/oscillatelabsllc/ovos-skill-config-tool:latest
If using Docker Compose:
services:
ovos-config:
image: ghcr.io/oscillatelabsllc/ovos-skill-config-tool:latest
ports:
- "8000:8000"
volumes:
- $HOME/.config:/home/appuser/.config
user: $(id -u):$(id -g)
Using the Settings Editor
Once the OVOS Skill Config Tool is running and you've logged in, you'll see a list of installed skills whose configuration can be managed.
- Skill Sections: Each skill with manageable settings appears in its own collapsible section (accordion). Click the skill name to expand or collapse its settings.
- Viewing Settings:
- Simple settings (strings, numbers, booleans) are displayed directly below their name.
- Complex settings (objects and arrays) are displayed hierarchically. Object fields show their key (bold) and value (muted color). Array items show their index in blue brackets (e.g.,
[0],[1]) followed by their value. You can visually trace the structure through the indentation and connecting lines.
- Editing Values:
- To edit a simple setting (string, number, boolean), click the pencil icon () next to it. An appropriate input field will appear.
- Make your changes and click the checkmark icon () to save, or the X icon () to cancel.
- You can edit primitive values even if they are nested inside objects or arrays.
- Adding Fields/Items to Objects/Arrays:
- To add a new entry to an existing object or array, click the green plus icon () next to the object's key or array's index.
- An inline form will appear below the existing entries.
- If adding to an object, enter the New field name.
- Select the Type of the new value (String, Number, Boolean, Object, Array).
- Enter the Value (unless you chose Object or Array, which start empty).
- Click the small checkmark icon () within the form to save the new entry, or the X icon () to cancel.
- Deleting Fields/Items:
- To delete any setting (top-level or nested), click the red trash icon () next to it. You will be asked for confirmation.
- Adding New Top-Level Settings:
- At the bottom of each skill's section, there is an "Add Setting" button (). Click this to reveal a form similar to the inline add form.
- Enter the Setting name, select the Type, enter the Value, and click the checkmark icon () to add the new setting to the skill.
- Undo:
- If you make a change (save or delete) to a skill's settings, an "Undo Change" button () will appear at the top right of that skill's section.
- Clicking this button will revert the settings for that specific skill to the state before the last change was made. It only undoes the single most recent change for that skill.
Developer Installation
- Clone the repository:
git clone https://github.com/OscillateLabsLLC/ovos-skill-config-tool.git
cd ovos-skill-config-tool
- Install dependencies:
# Backend
pip install .
# Frontend
cd frontend/ovos-settings-ui
npm install
Development
This project uses just as a command runner. Common commands:
# Build frontend
just build-fe
# Run the application
just run
# Run tests
just test
# Format code
just fmt
# Lint code
just lint
Testing
We use pytest with coverage reporting:
# Run all tests
uv run pytest
# Run with coverage report
uv run pytest --cov=ovos_skill_config --cov-report=term-missing
# Run specific test
uv run pytest tests/test_main.py::TestAPI::test_list_skills_empty_dir
See CONTRIBUTING.md for more details on development and testing guidelines.
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
Acknowledgments
- OpenVoiceOS community
- Neon AI community
- All contributors who have helped shape this tool
- Mycroft for the original open source voice assistant
Support
For support, please:
- Open an issue in the GitHub repository
- Join the OpenVoiceOS community chat in Matrix
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ovos_skill_config_tool-0.8.1.tar.gz.
File metadata
- Download URL: ovos_skill_config_tool-0.8.1.tar.gz
- Upload date:
- Size: 145.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7532b9527930b399fbdefc9fe8ddbc8db29e96b9aeff943904e93f3ca4b52c09
|
|
| MD5 |
99eeb9b5b8856c25c9cc1b3445050b64
|
|
| BLAKE2b-256 |
7bb6bdd750cc7a451f686375d2de679ca789a3ebe718eeb2579a8b95e09718e5
|
File details
Details for the file ovos_skill_config_tool-0.8.1-py3-none-any.whl.
File metadata
- Download URL: ovos_skill_config_tool-0.8.1-py3-none-any.whl
- Upload date:
- Size: 137.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15a88da07d16dc1e91cd1d267cb76b3a9efe8ec89ce4eea7989b303685a458a5
|
|
| MD5 |
354d09a7fdf2de94004cfd9c56ce79c5
|
|
| BLAKE2b-256 |
c757fcb411b198dff5c8f0834ae6491aa6c8113223972a90115bdf077b32c612
|