Crawler Summary

skill-curator answer-first brief

This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. --- name: skill-curator description: >- This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. version: 0.3.0 tools: Read, Glob, Grep, Bash, Edit, Write, Task, sandbox_execut Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.

Freshness

Last checked 4/15/2026

Best For

skill-curator is best for run, make, all workflows where MCP and OpenClaw compatibility matters.

Not Ideal For

Contract metadata is missing or unavailable for deterministic execution.

Evidence Sources Checked

editorial-content, GITHUB OPENCLEW, runtime-metrics, public facts pack

Claim this agent
Agent DossierGitHubSafety: 94/100

skill-curator

This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. --- name: skill-curator description: >- This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. version: 0.3.0 tools: Read, Glob, Grep, Bash, Edit, Write, Task, sandbox_execut

MCPself-declared
OpenClawself-declared

Public facts

4

Change events

1

Artifacts

0

Freshness

Apr 15, 2026

Verifiededitorial-contentNo verified compatibility signals

Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.

Trust evidence available

Trust score

Unknown

Compatibility

MCP, OpenClaw

Freshness

Apr 15, 2026

Vendor

Joneshong Skills

Artifacts

0

Benchmarks

0

Last release

Unpublished

Executive Summary

Key links, install path, and a quick operational read before the deeper crawl record.

Verifiededitorial-content

Summary

Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.

Setup snapshot

git clone https://github.com/joneshong-skills/skill-curator.git
  1. 1

    Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.

  2. 2

    Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Evidence Ledger

Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.

Verifiededitorial-content
Vendor (1)

Vendor

Joneshong Skills

profilemedium
Observed Apr 15, 2026Source linkProvenance
Compatibility (1)

Protocol compatibility

MCP, OpenClaw

contractmedium
Observed Apr 15, 2026Source linkProvenance
Security (1)

Handshake status

UNKNOWN

trustmedium
Observed unknownSource linkProvenance
Integration (1)

Crawlable docs

6 indexed pages on the official domain

search_documentmedium
Observed Apr 15, 2026Source linkProvenance

Release & Crawl Timeline

Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.

Self-declaredagent-index

Artifacts Archive

Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.

Self-declaredGITHUB OPENCLEW

Extracted files

0

Examples

6

Snippets

0

Languages

typescript

Parameters

Executable Examples

text

explorer (Haiku, maxTurns=10, tools: Read, Grep, Glob)

python

> import sys; sys.path.insert(0, '/Users/joneshong/.claude/skills/skill-curator/scripts')
> import analyze
> result = analyze.run(threshold=0.3)
> output(result)
>

bash

> python3 ~/.claude/skills/skill-curator/scripts/analyze.py --json --threshold 0.3
>

bash

python3 ~/.claude/skills/skill-curator/scripts/analyze.py

text

You are the Consolidator in a skill curation panel. Your bias is toward MERGING skills
to reduce redundancy.

Cluster under review: {cluster_skills}

Read these SKILL.md files: {skill_paths}

For each pair, evaluate:
1. Trigger phrase overlap — would a user say the same thing for both?
2. Workflow overlap — what % of steps are shared?
3. Domain object — do they operate on the same thing?
4. Merge feasibility — would the combined SKILL.md stay under 500 lines?

Output a structured verdict for each pair:
- Pair: A ↔ B
- Merge score (0-10): [score]
- Key argument for merging: [1-2 sentences]
- Proposed merged name: [name]
- Risk of merging: [1 sentence]

Be specific. Cite actual content from the SKILL.md files you read.

text

You are the Preservationist in a skill curation panel. Your bias is toward KEEPING
skills separate to preserve specificity.

Cluster under review: {cluster_skills}

Read these SKILL.md files: {skill_paths}

For each pair, evaluate:
1. Intent difference — do they serve different user goals?
2. Skill type difference — Knowledge vs Automation vs Template vs CLI Wrapper?
3. Freedom level — does one need tight scripts while the other is open-ended?
4. Audience mode — auto-invoked vs user-only?
5. Size risk — would merging create an unwieldy >500 line skill?

Output a structured verdict for each pair:
- Pair: A ↔ B
- Keep-separate score (0-10): [score]
- Key argument for keeping separate: [1-2 sentences]
- What would be lost by merging: [1 sentence]
- Disambiguation suggestion: [how to clarify triggers if keeping both]

