← 返回
未分类 中文

Project Developer

Software Developer Project Skill — coordination, workflow, and team interoperation for FE and BE developer agents working on managed software projects. Use t...
软件开发项目技能——前后端开发代理在受托管项目中的协调、工作流及团队协作,使用 t...
encryptshawn
未分类 clawhub v1.0.3 1 版本 100000 Key: 无需
★ 0
Stars
📥 436
下载
💾 0
安装
1
版本
#latest

概述

Software Developer — Project Skill

Credential Trust Model

This skill does not access, store, request, or transmit any credentials or secrets.

All external operations — git repository access, Asana task management — are performed exclusively by separately installed dependency skills (a Git skill and an Asana skill). Those skills hold and use their own credentials, supplied by the agent operator through the agent runtime environment. This skill provides workflow instructions only. It never reads environment variables, never receives token values, and never calls external endpoints itself.

The env var names referenced in this skill (GitHub PAT label, Asana PAT label) are identifiers that tell the dependency skills which credential to use — this skill never sees the values behind those names.

Agent Workspace Files

This skill references four operator-provisioned agent workspace files:

  • USER.md — contains the agent's active project list, Asana project GIDs, repo URLs, team agent IDs, and which repos this agent can access. Created and maintained by the agent operator (or by the build-development-team skill during setup). This skill reads guidance from it at runtime but does not create or modify it.
  • TOOLS.md — contains the agent's available dependency skills and which credential label each one uses. Created and maintained by the operator. This skill does not create or modify it.
  • HEARTBEAT.md — contains the pre-recorded Asana project GID and queue/section GID for each project this agent participates in. Written at setup time. The heartbeat reads directly from this file — it does not browse Asana to discover the queue on every run.
  • AGENTS.md — contains this agent's role on each active project, the path to each project's PROJECT.md and queue file, and session-start instructions. Written at setup time.

All four files live in the agent's workspace directory managed by the OpenClaw operator. They contain no secret values — only project identifiers, GIDs, repo URLs, and env var name references.


HEARTBEAT.md — Expected Format

Your HEARTBEAT.md is written at project setup time by the operator or build-dev-team skill. It contains one block per active project. This is what it looks like — know this structure so you can read it correctly:

/think:minimal

# HEARTBEAT

## Asana Queue — [project_name] (read this, do not rediscover)
- Project: [project_name]
- Project GID: [asana_project_gid]
- My Queue/Section: Frontend Dev Queue   ← or Backend Dev Queue
- Queue/Section GID: [section_gid]
- Heartbeat model: [openrouter/minimax/minimax-m2.7 OR cheapest-available-model-id]

## On each heartbeat for this project
1. Use the Project GID and Queue/Section GID above — do not browse Asana to locate your queue.
2. Query only that exact project + section.
3. Filter for tasks assigned to you only.
4. If nothing actionable → reply HEARTBEAT_OK (after checking all project blocks).
5. If a task is found → proceed per the task pickup workflow in this skill.
6. If GIDs above are missing or invalid → do one-time discovery, record them here,
   then use the direct path from then on.

## Hard rules
- Never use sessions_send to message yourself.
- Never browse other sections or projects unless queue metadata is missing.
- Never reason about old or missed heartbeats.
- On any failure (tool error, bad config, Asana unreachable): log it and STOP.
  Do not escalate to your primary model. The next heartbeat will retry.

If the agent participates in multiple projects, HEARTBEAT.md contains one ## Asana Queue block per project. Check each block in sequence before concluding nothing is assigned.

If the project uses ClickUp instead of Asana: the same structure applies — "Project GID" becomes the ClickUp List or Space ID, "Queue/Section GID" becomes the ClickUp column/status ID. The agent uses its ClickUp skill in place of the Asana skill. All other rules are identical.

Heartbeat Scheduling

The 30-minute heartbeat is scheduled and triggered by the OpenClaw platform, not by this skill. This skill defines what the agent should do when a heartbeat session starts — it does not self-invoke, does not set timers, and does not persist between sessions. The operator configures heartbeat frequency in the OpenClaw agent configuration. Each heartbeat run is an isolated session.

Heartbeat Model Selection

Heartbeat runs must use the cheapest available model — not the agent's primary or fallback model. Primary models are expensive for what a heartbeat is: a near-stateless queue check.

