From emasoft-assistant-manager-agent
Use when handling approval requests from other roles that require user decisions on code, releases, or security gates. Trigger with approval requests from ECOS or other agents.
npx claudepluginhub emasoft/emasoft-plugins --plugin emasoft-assistant-manager-agentThis skill uses the workspace's default tool permissions.
This skill provides the Assistant Manager (EAMA) with standard workflows for handling approval requests from other roles and presenting them to the user for decision.
Manages multi-stakeholder approval workflows for marketing assets: tiers by budget/risk/visibility, routes to approvers, tracks status, escalates deadlines, audits history.
Approves PM-written implementation specs and starts Phase 2 execution in Gran Maestro workflow. Supports single/batch approvals, dependency checks, DAG chaining, and non-stop execution rules.
Prepares package, plugin, or skill releases for human approval in Linear. Runs preflight checks, creates/updates tickets with release plans, moves to Ready for Review, then stops before publishing.
Share bugs, ideas, or general feedback.
This skill provides the Assistant Manager (EAMA) with standard workflows for handling approval requests from other roles and presenting them to the user for decision.
docs_dev/handoffs/ directory| Role | Prefix | Plugin Name |
|---|---|---|
| Assistant Manager | eama- | Emasoft Assistant Manager Agent |
| Architect | eaa- | Emasoft Architect Agent |
| Orchestrator | eoa- | Emasoft Orchestrator Agent |
| Integrator | eia- | Emasoft Integrator Agent |
Trigger: Code is ready to be pushed to remote repository
Workflow:
## Push Approval Requested
**Branch**: {branch_name}
**Changes**: {summary_of_changes}
**Files Modified**: {count}
**Tests Status**: {passed/failed}
Do you approve pushing these changes?
- [Approve] - Push to remote
- [Reject] - Cancel push
- [Review] - Show me the changes first
Trigger: PR is ready to be merged
Workflow:
## Merge Approval Requested
**PR**: #{pr_number} - {pr_title}
**Branch**: {source} -> {target}
**Reviews**: {review_status}
**CI Status**: {ci_status}
**Conflicts**: {yes/no}
Do you approve merging this PR?
- [Approve] - Merge PR
- [Reject] - Close without merging
- [Request Changes] - Add comments
Trigger: Package/release is ready to be published
Workflow:
## Publish Approval Requested
**Package**: {package_name}
**Version**: {version}
**Target**: {npm/pypi/github releases/etc}
**Changelog**: {summary}
**Breaking Changes**: {yes/no}
Do you approve publishing this release?
- [Approve] - Publish
- [Reject] - Cancel
- [Review] - Show release notes
Trigger: Action with security implications requires authorization
Workflow:
## Security Approval Required
**Action**: {action_description}
**Risk Level**: {low/medium/high/critical}
**Affected Systems**: {list}
**Justification**: {reason_for_action}
**Rollback Plan**: {description}
This action has security implications. Do you authorize it?
- [Authorize] - Proceed with action
- [Deny] - Block action
- [More Info] - Explain risks in detail
Trigger: EAA (Architect) has completed design document
Workflow:
## Design Approval Requested
**Design**: {design_name}
**Document**: {path_to_design_doc}
**Modules**: {count} modules defined
**Estimated Scope**: {scope_summary}
Review the design document and approve to proceed with implementation.
- [Approve] - Proceed to orchestration
- [Request Changes] - Send back to EAA
- [Discuss] - I have questions
All approvals are tracked in state file:
approvals:
- id: "approval-{uuid}"
type: "merge"
requested_by: "eia"
requested_at: "ISO-8601"
status: "pending" | "approved" | "rejected"
user_decision: null | "approve" | "reject" | "request_changes"
decided_at: null | "ISO-8601"
conditions: []
notes: ""
Approval requests that remain pending for too long must be automatically rejected to prevent stale requests from blocking workflows.
Check approval timestamps every hour to identify expired requests:
# Find approvals older than 24 hours
CURRENT_TIME=$(date +%s)
EXPIRY_THRESHOLD=$((24 * 60 * 60)) # 24 hours in seconds
# Using jq to find expired approvals in state file
cat docs_dev/approvals/approval-state.yaml | yq -r '
.approvals[] |
select(.status == "pending") |
select((now - (.requested_at | fromdateiso8601)) > 86400) |
.id
'
Step 1: Identify Expired Approvals
Every hour, scan for approvals where:
status is pendingrequested_at is more than 24 hours agoStep 2: Auto-Reject Expired Approvals
For each expired approval:
Update approval status
approvals:
- id: "approval-{uuid}"
status: "rejected"
user_decision: "auto-rejected"
decided_at: "<current-ISO-8601>"
notes: "EXPIRED: Auto-rejected after 24 hours without response"
Send rejection notice to requesting role
Send an expiry rejection notice using the agent-messaging skill:
<requesting-role-session>approval_decisionnormalVerify: confirm message delivery via the skill's sent messages feature.
Log to approval-log.md
## APPROVAL-<ID> - EXPIRED
- **Request ID**: <REQUEST-ID>
- **From**: <requesting-role>
- **Requested**: <requested_at>
- **Expired**: <current-timestamp>
- **Decision**: REJECTED (EXPIRED)
- **Reason**: Auto-rejected after 24 hours without user response
- **Action Required**: Requesting role should resubmit if still needed
Step 3: Notify User of Expirations (Optional)
If user preference is set to receive expiry notifications:
Approval Requests Expired
The following approval requests were auto-rejected after 24 hours:
- <REQUEST-ID-1>: <operation-summary> (from <role>)
- <REQUEST-ID-2>: <operation-summary> (from <role>)
These requests have been returned to the requesting roles. They can resubmit if still needed.
| Setting | Default | Description |
|---|---|---|
expiry_threshold_hours | 24 | Hours before auto-reject |
expiry_check_interval_minutes | 60 | How often to check for expired |
notify_user_on_expiry | false | Send summary to user on expiry |
allow_resubmission | true | Requesting role can resubmit after expiry |
When approval is requested:
# Incoming message from EOA via AI Maestro
Subject: Push Approval Requested
Priority: high
Content: Branch feature/user-auth ready for push. 5 files modified. All tests passed.
# EAMA presents to user
## Push Approval Requested
**Branch**: feature/user-auth
**Changes**: Added user authentication module
**Files Modified**: 5
**Tests Status**: All 23 tests passed
Do you approve pushing these changes?
- [Approve] - Push to remote
- [Reject] - Cancel push
- [Review] - Show me the changes first
# User responds: "Approve"
# EAMA sends response to EOA
Subject: Push Approved
Content: User approved push for feature/user-auth at 2025-01-30T10:00:00Z
# EAMA receives security approval request
## Security Approval Required
**Action**: Update production database schema
**Risk Level**: critical
**Affected Systems**: users, orders, payments
**Justification**: Required for GDPR compliance
**Rollback Plan**: Restore from backup-2025-01-29
This action has security implications. Do you authorize it?
| Error | Cause | Resolution |
|---|---|---|
| Approval request pending | No user response | Send periodic reminders; keep request active until user responds |
| Invalid approval type | Unknown type in request | Query sender for clarification |
| State file write failure | Permissions or disk issue | Retry 3 times, then escalate to user |
| Missing handoff context | Incomplete request | Return to sender with "INCOMPLETE" flag |
| Outcome | Status | Action |
|---|---|---|
| User approves | approved | Send approval message to requesting role and update state file |
| User rejects | rejected | Send rejection message to requesting role and update state file |
| User requests changes | request_changes | Send feedback to requesting role with user comments |
| User requests review | pending | Display requested information and re-present approval request |
| Timeout (24 hours) | rejected | Auto-reject and notify requesting role |
Copy this checklist and track your progress:
For message templates, see the shared message templates reference. For handoff format, see the shared handoff template reference.