Install
openclaw skills install ogp-projectTool-agnostic project collaboration for AI assistants. Users keep their own tools (Linear, Jira, Obsidian, GitHub, iCloud, local files — anything). This skill makes agents aware of what each collaborator's agent knows and where it lives, so agents can query each other proactively rather than making the human relay information. Supports project creation with context interviews, freeform activity logging, proactive pre-task peer checks, and cross-peer summarization.
openclaw skills install ogp-projectThe OGP daemon must be installed and configured. If you see errors like 'ogp: command not found', install it first:
npm install -g @dp-pcs/ogp
ogp-install-skills
ogp setup
ogp config show
ogp start
Note on Peer IDs (OGP 0.2.24+): Peers are identified by the first 16 characters of their Ed25519 public key (e.g., 302a300506032b65). This is stable even when their gateway URL changes. You can also reference peers by their alias (the friendly name you assigned during federation).
Note on Multi-Agent Routing (OGP 0.2.28+): When notifyTargets is configured in ~/.ogp/config.json, project-related federation messages can be routed to specific agents. Each agent can have its own project context and policies.
Note on Multi-Framework Mode: Projects are framework-local. Use ogp --for openclaw ... or ogp --for hermes ... consistently so you query and log to the intended state directory.
Full documentation: https://github.com/dp-pcs/ogp
People work differently. One person tracks tasks in Linear, keeps notes in GitHub, stores files locally. Another uses a different issue tracker, writes in Obsidian, stores files in iCloud. In the past, collaboration meant forcing everyone onto the same tools.
This skill changes that. Each user keeps their own tools and workflow. Their agent knows what they're working on and where everything lives. When two people collaborate on a project, their agents communicate directly — surfacing conflicts, sharing context, and answering each other's questions — without the human having to relay anything.
The human-as-messenger problem:
Coworker wants to know something → asks you → you ask your agent → agent finds answer → you tell coworker
What this skill enables:
Coworker's agent asks your agent → answer flows back → coworker just knows
context.* contributions — this is how peer agents know what to ask you aboutThis is the most important behavior in this skill.
Whenever the user expresses intent to start work on something project-related, run this flow BEFORE starting:
# Quick scan of recent activity
ogp --for openclaw project query <project-id> --limit 20
# Check for anything on this specific topic
ogp --for openclaw project query <project-id> --search "<keywords from user's intent>"
# For each approved peer in the project, ask if they know anything relevant
ogp --for openclaw federation agent <peer-id> <project-id> "My user is about to start working on <what they said>. Anything I should know before we begin?"
User: "Let's start working on the companion app"
Agent (internally):
1. ogp --for openclaw project query my-project --search "companion app"
→ Found: "User B flagged companion app as out of scope in v1" (decision, 3 days ago)
Agent (to user): "Before you dive in — there's a note in the project from 3 days ago:
User B's agent logged a decision that companion app is out of scope for v1.
Want to check with them first, or are you overriding that?"
User: "Let's start working on the companion app"
Agent (internally):
1. ogp --for openclaw project query my-project --search "companion app" → nothing found
2. ogp --for openclaw federation agent peer-b my-project "My user is about to start on the companion app. Anything I should know?"
→ Peer agent responds: "No conflicts. Bob hasn't touched that area."
Agent: [starts working — no announcement needed]
When your agent queries a peer agent, the peer agent responds according to its owner's configured policy. Your agent should interpret and respect these responses:
| Peer Response | Meaning | Your Agent's Behavior |
|---|---|---|
| Direct answer | Peer auto-answered | Use the information, proceed |
| "I've asked [name] and will follow up" | Peer is escalating to human | Wait for follow-up, or proceed with caveat |
| "I don't have permission to share that" | Topic is restricted | Respect it, don't re-ask |
| No response / timeout | Peer offline or unavailable | Proceed, note that peer was unavailable |
Configuring your own response policy (how YOUR agent handles incoming queries):
# See current policies
ogp --for openclaw agent-comms policies
# Auto-answer project queries (full detail)
ogp --for openclaw agent-comms add-topic <peer-id> <project-id> --level full
# Escalate to human before answering
ogp --for openclaw agent-comms add-topic <peer-id> <project-id> --level escalate
# Summary only
ogp --for openclaw agent-comms add-topic <peer-id> <project-id> --level summary
Response levels:
full — agent answers directly with full contextsummary — agent answers with high-level overview onlyescalate — agent asks the human before responding ("Stan's agent wants to know about X — should I answer?")off — agent declines to respond on this topicWhen a project is created, run this conversational interview. It is optional but valuable — the more context captured here, the more useful the agent becomes for both the user and their collaborators.
Two things happen with every answer:
context.* contribution (so peer agents can query it)If the user skips questions, that's fine — the agent operates in generalized mode and logs/queries from projects.json only.
ogp --for openclaw project create <project-id> <name> --description "<description>"
Ask these questions conversationally — not as a form. Let the user's answers lead naturally. Skip any they don't want to answer.
Q1: How do you track tasks for this project? (e.g. Linear, Jira, GitHub Issues, Trello, a text file, nothing formal)
ogp --for openclaw project contribute <id> context.tools "Tasks tracked in: <answer>"Q2: Where do you keep notes or docs for this project? (e.g. Obsidian vault at ~/notes/project-x, Notion, GitHub wiki, Apple Notes, Google Docs, a local folder)
ogp --for openclaw project contribute <id> context.notes "<location>"Q3: Is there a code repository? (e.g. GitHub URL, GitLab, local git repo path)
ogp --for openclaw project contribute <id> context.repository "<url or path>"git log, search files, check open PRs.Q4: Where do you store files for this project? (e.g. ~/Documents/project-x, iCloud Drive, Google Drive, Dropbox, S3 bucket)
ogp --for openclaw project contribute <id> context.workspace "<path or location>"Q5: Is anyone else working on this with you? (peer IDs, names, or email addresses of collaborators)
ogp --for openclaw project contribute <id> context.collaborators "<names/peer-ids>"ogp --for openclaw project request-join <peer-id> <project-id> <name>Q6: Anything else I should know about this project? (free text — constraints, deadlines, important context, tools not covered above)
ogp --for openclaw project contribute <id> context "<free text>"After the interview, summarize what you now know:
✅ Project "<name>" is set up. Here's what I know:
📋 Tasks: <answer or "not specified — log manually">
📝 Notes: <answer or "not specified">
💻 Repo: <answer or "not specified">
📁 Files: <answer or "not specified">
👥 Collaborators: <answer or "none yet">
For anything I don't know yet, you can tell me later and I'll update the project context.
I'll check this context before starting any work on this project.
Why this matters: The
context.*entries do two jobs. They tell peer agents where your stuff lives (so they know what to ask you about). And they tell YOUR agent where to actually look when answering questions — not just what's been logged toprojects.json.
Detect logging intent from ANY natural phrasing — not just exact keywords.
| User Input | Action |
|---|---|
| "add/log/save/put/track this to [project]" | ogp --for openclaw project contribute <id> context "<summary>" |
| "remember for [project] that..." | ogp --for openclaw project contribute <id> context "<summary>" |
| Decision made during conversation | ogp --for openclaw project contribute <id> decision "<summary>" |
| Blocker encountered | ogp --for openclaw project contribute <id> blocker "<summary>" |
| Work completed | ogp --for openclaw project contribute <id> progress "<summary>" |
If logging intent is clear but no project named:
📝 I can log this for you. Which project?
Active: [list from `ogp --for openclaw project list`]
Or name a new one to create it.
progress — work completed, milestones reacheddecision — architectural choices, technology selections, product decisionsblocker — things preventing progress, unresolved dependenciescontext — general notes, meeting takeaways, requirements changessummary — periodic digests, sprint reviewsWhen a peer agent sends a query to your project topic, your agent should:
full or summary: Search local project state and context, formulate a response, reply via agent-commsescalate: Ask the user: "Stan's agent is asking about [topic] for project [X]. Here's their question: [question]. Should I answer, and what should I say?"off: Decline politelySearching your context to answer:
# Search project contributions
ogp --for openclaw project query <project-id> --search "<keywords>"
# Check specific context entries
ogp --for openclaw project query <project-id> --type context.notes
ogp --for openclaw project query <project-id> --type context.repository
ogp --for openclaw project query <project-id> --type decision
# Recent activity
ogp --for openclaw project query <project-id> --limit 20
Replying to a peer query:
ogp --for openclaw federation agent <peer-id> <project-id> "<your answer>"
# Create project
ogp --for openclaw project create <id> <name> [--description "..."]
# Join existing project
ogp --for openclaw project join <id> [name] [--create] [--description "..."]
# List all projects
ogp --for openclaw project list
# Get project status
ogp --for openclaw project status <id>
# Add contribution
ogp --for openclaw project contribute <id> <type> <summary> [--metadata '{"key":"value"}']
# Query contributions
ogp --for openclaw project query <id> [--type <type>] [--search <text>] [--limit <n>]
# Prefer --type. --topic remains a compatibility alias.
# Request to join peer's project
ogp --for openclaw project request-join <peer-id> <project-id> <name>
# Send contribution to peer project
ogp --for openclaw project send-contribution <peer-id> <project-id> <type> <summary>
# Query peer project contributions
ogp --for openclaw project query-peer <peer-id> <project-id> [--type <type>] [--limit <n>]
# Get peer project status
ogp --for openclaw project status-peer <peer-id> <project-id>
# Send agent-to-agent message on project topic
ogp --for openclaw federation agent <peer-id> <project-id> "<message>"
Before you start — I found something in the project:
[Entry type] from [date]: [summary]
Want to proceed anyway, or check with [peer name] first?
Heads up — [peer alias]'s agent says: "[their response]"
[Proceed / ask user how to handle based on content]
✅ Logged to [project-name] · [type]
[Summary]
📊 [Project Name]
🎯 [description]
👥 [member count] members · last active [date]
Recent:
[contributions list]
Peer activity:
[peer summary]
# Check peer is online
ogp --for openclaw federation ping <peer-alias>
# Check agent-comms policies
ogp --for openclaw agent-comms policies <peer-id>
# Check activity log
ogp --for openclaw agent-comms activity <peer-id>
ogp --for openclaw project list
ogp --for openclaw project status-peer <peer-id> <project-id>
ogp --for openclaw project status <project-id>
ogp --for openclaw status
ogp --for openclaw federation list --status approved
ogp --for openclaw federation scopes <peer-id>
ogp --for openclaw federation send <peer-id> message '{"text":"ping"}'
Data Flow:
User says something project-related
→ Agent checks local project state (ogp --for <framework> project query)
→ Agent pings peer agents (ogp --for <framework> federation agent)
→ Surfaces conflicts/info before starting
→ Logs outcomes (ogp --for <framework> project contribute)
→ Federation syncs to peers
The tool-agnostic principle:
The project doesn't care what tools you use. context.notes, context.repository, context.tools are just text. If you keep notes in Obsidian, that's in context.notes. If your peer uses GitHub wikis, that's in their context.notes. Peer agents read each other's context entries and know where to look — or know what to ask.
Storage:
~/.ogp/projects.json / ~/.ogp-hermes/projects.json — project data and contributions per framework~/.ogp/peers.json / ~/.ogp-hermes/peers.json — peer identities and federation state per framework~/.ogp-meta/config.json — enabled frameworks and default selection