Imported from jontsai/openclaw-command-center (
AGENTS.md). Install upstream withnpx skills add jontsai/openclaw-command-center. Copyright stays with the author.
AGENTS.md โ AI Workspace Guide
"The Overmind speaks through many voices, but with one purpose."
Welcome, AI agent. This document defines how you should interact with this codebase.
โ ๏ธ CRITICAL: Pull Request Workflow
All changes to this repository MUST go through pull requests.
This is a public open source project. Even maintainers (including AI agents working on behalf of maintainers) must:
- Create a feature branch (
git checkout -b type/description) - Make changes and commit
- Push branch and open a PR
- Get approval before merging
Never push directly to main. This applies to everyone, including the repo owner.
๐ฏ Mission
OpenClaw Command Center is the central dashboard for AI assistant management. Your mission is to help build, maintain, and improve this system while maintaining the Starcraft/Zerg thematic elements that make it unique.
๐๏ธ Architecture
Read First: docs/architecture/OVERVIEW.md
Key architectural principles:
- DRY โ Don't Repeat Yourself. Extract shared code to partials/modules.
- Zero Build Step โ Plain HTML/CSS/JS, no compilation needed.
- Real-Time First โ SSE for live updates, polling as fallback.
- Progressive Enhancement โ Works without JS, enhanced with JS.
๐ Workspace Structure
openclaw-command-center/
โโโ lib/ # Core server logic
โ โโโ server.js # Main HTTP server and API routes
โ โโโ config.js # Configuration loader with auto-detection
โ โโโ jobs.js # Jobs/scheduler API integration
โ โโโ linear-sync.js # Linear issue tracker integration
โ โโโ topic-classifier.js # NLP-based topic classification
โโโ public/ # Frontend assets
โ โโโ index.html # Main dashboard UI
โ โโโ jobs.html # AI Jobs management UI
โ โโโ partials/ # โญ Shared HTML partials (DRY!)
โ โ โโโ sidebar.html # Navigation sidebar component
โ โโโ css/
โ โ โโโ dashboard.css # Shared styles
โ โโโ js/
โ โโโ sidebar.js # Sidebar loader + SSE badges
โ โโโ app.js # Main dashboard logic
โ โโโ lib/ # Third-party libraries
โโโ scripts/ # Operational scripts
โโโ config/ # Configuration (be careful!)
โโโ docs/ # Documentation
โ โโโ architecture/ # Architecture Decision Records
โโโ tests/ # Test files
โโโ SKILL.md # ClawHub skill metadata
โโโ package.json # Version and dependencies
โ Safe Operations
Do freely:
- Read any file to understand the codebase
- Create/modify files in
lib/,public/,docs/,tests/ - Add tests
- Update documentation
- Create feature branches
โ ๏ธ Ask First
Check with a human before:
- Modifying
config/files - Changing CI/CD workflows
- Adding new dependencies to
package.json - Making breaking API changes
- Anything touching authentication/secrets
๐ซ Never
- Push directly to
mainbranch โ ALL changes require PRs - Commit secrets, API keys, or credentials
- Commit user-specific data files (see
public/data/AGENTS.md) - Delete files without confirmation
- Expose internal endpoints publicly
๐ ๏ธ Development Workflow
0. First-Time Setup
# Install pre-commit hooks (required for all contributors)
make install-hooks
# Or manually:
cp scripts/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
The pre-commit hook enforces rules from this file automatically.
1. Feature Development
# Create feature branch
git checkout -b feat/your-feature-name
# Make changes, then test locally
npm test
npm run lint
make check # Run pre-commit checks manually
# Commit with descriptive message
git commit -m "feat: add overlord status indicator"
# Push and create PR
git push -u origin feat/your-feature-name
2. Commit Message Convention
Follow Conventional Commits:
feat:โ New featurefix:โ Bug fixdocs:โ Documentation onlystyle:โ Formatting, no code changerefactor:โ Code restructuringtest:โ Adding testschore:โ Maintenance tasks
3. Code Style
- Use ESLint configuration provided
- Prettier for formatting
- JSDoc comments for public functions
- Meaningful variable names (thematic names encouraged!)
๐ฆ ClawHub Skill Workflow
This project is distributed as a ClawHub skill. After changes are merged to main, they need to be published to the registry so users can install/update via clawhub install command-center.
Understanding Skill Metadata
Two files control the skill identity:
SKILL.mdโ Frontmatter (name,version,description) used by ClawHub for discovery and searchpackage.jsonโversionfield for npm compatibility
โ ๏ธ CRITICAL: Version Sync Required
Both package.json and SKILL.md MUST have the same version number. This is enforced by pre-commit hooks.
# If you change version in one file, change it in both:
# package.json: "version": "1.0.4"
# SKILL.md: version: 1.0.4
The pre-commit hook will block commits if versions are out of sync.
Publishing Updates
# 1. Authenticate (one-time)
clawhub login
clawhub whoami
# 2. Bump version in package.json (follow semver)
# patch: bug fixes (0.1.0 โ 0.1.1)
# minor: new features (0.1.0 โ 0.2.0)
# major: breaking changes (0.1.0 โ 1.0.0)
# 3. Tag the release
git tag -a v<new-version> -m "v<new-version> โ short description"
git push origin --tags
# 4. Publish
clawhub publish . --slug command-center --version <new-version> \
--changelog "Description of what changed"
# Or use the release script (handles tagging + publishing):
./scripts/release.sh <new-version>
Verifying a Publish
# Check published metadata
clawhub inspect command-center
# Test install into a workspace
clawhub install command-center --workdir /path/to/workspace
Updating an Installed Skill
Users update with:
clawhub update command-center
The installed version is tracked in .clawhub/origin.json within the skill directory.
Who Can Publish?
Only maintainers with ClawHub credentials for jontsai/command-center can publish. Currently:
- @jontsai (owner)
Contributors: Submit PRs. After merge, a maintainer will handle the ClawHub publish.
Release Checklist
Before publishing a new version:
- All PRs for the release are merged to
main - Version bumped in both
package.jsonandSKILL.mdfrontmatter - CHANGELOG updated (if maintained)
- Tests pass:
npm test - Lint passes:
npm run lint - Git tag created:
git tag -a v<version> -m "v<version>" - Tag pushed:
git push origin --tags - Published to ClawHub with changelog
๐จ Thematic Guidelines
This project has a Starcraft/Zerg theme. When naming things:
| Concept | Thematic Name |
|---|---|
| Main controller | Overmind |
| Worker processes | Drones |
| Monitoring service | Overlord |
| Cache layer | Creep |
| Message queue | Spawning Pool |
| Health check | Essence scan |
| Error state | Corrupted |
Example:
// Instead of: const cacheService = new Cache();
const creepLayer = new CreepCache();
// Instead of: function checkHealth()
function scanEssence()
๐ Documentation Standards
When you add features, document them:
- Code comments โ JSDoc for functions
- README updates โ If user-facing
- API docs โ In
docs/api/for endpoints - Architecture Decision Records โ In
docs/architecture/for major changes
๐งช Testing
# Run all tests
npm test
# Coverage report
npm run test:coverage
Aim for meaningful test coverage. Test the logic, not the framework.
๐ Debugging
# Enable all command-center debug output
DEBUG=openclaw:* npm run dev
# Specific namespaces
DEBUG=openclaw:api npm run dev
DEBUG=openclaw:overlord npm run dev
๐ Handoff Protocol
When handing off to another AI or ending a session:
- Commit all work in progress
- Document current state in a comment or commit message
- List any unfinished tasks
- Note any decisions that need human input
๐ Lessons Learned
DRY is Non-Negotiable
Problem: Sidebar was duplicated across index.html and jobs.html, causing inconsistencies.
Solution: Extract to /partials/sidebar.html + /js/sidebar.js for loading.
Lesson: When you see similar code in multiple places, stop and extract it. The cost of extraction is always lower than maintaining duplicates.
Naming Consistency Matters
Problem: "Scheduled Jobs" vs "Cron Jobs" vs "Jobs" caused confusion. Solution: Established naming convention: "Cron Jobs" for OpenClaw scheduled tasks, "AI Jobs" for advanced agent jobs. Lesson: Agree on terminology early. Document it. Enforce it.
Zero-Build Architecture Has Trade-offs
Context: No build step keeps things simple but limits some patterns.
Solution: Use fetch() to load partials dynamically, <script> for shared JS.
Lesson: This works well for dashboards. Evaluate trade-offs for your use case.
SSE Connection Per Component = Wasteful
Problem: Multiple components each opening SSE connections.
Solution: Single SSE connection in sidebar.js, shared state management.
Lesson: Centralize real-time connections. Components subscribe to state, not sources.
Test After Every Significant Change
Problem: Easy to break things when refactoring HTML structure.
Solution: make restart + browser check after each change.
Lesson: Keep feedback loops tight. Visual changes need visual verification.
Document Architectural Decisions
Problem: Future agents (or humans) don't know why things are the way they are.
Solution: Create docs/architecture/OVERVIEW.md and ADRs.
Lesson: Write down the "why", not just the "what".
๐ Key Resources
- SKILL.md โ ClawHub skill metadata
- CONTRIBUTING.md โ Contribution guidelines
- docs/ โ Detailed documentation
"Awaken, my child, and embrace the glory that is your birthright."