Be specific. Cite actual content from the SKILL.md files you read.

Docs & README

Full documentation captured from public sources, including the complete README when available.

Self-declaredGITHUB OPENCLEW

Docs source

GITHUB OPENCLEW

Editorial quality

ready

This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. --- name: skill-curator description: >- This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. version: 0.3.0 tools: Read, Glob, Grep, Bash, Edit, Write, Task, sandbox_execut

Full README

name: skill-curator description: >- This skill should be used when the user asks to "organize my skills", "consolidate skills", "merge similar skills", "clean up skills", "整理 skills", "收斂 skills", "skill 太多了", "哪些 skill 可以合併", mentions skill redundancy, or discusses reviewing, reorganizing, merging, or splitting their skill inventory. version: 0.3.0 tools: Read, Glob, Grep, Bash, Edit, Write, Task, sandbox_execute

Skill Curator

Analyze the skill inventory for overlaps and redundancies, use a 3-agent panel discussion to reach consensus on recommendations, then execute approved restructuring.

Agent Delegation

Delegate skill scanning to explorer agent, evaluation to reviewer agent.

explorer (Haiku, maxTurns=10, tools: Read, Grep, Glob)

Guiding Philosophy

Goldilocks granularity: A skill = one coherent capability domain. Not a single command (too small), not an entire discipline (too large).

Principles:

  • Flexibility — No rigid rules; context determines the right boundary
  • Adaptability — Skills evolve; what was two skills yesterday may be one today
  • Stay current — Prune dead skills, merge converging ones, split outgrown ones

Workflow

Step 1: Scan

Sandbox acceleration: Full inventory overlap analysis runs efficiently in sandbox_execute.

Preferred (Sandbox):

import sys; sys.path.insert(0, '/Users/joneshong/.claude/skills/skill-curator/scripts')
import analyze
result = analyze.run(threshold=0.3)
output(result)

Fallback (Bash):

python3 ~/.claude/skills/skill-curator/scripts/analyze.py --json --threshold 0.3

Run the overlap analysis to get clusters:

python3 ~/.claude/skills/skill-curator/scripts/analyze.py

Options: --json for machine-readable output, --threshold 0.3 to adjust sensitivity.

Step 2: Panel Discussion (3-Agent Consensus)

For each non-trivial cluster identified in Step 1, launch 3 parallel agents using the Task tool. Each agent reads the actual SKILL.md files of the cluster members and argues from a different perspective.

Agent Roles

| Role | Bias | Focus | |------|------|-------| | Consolidator | Pro-merge | Finds redundancy, shared workflows, trigger collisions. Argues for fewer, broader skills. | | Preservationist | Pro-keep | Finds distinctions in intent, audience, freedom level. Argues for specialized skills. | | Synthesizer | Neutral | Weighs both sides, considers user experience and practical trade-offs. Produces the final recommendation. |

Prompt Templates

For each cluster, construct prompts like the following. The {cluster_skills} placeholder is the list of skill names; {skill_paths} are the SKILL.md file paths to read.

Consolidator prompt:

You are the Consolidator in a skill curation panel. Your bias is toward MERGING skills
to reduce redundancy.

Cluster under review: {cluster_skills}

Read these SKILL.md files: {skill_paths}

For each pair, evaluate:
1. Trigger phrase overlap — would a user say the same thing for both?
2. Workflow overlap — what % of steps are shared?
3. Domain object — do they operate on the same thing?
4. Merge feasibility — would the combined SKILL.md stay under 500 lines?

Output a structured verdict for each pair:
- Pair: A ↔ B
- Merge score (0-10): [score]
- Key argument for merging: [1-2 sentences]
- Proposed merged name: [name]
- Risk of merging: [1 sentence]

Be specific. Cite actual content from the SKILL.md files you read.

Preservationist prompt:

You are the Preservationist in a skill curation panel. Your bias is toward KEEPING
skills separate to preserve specificity.

Cluster under review: {cluster_skills}

Read these SKILL.md files: {skill_paths}

