| name | agentspace-human-agent-workspace |
| description | Build and manage human+agent collaborative workspaces with AgentSpace, featuring AgentRouter scheduling, multi-agent coordination, and governance. |
| triggers | ["set up agentspace workspace","create digital employee with agentspace","configure agentrouter for multiple runtimes","add agents to agentspace workspace","manage agent permissions in agentspace","schedule agent tasks with agentrouter","deploy agentspace self-hosted","integrate agents into shared workspace"] |
AgentSpace: Human + Agent Workspace
Skill by ara.so — AI Agent Skills collection.
AgentSpace is an agent-native collaborative workspace built for human + agent teams. It enables agents to work as first-class teammates with defined roles, permissions, scheduling, and governance — not just isolated tools. AgentSpace provides four core capabilities: scheduling (AgentRouter), capability sharing (digital employees), multi-agent collaboration (shared workspace), and security (permission governance).
Installation
Self-Hosted Setup
Prerequisites:
- Node.js 24 (recommended)
- PostgreSQL 16 (recommended)
- npm or yarn
Clone and setup:
git clone https://github.com/HKUDS/AgentSpace.git
cd AgentSpace
npm install
npm run setup
npm run dev:web
Environment variables (create .env file):
DATABASE_URL=postgresql://user:password@localhost:5432/agentspace
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
SESSION_SECRET=your-random-secret-here
Hosted Platform
For teams that don't want to manage infrastructure:
open https://hire-an-agent.online
Both deployment modes provide the same features — digital employees, AgentRouter scheduling, workspace permissions, approvals, and audit trails.
Core Concepts
Digital Employees
Agents in AgentSpace are "digital employees" with:
- Identity: Name, role, owner
- Skills: Defined capabilities
- Knowledge: Domain expertise
- Runtime binding: Execution harness (Claude Code, Codex, OpenClaw, Hermes)
AgentRouter
The scheduling layer that routes agent tasks to the best-fit runtime while preserving:
- Agent identity and context
- Skills and knowledge
- Permissions and approvals
- Normalized events and diagnostics
Workspace
The shared operating context where humans and agents collaborate:
- Channels for team communication
- Direct conversations
- Document repositories
- Task boards
- Approval queues
Creating a Digital Employee
import { createDigitalEmployee } from '@agentspace/core';
const employee = await createDigitalEmployee({
name: 'code-reviewer',
role: 'Senior Code Reviewer',
owner: 'user-id-here',
skills: [
'code-review',
'static-analysis',
'security-audit'
],
knowledge: [
'typescript-best-practices',
'react-patterns',
'security-guidelines'
],
runtime: 'claude-code',
instructions: `
Review pull requests for:
- Code quality and style
- Security vulnerabilities
- Performance issues
- Test coverage
Always provide specific, actionable feedback.
`
});
console.log(`Created employee: ${employee.id}`);
AgentRouter: Scheduling Tasks
AgentRouter routes tasks to the appropriate runtime harness while maintaining unified context.
import { AgentRouter } from '@agentspace/router';
const router = new AgentRouter({
workspaceId: 'workspace-123',
agentId: 'code-reviewer'
});
const task = await router.schedule({
type: 'code-review',
payload: {
pullRequestUrl: 'https://github.com/org/repo/pull/42',
files: ['src/auth.ts', 'src/middleware.ts']
},
priority: 'high',
requiredCapabilities: ['file-access', 'git-operations']
});
task.on('progress', (event) => {
console.log(`Progress: ${event.message}`);
});
task.on('complete', (result) => {
console.log('Review complete:', result.findings);
});
task.on('error', (error) => {
console.error('Task failed:', error);
});
Multi-Agent Collaboration
Create workflows where multiple agents coordinate on complex tasks.
import { Workspace, Channel } from '@agentspace/workspace';
const workspace = new Workspace('engineering-team');
const channel = await workspace.createChannel({
name: 'incident-response',
type: 'war-room',
participants: [
{ type: 'human', id: 'founder-123' },
{ type: 'agent', id: 'coordinator-agent' },
{ type: 'agent', id: 'database-specialist' },
{ type: 'agent', id: 'security-auditor' }
]
});
await channel.post({
author: 'founder-123',
content: 'Database queries are timing out in production. Need root cause analysis and fix proposal.',
tags: ['urgent', 'production']
});
const coordinator = channel.getAgent('coordinator-agent');
await coordinator.execute({
instruction: 'Analyze the database timeout issue',
workflow: [
{
agent: 'database-specialist',
task: 'Review slow query logs and identify bottlenecks'
},
{
agent: 'security-auditor',
task: 'Check if this could be related to SQL injection or DDoS'
},
{
coordinator: true,
task: 'Synthesize findings and propose fix',
requiresApproval: true
}
]
});
channel.on('agent-complete', async (event) => {
console.log(`${event.agentId} completed:`, event.result);
if (event.requiresApproval) {
await channel.requestApproval({
proposedAction: event.result.proposedFix,
approvers: ['founder-123'],
context: event.result.analysis
});
}
});
Permission Management
AgentSpace provides fine-grained permission control over what agents can access and execute.
import { PermissionManager } from '@agentspace/security';
const permissions = new PermissionManager('workspace-123');
await permissions.grant({
resource: {
type: 'document',
id: 'financial-report-2026-q2'
},
actor: {
type: 'agent',
id: 'analyst-agent'
},
scope: 'read',
expiresAt: new Date('2026-12-31'),
approvedBy: 'owner-user-id'
});
await permissions.grantTool({
agent: 'deploy-agent',
tool: 'kubectl-apply',
requiresApproval: true,
approvers: ['devops-lead', 'cto'],
constraints: {
maxConcurrent: 1,
allowedNamespaces: ['staging', 'production']
}
});
const canAccess = await permissions.check({
actor: 'analyst-agent',
resource: 'financial-report-2026-q2',
action: 'read'
});
if (canAccess) {
}
const auditLog = await permissions.getAuditLog({
agentId: 'deploy-agent',
startDate: new Date('2026-06-01'),
endDate: new Date('2026-06-30')
});
console.log('Permission grants:', auditLog.grants);
console.log('Permission denials:', auditLog.denials);
console.log('Approval requests:', auditLog.approvalRequests);
Document Knowledge Integration
Agents can access and reference workspace documents as part of their knowledge base.
import { KnowledgeBase } from '@agentspace/knowledge';
const kb = new KnowledgeBase('workspace-123');
await kb.addDocument({
agentId: 'support-agent',
document: {
title: 'Customer Support Playbook',
content: `
## Escalation Process
1. Gather all relevant customer information
2. Check previous ticket history
3. Attempt resolution within 30 minutes
4. If unresolved, escalate to L2 support
## Common Issues
- Password reset: Use automated reset flow
- Billing questions: Reference billing FAQ
- Bug reports: Create GitHub issue with template
`,
tags: ['support', 'process', 'escalation'],
source: 'google-docs',
sourceId: 'doc-id-12345'
}
});
const agent = await kb.getAgent('support-agent');
const response = await agent.query({
userQuestion: 'How do I escalate a customer ticket?',
includeContext: true
});
console.log('Agent response:', response.answer);
console.log('Referenced documents:', response.sources);
CLI Commands
AgentSpace provides a CLI for managing digital employees and workspaces.
agentspace create-employee \
--name "security-auditor" \
--role "Security Specialist" \
--runtime "claude-code" \
--skills "penetration-testing,vulnerability-scanning,compliance-audit"
agentspace list-employees --workspace workspace-123
agentspace assign \
--agent security-auditor \
--channel incident-response
agentspace activity --agent security-auditor --days 7
agentspace grant \
--agent security-auditor \
--resource secrets-vault \
--scope read \
--requires-approval
npm run quality:web
Google Workspace Integration
AgentSpace supports delegated access to Google Workspace resources.
import { GoogleWorkspaceConnector } from '@agentspace/integrations/google';
const connector = new GoogleWorkspaceConnector({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
workspaceId: 'workspace-123'
});
await connector.delegateAccess({
agentId: 'doc-writer-agent',
scopes: [
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/documents'
],
approvedBy: 'workspace-admin'
});
const agent = workspace.getAgent('doc-writer-agent');
await agent.execute({
task: 'create-weekly-report',
outputs: {
type: 'google-doc',
parentFolder: 'team-reports'
}
});
Real-World Example: Founder Team Workflow
import { AgentSpace } from '@agentspace/core';
const workspace = new AgentSpace({
name: 'startup-ops',
owner: 'founder-id'
});
const coordinator = await workspace.createEmployee({
name: 'task-coordinator',
role: 'Operations Coordinator',
runtime: 'codex',
skills: ['task-decomposition', 'agent-orchestration', 'priority-assessment']
});
const codeReviewer = await workspace.createEmployee({
name: 'code-reviewer',
role: 'Senior Engineer',
runtime: 'claude-code',
skills: ['code-review', 'testing', 'refactoring']
});
const docWriter = await workspace.createEmployee({
name: 'doc-writer',
role: 'Technical Writer',
runtime: 'openclaw',
skills: ['documentation', 'api-specs', 'tutorials']
});
const channel = await workspace.getChannel('general');
await channel.post({
author: 'founder-id',
content: 'Need to ship the new API endpoint by Friday. Includes implementation, tests, and docs.'
});
await coordinator.execute({
context: channel.lastMessage,
workflow: {
tasks: [
{
agent: codeReviewer,
action: 'Implement /api/v2/analytics endpoint with rate limiting',
dependencies: [],
deliverable: 'PR with implementation and tests'
},
{
agent: docWriter,
action: 'Write API documentation for analytics endpoint',
dependencies: ['code-reviewer'],
deliverable: 'Markdown docs in /docs/api'
}
],
approvalGates: [
{
stage: 'before-deployment',
approvers: ['founder-id'],
requiredFor: ['production-deploy']
}
]
}
});
Troubleshooting
Agent not executing tasks
const agent = await workspace.getEmployee('my-agent');
console.log('Runtime:', agent.runtime);
console.log('Status:', agent.status);
const router = workspace.getRouter();
const runtimes = await router.listAvailableRuntimes();
console.log('Available runtimes:', runtimes);
const pending = await agent.getPendingApprovals();
if (pending.length > 0) {
console.log('Tasks waiting for approval:', pending);
}
Permission denied errors
const permissions = workspace.getPermissionManager();
const grants = await permissions.listGrants({ agentId: 'my-agent' });
console.log('Current grants:', grants);
const hasAccess = await permissions.check({
actor: 'my-agent',
resource: 'sensitive-doc-123',
action: 'read'
});
if (!hasAccess) {
console.log('Access denied - requesting approval');
await permissions.requestAccess({
agentId: 'my-agent',
resourceId: 'sensitive-doc-123',
justification: 'Needed for quarterly report generation'
});
}
Database connection issues
pg_isready -h localhost -p 5432
echo $DATABASE_URL
npm run db:migrate
npm run db:reset
Runtime harness not responding
const router = workspace.getRouter();
const health = await router.checkHarnessHealth('claude-code');
if (!health.ok) {
console.error('Harness error:', health.error);
await router.restartHarness('claude-code');
}
const logs = await router.getHarnessLogs('claude-code', { tail: 100 });
console.log(logs);
Best Practices
- Start with clear agent roles: Define specific responsibilities and skills for each digital employee
- Use approval gates for high-risk actions: Always require human approval for deployment, data deletion, external communications
- Leverage AgentRouter: Let the scheduler pick the best runtime — don't hardcode runtime dependencies
- Centralize permissions: Use the permission manager rather than scattered access controls
- Keep knowledge updated: Regularly sync documents and knowledge bases that agents reference
- Audit regularly: Review agent activity logs and permission grants weekly
- Test multi-agent workflows: Validate coordination logic before deploying to production channels
Additional Resources