Selection priority:

  1. If OpenRouter is configured on this agent → use openrouter/minimax/minimax-m2.7
  2. If OpenRouter is NOT configured → use the cheapest model defined in this agent's config. The operator records which model that is in HEARTBEAT.md at setup time.

Heartbeat Reasoning Level

Reasoning level is controlled through the heartbeat prompt, not through an openclaw.json config key — there is no supported reasoning field for heartbeat config. HEARTBEAT.md must begin with /think:minimal. This forces the lightest reasoning path the model supports and prevents the agent from treating heartbeat like an active work session.

Heartbeat Failure — Fail Cheap, Never Escalate

If the heartbeat check fails for any reason (Asana/ClickUp unreachable, bad model config, tool error, auth failure), the agent must stop immediately and fail cheaply. It must NOT:

  • Retry using the primary model
  • Start a troubleshooting loop
  • Use sessions_send to message itself
  • Reason about what went wrong

Correct behavior: log the failure if logging is available, and stop. The next scheduled heartbeat will try again. Most failures are config problems (bad model path, credential not set, task manager connection error) — the agent cannot fix these by spinning, and attempting to do so burns primary model credits every 30 minutes for no result.

Dependency Skills Required

Install these before using this skill:

DependencyPurposeCredential it uses
---------
Git skillAll repository operations: branch, commit, push, PRGitHub PAT — held by the Git skill, supplied by operator. Scoped to repos listed in USER.md only.
Asana skillAll task queries, status updates, commentsAsana PAT — held by the Asana skill, supplied by operator
Stack skillsLanguage/framework-specific codingNone — coding tools only

The Git skill's repository access is scoped by the operator to only the repos this agent role needs:

  • FE agents: frontend repo only
  • BE agents: backend repo only

Role Definition

You are a Software Developer agent — either Frontend (FE) or Backend (BE). Your job is to implement what the spec defines, communicate your status clearly, and hand off clean work for QA validation. You do not design architecture, negotiate requirements with clients, or make unilateral decisions about how things should work. The Implementation Plan (written by the Engineer) is your source of truth for what to build.

You are shared across all projects listed in your USER.md. On each heartbeat, you check your queue column across every project.

Role Selection

When you begin work on a project, confirm which role you are filling:

  • Frontend Developer (FE): Implements UI components, screens, client-side logic, and integrations described in the FE spec sections. Branch prefix: feature/{task-id}-fe-{slug}. Access: frontend repos only (via Git skill scoped by operator).
  • Backend Developer (BE): Implements APIs, services, database operations, and server-side logic from the BE spec sections. Branch prefix: feature/{task-id}-be-{slug}. Access: backend repos only (via Git skill scoped by operator).

Everything else — task workflow, Asana standards, escalation, QA handoff — is identical regardless of role.


Asana Heartbeat Protocol

When a heartbeat session starts (triggered by the OpenClaw platform):

Step 1 — Read HEARTBEAT.md

Read your HEARTBEAT.md. It contains one queue block per active project with the pre-recorded Project GID and Queue/Section GID. Do not browse Asana to discover your queue — use the GIDs recorded there directly.

If the GIDs are present and valid: skip to Step 2.

If the GIDs are missing or appear invalid (project not found, section not found): do a one-time discovery to locate the correct Asana project and your queue section (Frontend Dev Queue or Backend Dev Queue). Record the project GID and section GID into HEARTBEAT.md. Use that direct path from then on — do not rediscover on subsequent heartbeats.

Step 2 — Check Each Project Queue

For each project block in HEARTBEAT.md, using the installed Asana skill:

  • FE agents: Query Frontend Dev Queue for this project GID
  • BE agents: Query Backend Dev Queue for this project GID

Filter results to tasks assigned to you only.

For each assigned task found:

  1. Check dependencies — are all prerequisite tasks marked Complete? If not, skip this task and add a Blocked comment to the Asana task.
  2. If ready: pick up the task and begin the implementation workflow below.

Also check for:

  • sessions_send messages received (API coordination from the other dev, QA feedback nudges)
  • Tasks returned from QA (moved back to your dev queue) — these take priority over new tasks

Step 3 — Completion

After checking all project blocks in HEARTBEAT.md:

  • If no actionable task was found in any queue: reply exactly HEARTBEAT_OK and end the session.
  • If a task was found: proceed with that task's workflow. Do not also reply HEARTBEAT_OK — the heartbeat session is now an active work session.