For each pair, evaluate:
1. Intent difference — do they serve different user goals?
2. Skill type difference — Knowledge vs Automation vs Template vs CLI Wrapper?
3. Freedom level — does one need tight scripts while the other is open-ended?
4. Audience mode — auto-invoked vs user-only?
5. Size risk — would merging create an unwieldy >500 line skill?

Output a structured verdict for each pair:
- Pair: A ↔ B
- Keep-separate score (0-10): [score]
- Key argument for keeping separate: [1-2 sentences]
- What would be lost by merging: [1 sentence]
- Disambiguation suggestion: [how to clarify triggers if keeping both]

Be specific. Cite actual content from the SKILL.md files you read.

Synthesizer prompt:

You are the Synthesizer in a skill curation panel. You are neutral and focused on
what best serves the user.

Cluster under review: {cluster_skills}

Read these SKILL.md files: {skill_paths}

Also consider the Consolidator's analysis:
{consolidator_output}

And the Preservationist's analysis:
{preservationist_output}

For each pair, produce a final recommendation:
- Pair: A ↔ B
- Recommendation: MERGE / KEEP / SPLIT / RETIRE
- Confidence: High / Medium / Low
- Reasoning: [2-3 sentences weighing both perspectives]
- If MERGE: proposed name and migration notes
- If KEEP: trigger disambiguation needed?
- Dissenting view worth noting: [1 sentence]

Output a summary table at the end with all recommendations.

Execution Pattern

Step 2a: Launch Consolidator + Preservationist in PARALLEL (both read SKILL.md files)
Step 2b: Wait for both to complete
Step 2c: Launch Synthesizer with both outputs as input
Step 2d: Collect final recommendations

Use the Task tool with subagent_type: "general-purpose" for all three agents. The Consolidator and Preservationist can run simultaneously. The Synthesizer must wait for both to finish since it needs their output.

For large inventories with many clusters, process clusters in parallel batches — one 3-agent panel per cluster, multiple clusters simultaneously.

Step 3: Present to User

Format the Synthesizer's output into a decision table:

## Curation Recommendations

| Cluster | Skills | Verdict | Confidence | Key Reason |
|---------|--------|---------|------------|------------|
| 1 | A, B, C | MERGE → D | High | Same domain, 80% workflow overlap |
| 2 | E, F | KEEP | Medium | Different intent despite keyword overlap |
| ... | ... | ... | ... | ... |

### Details per cluster
[Expand with Consolidator/Preservationist highlights for each]

Include enough context from both perspectives so the user can make an informed decision. Do not auto-execute. Wait for explicit user approval per cluster.

Step 4: Execute (After Approval)

Merge Procedure (A + B → C)

  1. Create archive: mkdir -p ~/.claude/skills/.archived
  2. Copy originals to archive: cp -r A .archived/A-$(date +%Y%m%d)
  3. Decide which skill directory to keep as C (typically the broader one)
  4. Merge SKILL.md content:
    • Union all trigger phrases in description
    • Union tools lists
    • Merge workflow sections (deduplicate shared steps)
    • Combine reference files and scripts
  5. Remove the absorbed skill directory
  6. Validate: run quick_validate.py C from the create-skill skill (~/.claude/skills/create-skill/)

Split Procedure (X → Y + Z)

  1. Archive original: cp -r X .archived/X-$(date +%Y%m%d)
  2. Create new skill directory for the split-off portion
  3. Partition trigger phrases — no overlapping triggers between Y and Z
  4. Move relevant scripts and references to each side
  5. Validate both Y and Z

Retire Procedure

  1. Archive: mv X .archived/X-$(date +%Y%m%d)
  2. Search other skills for cross-references to X and update them

Step 5: Verify

After all changes, re-run the analysis to confirm:

  • No new high-overlap clusters introduced
  • Total skill count reduced (or unchanged if only splitting)
  • All remaining skills pass validation

Quick Reference

Known False Positives

| Pattern | Why It's False | Example | |---------|----------------|---------| | Generic keyword overlap | "create", "write", "build" appear everywhere | content-writer ↔ mcp-builder | | Same tool profile | Many skills use Bash+Read+Write+Edit | pdf ↔ docx | | Mentor suffix | Naming convention, not domain overlap | model-mentor ↔ openclaw-mentor |

Known Cluster Patterns

