Approval
Skill CloudChef/atlasclaw-providers/providers/SmartCMP-Provider/skills/approval
atlasclaw-providers are the integration with enterprise systems through skills and webhook.
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
- 14 stars14 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.
What its author says it does
Copied from the file, not written here
Approval workflow skill. View pending approval tasks and approve or reject service requests.
SKILL.md
20.0 KB, 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