Approval
Skill CloudChef/atlasclaw-providers/providers/SmartCMP-Provider/skills/approval
Approval workflow skill. View pending approval tasks and approve or reject service requests.From its SKILL.md
npx -y skills add CloudChef/atlasclaw-providers --skill approvalAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
20.0 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
approval
Approval workflow management skill.
Purpose
Manage approval workflows for service catalog requests:
- Query pending approval items with priority analysis
- Approve one or more requests with optional reason
- Reject one or more requests with reason
Trigger Conditions
Use this skill when user intent is any of:
- View pending approvals / list approvals / check what needs approval
- Analyze one pending approval in read-only mode
- Approve a request / approve all / batch approve
- Reject a request / deny request / batch reject
| Intent | Keywords |
|---|---|
| View pending | "show pending approvals", "list approvals", "what needs approval" |
| Analyze | "analyze approval request", "review approval", "只读分析审批请求", "审批分析" |
| Approve | "approve request", "agree request", "pass request", "approve #1", "agree 1", "同意 1", "批准 1", "通过 1", "approve all", "batch approve" |
| Reject | "reject request", "deny request", "refuse request", "reject #1", "deny 1", "拒绝 1", "驳回 1", "batch reject" |
Intent Priority
Action commands always win over detail lookup.
| User intent | Required tool |
|---|---|
| approve/agree/pass + Request ID or row number | smartcmp_approve |
| 批准/同意/通过/审批通过 + Request ID or row number | smartcmp_approve |
| reject/deny/refuse + Request ID or row number | smartcmp_reject |
| 拒绝/驳回 + Request ID or row number | smartcmp_reject |
| analyze/evaluate/review + Request ID | smartcmp_analyze_approval_request |
| 分析/评估/审查/只读分析 + Request ID | smartcmp_analyze_approval_request |
| view/show/inspect/check detail + Request ID | smartcmp_get_request_detail |
| 查看/看下/详情 + Request ID | smartcmp_get_request_detail |
Examples:
approve CHG20260413000011MUST callsmartcmp_approve.agree RES20260505000010MUST callsmartcmp_approve.pass TIC20260502000003MUST callsmartcmp_approve.批准 CHG20260413000011MUST callsmartcmp_approve.reject CHG20260413000011MUST callsmartcmp_reject.deny RES20260505000010MUST callsmartcmp_reject.analyze approval request RES20260505000010MUST callsmartcmp_analyze_approval_request.只读分析审批请求 RES20260505000010MUST callsmartcmp_analyze_approval_request.查看 CHG20260413000011 的详情MUST callsmartcmp_get_request_detail.show detail of CHG20260413000011MUST callsmartcmp_get_request_detail.
Handlers and helpers
All five Tool commands are co-located in scripts/adapter.py:
| Handler | Description |
|---|---|
list_pending | List pending approval items with priority |
get_request_detail | Read one approval request |
analyze_request | Analyze one pending approval without executing a decision |
approve | Approve one or more requests |
reject | Reject one or more requests |
scripts/_approval_object_actions.py remains separate because the embedded
assistant Context resolver also calls it to build page actions. It is not a
one-command forwarding script.
The Adapter receives the selected instance and Cookie/user/robot credential from AtlasClaw Context. SmartCMP Provider owns authentication resolution and all SmartCMP API calls.
Workflow
Step 1: List Pending Approvals
Call smartcmp_list_pending with optional days.
Output Format:
- Human-readable: Markdown table sorted by latest SmartCMP update first
- Machine-readable:
_internal.itemsin the Tool result, retained by AtlasClaw workflow context
_internal.items fields:
| Field | Description |
|---|---|
index | Display index (1, 2, 3...) — for user selection only |
request_id | SmartCMP user-facing Request ID / request number — use this for approve/reject tool input (e.g., RES20260505000010, TIC20260502000003, or CHG20260413000011) |
name | Request name |
catalog_name | Service catalog type |
applicant | Requester name |
approval_step | Current approval step |
current_approver | Current approver display name |
CRITICAL: Request ID Field Selection
MUST USE
request_idfield forsmartcmp_approveandsmartcmp_rejectThe list result exposes one ID field to the agent: the user-facing
_internal.items[].request_id. SmartCMP Provider resolvesrequest_idto the internal approval action identifier before calling the CMP approval API.
| Field | Format Example | Can Use as approve/reject tool input? |
|---|---|---|
request_id | RES20260505000010, TIC20260502000003, CHG20260413000011 | YES — USE THIS |
| display index | 1, 2, 3 | NO — resolve row index to request_id first |
| UUID-shaped internal ID | internal SmartCMP identifier | NO — not exposed to the agent and not accepted by approve/reject |
Mapping user selection to correct ID:
User says "1", "approve 1", "同意 1", or "批准 1"
|
v
Find the selected item in the latest `smartcmp_list_pending` `_internal.items`
|
v
Extract the `request_id` field
|
v
Pass to `smartcmp_approve` or `smartcmp_reject`
Never invent or pass placeholder values such as dummy-id-placeholder, placeholder, example, or <request_id>. If the latest list metadata is unavailable, list pending approvals again before calling approve/reject.
Step 2: Approve Requests
Call smartcmp_approve with one or more request_ids and an optional
reason.
Step 3: Reject Requests
Call smartcmp_reject with one or more request_ids and an optional
rejection reason.
Output Parsing
Approval _internal.items entry
{
"index": 1,
"request_id": "RES20260505000010",
"name": "Test Request",
"catalog_name": "Issue Ticket",
"applicant": "TestUser",
"approval_step": "Level 1 Approval",
"current_approver": "Pending"
}
Quick Reference: Which ID to Use
[OK] smartcmp_approve(request_id) <- RES20260505000010
[OK] smartcmp_reject(request_id) <- TIC20260502000003 or CHG20260413000011
[FAIL] smartcmp_approve(<uuid>) <- internal SmartCMP UUID, not accepted
[FAIL] smartcmp_approve(1) <- display row number; resolve it to request_id first
[FAIL] smartcmp_approve(dummy-id-placeholder) <- placeholder, never send to CMP
Critical Rules
ONLY use
request_idfield for approve/reject tool input. SmartCMP Agent SmartCMP Provider converts it to the approval action ID internally.
NEVER create temp files — no
.py,.txt,.json. Your context IS your memory.
Always show pending list first before approve/reject operations.
Confirm with user before batch operations affecting multiple items.
Error Handling
| Error | Cause | Resolution |
|---|---|---|
400 + activity is null | Used an internal or stale identifier after Request ID resolution | Re-list pending approvals, verify the item is still pending, and retry with request_id |
Invalid SmartCMP Request ID(s) | Used a display row number, UUID-shaped internal ID, or placeholder instead of _internal.items[].request_id | Re-list pending approvals and resolve the selected row to its request_id field |
401 / Token expired | Selected SmartCMP session expired | Refresh the selected SmartCMP session or credential |
404 / Not found | Invalid or stale Request ID | Verify ID from the latest smartcmp_list_pending result |
[ERROR] output | Various | Report to user immediately; do NOT self-debug |
References
- WORKFLOW.md — Detailed approval workflow documentation
What ships with it: 3 files
18.5 KB alongside SKILL.md, 2 of them executable
references/
- WORKFLOW.md1.9 KB
scripts/
- adapter.pyruns7.6 KB
- _approval_object_actions.pyruns9.0 KB