| Pattern | Typical Action | |---------|---------------| | Multiple CLI headless wrappers | Consider merge if workflows are near-identical | | Multiple skills for same product | Evaluate by skill type (knowledge vs automation) | | "Design" vs "Engineering" | Usually keep separate (different freedom levels) | | File format skills (pdf/docx/xlsx/pptx) | Usually keep separate (different domain objects) | | "Writing" family (content/marketing/docs) | Usually keep separate (different intent) | | Meta-skills (create/optimize/curate) | Usually keep separate (different lifecycle stages) |

Sandbox Optimization

This skill is sandbox-optimized. Batch operations run inside sandbox_execute:

  • Overlap analysis: Import scripts/analyze.py in sandbox to compute similarity scores and cluster all skills in one deterministic pass
  • Batch SKILL.md reading: Read multiple skill frontmatter fields in sandbox to build comparison data without per-file tool calls

Principle: Deterministic batch work → sandbox; reasoning/presentation → LLM.

Continuous Improvement

This skill evolves with each use. After every invocation:

  1. Reflect — Identify what worked, what caused friction, and any unexpected issues
  2. Record — Append a concise lesson to lessons.md in this skill's directory
  3. Refine — When a pattern recurs (2+ times), update SKILL.md directly

lessons.md Entry Format

### YYYY-MM-DD — Brief title
- **Friction**: What went wrong or was suboptimal
- **Fix**: How it was resolved
- **Rule**: Generalizable takeaway for future invocations

Accumulated lessons signal when to run /skill-optimizer for a deeper structural review.

Additional Resources

Reference Files

  • references/merge-criteria.md — Decision framework with scoring signals, flowchart, and migration checklist

Scripts

  • scripts/analyze.py — Scan all skills, compute overlap scores, identify clusters. Usage: python3 analyze.py [--skills-dir DIR] [--json] [--threshold N]

Contract & API

Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.

MissingGITHUB OPENCLEW

Contract coverage

Status

missing

Auth

None

Streaming

No

Data region

Unspecified

Protocol support

MCP: self-declaredOpenClaw: self-declared

Requires: none

Forbidden: none

Guardrails

Operational confidence: low

No positive guardrails captured.
Invocation examples
curl -s "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/contract"
curl -s "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/trust"

Reliability & Benchmarks

Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.

Missingruntime-metrics

Trust signals

Handshake

UNKNOWN

Confidence

unknown

Attempts 30d

unknown

Fallback rate

unknown

Runtime metrics

Observed P50

unknown

Observed P95

unknown

Rate limit

unknown

Estimated cost

unknown

Do not use if

Contract metadata is missing or unavailable for deterministic execution.
No benchmark suites or observed failure patterns are available.

Media & Demo

Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.

Missingno-media
No screenshots, media assets, or demo links are available.

Related Agents

Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.

Self-declaredprotocol-neighbors
Gitlab Ai CatalogUpdated 1h agoRank 86

gitlab-mcp

A Model Context Protocol (MCP) server for GitLab

MCPAImcpmodel-context-protocol
Gitlab Public ProjectsUpdated 1h agoRank 83

gitlab-mcp

A Model Context Protocol (MCP) server for GitLab

MCPAImcpmodel-context-protocol
Zapier Agent TemplatesUpdated 1h agoRank 76

Viral Content Creation Agent

This agent researches trends, scripts videos, sets up engagement automation, and compiles everything into a shareable document.

MCPagentassistantautomation
Machine Appendix

Contract JSON