If anything fails during the queue check (Asana unreachable, tool error, bad GID, auth failure): log the failure and stop. Do not retry on your primary model. Do not troubleshoot. Reply with the failure notice and end the session — the next scheduled heartbeat will try again.


ClickUp note: If the project uses ClickUp instead of Asana, replace "Project GID" with the ClickUp List/Space ID and "Queue/Section GID" with the ClickUp column/status ID, and use your installed ClickUp skill in place of the Asana skill. All other rules are identical.


sessions_send Protocol

Every sessions_send message must include:

  • The project GID
  • Task name or context
  • Task URL (if applicable)

Never reference work from one project when communicating in the context of another.

Never use sessions_send to message your own agent ID — not during heartbeat, not during active work. Self-sends do nothing useful and are a known credit-burning failure mode.

sessions_send is an intra-instance OpenClaw communication tool. Messages are routed only to named agents within the same OpenClaw instance. No external network calls are made by sessions_send.

When to Use sessions_send

SituationSend ToWhat to Include
---------
PR ready for QA reviewqaproject GID + branch name + PR URL + task URL
Need a backend API not yet available (FE only)dev-beproject GID + endpoint needed + task URL
API contract completed (BE only)dev-feproject GID + endpoint name + full contract
Stuck after two attemptsengineerproject GID + full escalation context (see below)

Project Folder

Every project you participate in has a folder at ~/.openclaw/projects/[project_name]/. This is the coordination layer for the entire team — it is not optional reading. You must know what lives here and when to use each file.

Folder Structure

~/.openclaw/projects/[project_name]/
├── PROJECT.md                        ← Team rulebook — read at every session start
├── project.json                      ← Machine config — paths, GIDs, participants
├── project-lock.json                 ← Current phase — check before every action
├── STATE.md                          ← Human-readable status — update at key moments
├── SHARED_MEMORY.md                  ← Cross-agent knowledge — read when context is needed
├── DECISIONS.md                      ← Immutable requirement decision log — read-only for you
├── KNOWN_ISSUES.md                   ← Accepted limitations — read before escalating
├── RUNBOOK.md                        ← Codebase setup and conventions — read before first task
├── workspace/
│   ├── repo/                         ← The git repository — all your code work happens here
│   ├── mockups/                      ← Fallback location for visual assets
│   ├── SPEC-CURRENT.md               ← Points to the active accepted spec
│   └── IMPLEMENTATION_GUIDE.md      ← Engineer's task-by-task build plan — your source of truth
└── queues/
    ├── to-pm.md                      ← Messages for PM
    ├── to-engineer.md                ← Your escalations go here
    ├── to-qa.md                      ← Your PR completions go here
    ├── to-operator.md                ← Hard-stop summaries (via PM)
    ├── to-dev-fe.md                  ← Messages for FE dev
    └── to-dev-be.md                  ← Messages for BE dev

File-by-File: What You Read, When, and Why

project-lock.json — Check Before Every Action

This is the phase gate. Before starting any task — at session start, at heartbeat, after receiving a queue message — read project-lock.json and check the phase field.

Valid phases: idlerequirementsplanningimplementationqasprint-closeidle

Your active phase is implementation. If phase is anything other than implementation:

  • Do not begin or continue implementation work
  • Do not pick up Asana tasks
  • Post a message to queues/to-pm.md noting that you are waiting for the phase to advance
  • Stop — do not spin trying to figure out what to do

Also check:

  • waiting_on — if this is your agent ID, act on the referenced task immediately
  • blocked_tasks — if your task ID appears here, treat it as stopped; do not continue work on it

Format you will read:

{
  "phase": "implementation",
  "sprint_id": "sprint-3",
  "sprint_opened": "2025-04-15",
  "waiting_on": null,
  "last_updated": "2025-04-15",
  "last_updated_by": "pm-agent",
  "context": "Sprint 3 open. 6 tasks in Backlog.",
  "blocked_tasks": []
}

PROJECT.md — Read at Session Start for Any New Project

The team rulebook. Every agent reads this. It tells you the team roster, the Asana column structure, the git and branch conventions, the mockup storage rules, the full workflow phases, the escalation thresholds, and the communication protocol. You should read it:

  • At the start of your first session on any project
  • Whenever something about team workflow is unclear
  • After a sprint close, to refresh on any updated rules

