mockzilla-workflow-architect
9
总安装量
8
周安装量
#32209
全站排名
安装命令
npx skills add https://github.com/andrecrjr/mockzilla --skill mockzilla-workflow-architect
Agent 安装分布
claude-code
6
gemini-cli
6
opencode
5
codex
5
antigravity
5
windsurf
3
Skill 文档
Mockzilla Workflow Architect Skill
Persona: You are a Senior Backend Architect. You design robust, stateful API behaviors using Mockzilla’s transition engine. You focus on logic, consistency, and simulating complex business flows.
[!IMPORTANT] This skill handles How the API Behaves (logic). For data generation (what the fields contain), use
mockzilla-mock-maker.
ð External References
- Logic Operators Guide: Syntax and use cases for
eq,neq,exists, etc. - Complex Flow Recipes: Templates for OAuth2, Checkout, and multi-step forms.
ð¡ï¸ Constraints & Boundaries
- Always verify state changes using
inspect_workflow_state. - Always include a fallback transition for unhandled cases.
- Never implement complex business logic (e.g., tax calculation) – echo inputs or return static varied results instead.
- Never modify
dbwithout a matchingexistsoreqcondition where appropriate.
ð§ Core Architecture
1. The “Action-Driven” Mindset
In Mockzilla workflows, endpoints are actions. State changes are side effects.
- â Bad:
POST /update-cart-total(Direct state manipulation via API) - â
Good:
POST /add-item-> Effect: Updatesdb.itemsAND recalculatesstate.cartTotal
2. State vs. Database
- Scenario State (
state.*): Best for primitives (flags, counters, current tokens).state.isLoggedIn,state.retryCount,state.currentUserId
- Mini-Database (
db.*): Best for collections/entities (arrays of objects).db.users,db.orders,db.notifications
ð ï¸ Logic & Rules Engine
Conditions (When to fire?)
Transitions only fire if ALL conditions match.
| Type | Syntax | Use Case |
|---|---|---|
| Equals | {"type": "eq", "field": "...", "value": "..."} |
checking status, IDs, tokens |
| Not Equals | {"type": "neq", ...} |
“if not authorized”, “if not processed” |
| Exists | {"type": "exists", "field": "input.headers.auth"} |
Require headers or body fields |
| Greater/Less | {"type": "gt", "value": 5} |
Rate limits, quotas, thresholds |
| Contains | {"type": "contains", "value": "admin"} |
Role checks in arrays |
Effects (What happens?)
Actions to persist data. Executed before the response is generated.
- Set State:
{ "type": "state.set", "raw": { "status": "active" } } - Push to DB:
{ "type": "db.push", "table": "users", "value": "{{input.body}}" } - Update DB:
{ "type": "db.update", "table": "users", "match": { "id": "..." }, "set": { ... } } - Remove from DB:
{ "type": "db.remove", "table": "cart", "match": { "id": "..." } }
ðï¸ Complex Flow Recipes
ð The Shopping Cart Flow
Scenario: shopping-cart
- Add Item (
POST /cart/add)- Effect:
db.pushtocart_items. - Effect:
state.set->cartCount(incremented via input or hardcoded for simple mocks).
- Effect:
- View Cart (
GET /cart)- Response:
{ "items": "{{db.cart_items}}", "count": "{{db.cart_items.length}}" }(Note: .length not supported directly in interpolation, typically just return the array)
- Response:
- Checkout (
POST /checkout)- Condition:
existsdb.cart_items(simplified check) - Effect:
db.pushtoorders. - Effect:
state.setcart_itemsto[](Reset).
- Condition:
ð The Multi-Step Auth Flow
Scenario: secure-onboarding
- Register (
POST /register)- Effect:
db.pushuser touserswithstatus: "pending". - Effect:
state.setpendingEmailto{{input.body.email}}.
- Effect:
- Verify Email (
POST /verify)- Condition:
eqinput.body.codeto1234(Fixed mock code). - Effect:
db.updateuser inuserswhereemail == {{state.pendingEmail}}-> setstatus: "active".
- Condition:
- Login (
POST /login)- Condition:
eqdb.users[?(@.email=='{{input.body.email}}')].statustoactive. - Response: 200 OK + Token.
- Condition:
ð Debugging & Verification
-
Inspect State:
- Use
inspect_workflow_statefrequently to seeing if your effects actually worked. - “Why didn’t my login work?” -> Check if
db.usersactually has the user!
- Use
-
Transition Priority:
- Mockzilla matches the first transition where conditions pass.
- Put specific “Error/Edge Case” transitions before generic “Success” ones.
-
Test Tool:
- Use
test_workflowto fire a one-off request without spinning upcurl.
- Use