{
  "contractStatus": "missing",
  "authModes": [],
  "requires": [],
  "forbidden": [],
  "supportsMcp": false,
  "supportsA2a": false,
  "supportsStreaming": false,
  "inputSchemaRef": null,
  "outputSchemaRef": null,
  "dataRegion": null,
  "contractUpdatedAt": null,
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Invocation Guide

{
  "preferredApi": {
    "snapshotUrl": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/snapshot",
    "contractUrl": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/contract",
    "trustUrl": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/trust"
  },
  "curlExamples": [
    "curl -s \"https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/snapshot\"",
    "curl -s \"https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/contract\"",
    "curl -s \"https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/trust\""
  ],
  "jsonRequestTemplate": {
    "query": "summarize this repo",
    "constraints": {
      "maxLatencyMs": 2000,
      "protocolPreference": [
        "MCP",
        "OPENCLEW"
      ]
    }
  },
  "jsonResponseTemplate": {
    "ok": true,
    "result": {
      "summary": "...",
      "confidence": 0.9
    },
    "meta": {
      "source": "GITHUB_OPENCLEW",
      "generatedAt": "2026-10-09T02:26:42.884Z"
    }
  },
  "retryPolicy": {
    "maxAttempts": 3,
    "backoffMs": [
      500,
      1500,
      3500
    ],
    "retryableConditions": [
      "HTTP_429",
      "HTTP_503",
      "NETWORK_TIMEOUT"
    ]
  }
}

Trust JSON

{
  "status": "unavailable",
  "handshakeStatus": "UNKNOWN",
  "verificationFreshnessHours": null,
  "reputationScore": null,
  "p95LatencyMs": null,
  "successRate30d": null,
  "fallbackRate": null,
  "attempts30d": null,
  "trustUpdatedAt": null,
  "trustConfidence": "unknown",
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Capability Matrix

{
  "rows": [
    {
      "key": "MCP",
      "type": "protocol",
      "support": "unknown",
      "confidenceSource": "profile",
      "notes": "Listed on profile"
    },
    {
      "key": "OPENCLEW",
      "type": "protocol",
      "support": "unknown",
      "confidenceSource": "profile",
      "notes": "Listed on profile"
    },
    {
      "key": "run",
      "type": "capability",
      "support": "supported",
      "confidenceSource": "profile",
      "notes": "Declared in agent profile metadata"
    },
    {
      "key": "make",
      "type": "capability",
      "support": "supported",
      "confidenceSource": "profile",
      "notes": "Declared in agent profile metadata"
    },
    {
      "key": "all",
      "type": "capability",
      "support": "supported",
      "confidenceSource": "profile",
      "notes": "Declared in agent profile metadata"
    }
  ],
  "flattenedTokens": "protocol:MCP|unknown|profile protocol:OPENCLEW|unknown|profile capability:run|supported|profile capability:make|supported|profile capability:all|supported|profile"
}

Facts JSON

[
  {
    "factKey": "docs_crawl",
    "label": "Crawlable docs",
    "value": "6 indexed pages on the official domain",
    "category": "integration",
    "href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceType": "search_document",
    "confidence": "medium",
    "observedAt": "2026-04-15T05:03:46.393Z",
    "isPublic": true,
    "metadata": {}
  },
  {
    "factKey": "vendor",
    "label": "Vendor",
    "value": "Joneshong Skills",
    "category": "vendor",
    "href": "https://github.com/joneshong-skills/skill-curator",
    "sourceUrl": "https://github.com/joneshong-skills/skill-curator",
    "sourceType": "profile",
    "confidence": "medium",
    "observedAt": "2026-04-15T01:12:33.682Z",
    "isPublic": true,
    "metadata": {}
  },
  {
    "factKey": "protocols",
    "label": "Protocol compatibility",
    "value": "MCP, OpenClaw",
    "category": "compatibility",
    "href": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/contract",
    "sourceUrl": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/contract",
    "sourceType": "contract",
    "confidence": "medium",
    "observedAt": "2026-04-15T01:12:33.682Z",
    "isPublic": true,
    "metadata": {}
  },
  {
    "factKey": "handshake_status",
    "label": "Handshake status",
    "value": "UNKNOWN",
    "category": "security",
    "href": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/trust",
    "sourceUrl": "https://www.xpersona.co/api/v1/agents/joneshong-skills-skill-curator/trust",
    "sourceType": "trust",
    "confidence": "medium",
    "observedAt": null,
    "isPublic": true,
    "metadata": {}
  }
]

Change Events JSON

[
  {
    "eventType": "docs_update",
    "title": "Docs refreshed: Sign in to GitHub · GitHub",
    "description": "Fresh crawlable documentation was indexed for the official domain.",
    "href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceType": "search_document",
    "confidence": "medium",
    "observedAt": "2026-04-15T05:03:46.393Z",
    "isPublic": true,
    "metadata": {}
  }
]

Sponsored

Ads related to skill-curator and adjacent AI workflows.