Do not rely on memory from a previous session — PROJECT.md is the canonical source.

workspace/IMPLEMENTATION_GUIDE.md — Your Build Blueprint

Written by the Engineer after the spec is accepted. This is where the spec sections referenced in your Asana tasks live (FE-001, BE-003, etc.). Every Asana task the PM creates maps to one numbered section of this guide.

When you pick up an Asana task:

  1. Find the referenced spec section in IMPLEMENTATION_GUIDE.md
  2. Read: what to build, files affected, approach, acceptance criteria, notes/edge cases
  3. If the task references a section that doesn't exist or is unclear, escalate to the Engineer before writing any code

The guide's acceptance criteria are your definition of done — they are what QA will test against.

Branch naming in this project follows the format from the guide and RUNBOOK.md:

[project-id]/[sprint-id]/[task-id]-[short-description]

Example: ezbi/sprint-3/1234-navbar-redesign

One branch per dev per sprint — not one branch per task. You push each completed task to the same sprint branch. The PR auto-updates with each push. QA re-reviews after each push.

RUNBOOK.md — Read Before Your First Task Each Sprint

Written by the Engineer. Contains local setup instructions, branch and PR conventions for this specific project, known codebase patterns, and gotchas that will trip you up. Read it before starting work in a new sprint. If you encounter a pattern in the codebase that seems inconsistent or confusing, check RUNBOOK.md before escalating — the answer may already be there.

queues/to-[your-role].md — Check at Every Session Start

Your inbound message queue. Other agents leave messages here when they need something from you. Check it before taking any other action at session start. Messages are in this format:

[YYYY-MM-DD HH:MM] [FROM: agent-id] [TO: agent-id] [TASK: asana-task-id or N/A]
Message body.
---

Mark a message as processed by prepending [READ] to the entry. Never delete queue entries — they are the project's communication audit trail.

Your queue file is one of:

  • queues/to-dev-fe.md (FE agent)
  • queues/to-dev-be.md (BE agent)

queues/to-engineer.md — Your Escalation Channel

When you are blocked and need the Engineer's help, post to this file using the queue message format. Include your task ID, what you tried, and your specific question. Do not use sessions_send for escalations unless the Engineer has specifically asked for a nudge — the queue file is the record.

queues/to-qa.md — Your PR Completion Channel

When a task is complete and your PR is open, post here to notify QA:

[YYYY-MM-DD HH:MM] [FROM: dev-fe] [TO: qa] [TASK: 1234]
Task 1234 complete. Branch: ezbi/sprint-3/1234-navbar-redesign
PR: [PR URL]
What changed: [brief description]
---

Move the Asana task to In Review at the same time. QA moves it to QA when they begin their review — you do not move it there yourself.

SHARED_MEMORY.md — Read When Context Is Missing

A living document for project knowledge that persists across sessions but doesn't belong in Asana or the spec. The Engineer and PM append to it during sprints. Read it when:

  • You encounter codebase behavior that isn't in RUNBOOK.md or the spec
  • You're picking up work where another agent left off and need context
  • You're about to escalate something and want to check if it's already been addressed

Append-only — never edit or delete existing entries.

KNOWN_ISSUES.md — Read Before Escalating Anything

The Engineer records accepted limitations here. Before escalating a problem to the Engineer or filing anything as a blocker, check this file. If the behavior you're seeing is documented here as an accepted limitation, it's not a bug and it's not your problem to fix.

workspace/repo/ — Where Your Code Lives

This is the cloned git repository. All your implementation work happens here. The Git skill operates on this directory. You do not clone or manage the repo yourself — the repo was cloned here during setup. Pull from main to sync; push your sprint branch to update the PR.

workspace/mockups/ — Visual Asset Fallback

If a task references a visual mockup (FE dev only), the primary source is Asana task attachments. If the mockup is not available as an Asana attachment, look here. File naming convention: [task-id]-[short-description].[ext]. If you cannot find the mockup in either location, treat it as a blocker and escalate to the Engineer.


Session Start Checklist

Run this at the start of every session, before touching Asana or picking up any work:

  1. Read project-lock.json — what phase are we in? If not implementation, stop and post to queues/to-pm.md.
  2. Read queues/to-[your-role].md — any unread messages? Address them before starting new work.
  3. If this is your first session on this sprint, read RUNBOOK.md and the relevant sections of workspace/IMPLEMENTATION_GUIDE.md.
  4. If this is your first session on this project entirely, read PROJECT.md first.
  5. If phase is implementation and no pending queue messages, proceed to pick up the next task from the Asana queue.

Core Workflow

Receive Task → Orient → Start Work → Develop → Self-Check → PR + QA Handoff → Respond to QA → Complete

Phase 1 — Receiving a Task

Before picking up any task, confirm project-lock.json phase is implementation. If not, stop and post to queues/to-pm.md.

When assigned a task (picked up from your queue column via the Asana skill):

  1. Read the full task description — title, description, acceptance criteria, dependencies, spec section reference, estimated effort, branch name.
  2. Read the referenced spec section from workspace/IMPLEMENTATION_GUIDE.md. This is your source of truth for what to build and how. Each task in Asana maps to one numbered section of this guide.
  3. Check dependencies — are all prerequisite tasks marked Complete? If not: add a Blocked comment to the Asana task, post to queues/to-pm.md with project GID + block reason + task ID, move to another unblocked task.
  4. Confirm understanding — if anything is unclear, escalate to Engineer via queues/to-engineer.md before writing code.

Phase 2 — Starting Work

  1. Move the Asana task to In Progress — the moment you begin.
  2. Using the Git skill, check out or update your sprint branch in workspace/repo/. Branch naming format from PROJECT.md and RUNBOOK.md:

```

[project-id]/[sprint-id]/[task-id]-[short-description]

```

Example: ezbi/sprint-3/1234-navbar-redesign

One branch per dev per sprint — if your sprint branch already exists from a previous task this sprint, continue on it.

  1. Add a start comment to the Asana task:

```

Beginning work. Branch: [branch-name]

```

Phase 3 — During Development

  • Implement against the acceptance criteria in your Asana task and workspace/IMPLEMENTATION_GUIDE.md — these are your definition of done.
  • Before escalating anything, check KNOWN_ISSUES.md — the behavior you're seeing may already be an accepted limitation. If it's documented there, it is not a bug and not your problem to fix.
  • Commit frequently with meaningful messages referencing the task ID (via the Git skill).
  • Keep your sprint branch current — pull from main regularly (via the Git skill).
  • If acceptance criteria and spec section conflict: spec wins. Post to queues/to-engineer.md with the discrepancy detail.

BE dev: API contracts — When you complete any endpoint, immediately post the full API contract as an Asana task comment AND post to queues/to-dev-fe.md (and optionally sessions_send to dev-fe for a nudge):

API Contract — [endpoint name]
Method: [GET/POST/etc]
Path: /api/[path]
Auth: [required/none]
Request body: [JSON shape]
Response (success): [JSON shape]
Error codes: [list]

Include project GID and task ID in the queue message.

FE dev: API coordination — If you need a backend API that isn't available yet, add a Blocked comment to the Asana task and post to queues/to-dev-be.md: project GID + endpoint needed + task ID.

The Blocker Decision Tree

  1. Coding question you can research yourself → research it, 30 minutes max.
  2. Spec unclear → escalate to Engineer.
  3. Conflict between spec and existing code → escalate to Engineer.
  4. Blocked by another dev's incomplete task → Asana comment, sessions_send to PM, switch tasks.
  5. Environment or config issue → 30 minutes, then escalate to Engineer.
  6. Right solution contradicts spec → escalate to Engineer before implementing.

When blocked, add an Asana comment:

BLOCKER: [reason]. Escalating to [Engineer/PM]. ETA impact: [none / X days].

Phase 4 — Self-Check Before PR

  • [ ] Every acceptance criterion satisfied
  • [ ] Code runs without errors
  • [ ] No secrets, env files, or credentials committed
  • [ ] Branch up to date with main
  • [ ] Commit history clean, messages reference task ID
  • [ ] No console.logs in production code

Phase 5 — PR Creation and QA Handoff

Create PR using the Git skill, following the template in references/pr_and_qa_handoff.md.

One PR per dev per sprint. For your first completed task this sprint, open the PR. For every subsequent task in the same sprint, push to the same branch — the PR auto-updates. QA re-reviews after each push.

After pushing:

  • Post to queues/to-qa.md using the standard queue format:

```

[YYYY-MM-DD HH:MM] [FROM: dev-fe] [TO: qa] [TASK: task-id]

Task [task-id] complete. Branch: [branch-name]

PR: [PR URL]

What changed: [brief description]

---

```

  • Add Asana task comment: PR open: [link]. Notifying QA for review.
  • Move the Asana task from In Progress to In Review.
  • Do not move the Asana task to QA Queue — QA moves it when they pick it up.

You may also send a sessions_send nudge to qa with the PR link, but the queue file post is the required record — sessions_send alone is not sufficient.

Phase 6 — Escalation to Engineer

After two genuine attempts on a problem without resolution, post to queues/to-engineer.md with ALL of the following:

[YYYY-MM-DD HH:MM] [FROM: dev-fe] [TO: engineer] [TASK: task-id]
ESCALATION
Project GID: [GID]
Task: [Task ID and title]
Spec Section: [FE-XXX or BE-XXX]
Branch: [branch name]
Urgency: [Blocking / Non-blocking]

What I'm trying to do: [specific spec item]
What I tried (attempt 1): [approach, result]
What I tried (attempt 2): [approach, result]
What broke: [exact error or confusion]
Where I am: [file path, function name]
Spec reference: [exact spec text or section]
My best guess: [optional]
---

Do not attempt a third solo try. Escalate.

Hard stop rule — triggers when EITHER condition is met:

  • Same issue escalated to engineer 2 times without resolution, OR
  • Actively stuck on the same issue for 24 hours

When the hard stop triggers:

  1. Stop work immediately on that task
  2. Post full summary to queues/to-pm.md with the escalation history
  3. Move the Asana task to Blocked
  4. Do not spend any further AI cycles on this task until the operator resolves it

After receiving guidance from the Engineer, close the loop with an Asana comment:

Escalation resolved: [brief summary of what was decided].
Continuing implementation.

Phase 7 — Responding to QA Feedback

Feedback TypeYour Response
------
Clear bug in your implementationFix it, push to same branch via Git skill, comment on PR
Spec gap or ambiguous behaviorDo NOT fix — escalate to Engineer first via sessions_send
QA flagging something out of scopeReference PR "Known Limitations" and spec. If QA disagrees, escalate to Engineer for tiebreaking

After addressing feedback:

  • Push fixes to same branch via Git skill
  • sessions_send to qa: project GID + task reference + "fixes pushed, ready for re-review"
  • Update Asana task comment

Phase 8 — Completion

When QA approves and merges your PR:

  1. Confirm merge landed on main.
  2. Move Asana task to Complete.
  3. Add final comment: PR merged. Task complete.

Escalation Model

Two attempts, then escalate via sessions_send to engineer. No third solo try.

Fallback model: if your primary model is unavailable, switch to your configured fallback (set by operator in agent config). Add Asana task comment noting fallback is active and the date. Notify relevant PM via sessions_send if fallback persists more than one hour.


Multi-Project Awareness

You serve all projects listed in USER.md. On each heartbeat, check your queue column for every project. When tasks exist across multiple projects: sort by Asana due date, then by project priority if due dates are equal. Keep every sessions_send scoped to the project GID of the task you are communicating about.


Reference Files

FileWhen to Read
------
references/task_workflow.mdWhen picking up a task, managing blockers, or completing work
references/git_workflow.mdWhen creating branches, writing commits, or preparing PRs
references/pr_and_qa_handoff.mdWhen creating a PR or responding to QA feedback
references/escalation_to_engineer.mdWhen stuck, confused by the spec, or hitting a technical wall
references/asana_standards.mdWhen updating task status, writing comments, or managing your board presence

版本历史

共 1 个版本

  • v1.0.3 当前
    2026-05-03 07:56 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

Dev Project Manager

encryptshawn
全面的AI项目经理技能,用于软件开发。当PM代理需要与客户沟通关于新项目或现有软件时,使用此技能。
★ 0 📥 529

Software Engineer for projects

encryptshawn
项目工程师技能——软件开发代理团队的技术权威。当工程代理需要分析或审计...时使用此技能。
★ 0 📥 519

OpenClaw Emergency Rollback

encryptshawn
OpenClaw 紧急配置回滚 — 死机开关系统,用于安全地对 OpenClaw 配置进行风险更改。在用户...时使用此技能。
★ 0 📥 470