Crawler Summary

smarthire-agent-workflows answer-first brief

Config-driven LangGraph/CrewAI workflow engine with YAML-registered agents, tasks and tools. Demo: interview questions generated from a resume and emailed. SmartHire: config-driven agent workflows A small workflow engine on top of **LangGraph** and **CrewAI** where agents, tasks, tools, nodes and the graph itself are declared in YAML and assembled by factories at request time. The shipped example turns a candidate's resume into interview questions and emails them, streaming progress to a UI. The point of the project is the engine, not the demo: adding a new workflow mea Capability contract not published. No trust telemetry is available yet. Last updated 10/9/2026.

Freshness

Last checked 10/9/2026

Best For

smarthire-agent-workflows is best for crewai, multi-agent workflows where OpenClaw compatibility matters.

Not Ideal For

Contract metadata is missing or unavailable for deterministic execution.

Evidence Sources Checked

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

Agent DossierGITHUB REPOSSafety: 66/100

smarthire-agent-workflows

Config-driven LangGraph/CrewAI workflow engine with YAML-registered agents, tasks and tools. Demo: interview questions generated from a resume and emailed. SmartHire: config-driven agent workflows A small workflow engine on top of **LangGraph** and **CrewAI** where agents, tasks, tools, nodes and the graph itself are declared in YAML and assembled by factories at request time. The shipped example turns a candidate's resume into interview questions and emails them, streaming progress to a UI. The point of the project is the engine, not the demo: adding a new workflow mea

OpenClawself-declared

Public facts

4

Change events

1

Artifacts

0

Freshness

Oct 9, 2026

Verifiededitorial-contentNo verified compatibility signals

Capability contract not published. No trust telemetry is available yet. Last updated 10/9/2026.

Trust evidence available

Trust score

Unknown

Compatibility

OpenClaw

Freshness

Oct 9, 2026

Vendor

Kiran Bal

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 10/9/2026.

Setup snapshot

  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

Kiran Bal

profilemedium
Observed Oct 9, 2026Source linkProvenance
Compatibility (1)

Protocol compatibility

OpenClaw

contractmedium
Observed Oct 9, 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 REPOS

Extracted files

0

Examples

6

Snippets

0

Languages

python

Executable Examples

mermaid

flowchart LR
    R[POST /dynamic<br/>payload: workflow config] --> A[WorkflowAdapter<br/>validate + normalise]
    A --> O[DynamicWorkflowOrchestrator]
    O --> TF[ToolFactory] --> AF[AgentFactory] --> TKF[TaskFactory] --> NF[NodeFactory] --> WF[WorkflowFactory]
    WF --> G[(LangGraph StateGraph)]
    G -->|invoke or stream| S[SSE stream to client]

yaml

# nodes (src/nodes/nodes_registry/nodes.yaml)
pdf_text_extraction:
  type: crew
  agents: [pdf_text_extract_agent]
  tasks: [pdf_text_extract_task]
  inputs: {pdf_file_path: str}
  state_fields: {pdf_text_extract_output: str}
  output_field: pdf_text_extract_output

interview_qn_generation:
  type: crew
  agents: [interview_question_generation_agent]
  tasks: [interview_question_generation_task]
  state_fields: {interview_qns_output: str}
  output_field: interview_qns_output

send_email:
  type: crew
  agents: [email_send_agent]
  tasks: [email_send_task]
  inputs: {recipient: str}
  state_fields: {mail_status_output: str}
  output_field: mail_status_output

yaml

# workflow (sent in the request payload or defined under src/templates/)
dynamic_workflow:
  workflow_type: conditional
  nodes: [{name: pdf_text_extraction}, {name: interview_qn_generation}, {name: send_email}, {name: stop_execution}]
  conditions:
    - {from_node: pdf_text_extraction, condition: check_node_output,
       paths: {continue: interview_qn_generation, end: stop_execution}}
  edges:
    - {from_node: interview_qn_generation, next_node: send_email}
  entry_point: pdf_text_extraction
  finish_point: send_email

yaml

resume_summary:
  type: ai
  prompt: "Summarise this resume in three bullet points:\n{pdf_text_extract_output}"
  state_fields: {resume_summary: str}
  output_field: resume_summary

bash

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env            # choose the LLM provider and fill in tool keys
python app.py                   # Flask API on :5001

bash

curl -X POST localhost:5001/dynamic -H 'content-type: application/json' \
     -d '{"stream": "true", "payload": { ...workflow config... }}'

Docs & README

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

Self-declaredGITHUB REPOS

Docs source

GITHUB REPOS

Editorial quality

ready

Config-driven LangGraph/CrewAI workflow engine with YAML-registered agents, tasks and tools. Demo: interview questions generated from a resume and emailed. SmartHire: config-driven agent workflows A small workflow engine on top of **LangGraph** and **CrewAI** where agents, tasks, tools, nodes and the graph itself are declared in YAML and assembled by factories at request time. The shipped example turns a candidate's resume into interview questions and emails them, streaming progress to a UI. The point of the project is the engine, not the demo: adding a new workflow mea

Full README

SmartHire: config-driven agent workflows

A small workflow engine on top of LangGraph and CrewAI where agents, tasks, tools, nodes and the graph itself are declared in YAML and assembled by factories at request time. The shipped example turns a candidate's resume into interview questions and emails them, streaming progress to a UI.

The point of the project is the engine, not the demo: adding a new workflow means editing configuration, not Python.

Upload UI

How a request becomes a graph

flowchart LR
    R[POST /dynamic<br/>payload: workflow config] --> A[WorkflowAdapter<br/>validate + normalise]
    A --> O[DynamicWorkflowOrchestrator]
    O --> TF[ToolFactory] --> AF[AgentFactory] --> TKF[TaskFactory] --> NF[NodeFactory] --> WF[WorkflowFactory]
    WF --> G[(LangGraph StateGraph)]
    G -->|invoke or stream| S[SSE stream to client]
  1. Adapter (src/adapters/) checks the request shape and merges it with the registries under src/*/**_registry/*.yaml.
  2. Factories build CrewAI Tool, Agent and Task objects from their YAML entries. Nothing is instantiated until a node needs it.
  3. Nodes (src/nodes/) wrap execution units:
    • crew — a CrewAI crew of one or more agents and tasks; the crew's raw output is written to the node's output_field (parsed as JSON when the field is typed dict).
    • ai — a single LLM call from a prompt template rendered with the current state. For classification, extraction or rewriting steps that do not need a crew.
    • functional — plain Python handlers under src/handlers/nodes/, used for conditions and glue.
  4. Workflows (src/workflows/components/) turn node lists into a StateGraph:
    • linear — edges as from_node -> next_node.
    • parallel — an edge whose next_node is a list fans out; one whose from_node is a list fans in, and LangGraph waits for every branch.
    • conditional — conditions route on the return value of a functional handler (for example check_node_output → continue / end).
  5. State is a TypedDict built at runtime from the state_fields of the nodes actually in the workflow (BaseWorkflow.build_state), plus bookkeeping keys (current node, previous node, last output). Every field uses a last-writer-wins reducer and every node is wrapped so it returns only the keys it changed, which is what lets parallel branches merge instead of overwriting each other.

Example: the interview-question workflow

# nodes (src/nodes/nodes_registry/nodes.yaml)
pdf_text_extraction:
  type: crew
  agents: [pdf_text_extract_agent]
  tasks: [pdf_text_extract_task]
  inputs: {pdf_file_path: str}
  state_fields: {pdf_text_extract_output: str}
  output_field: pdf_text_extract_output

interview_qn_generation:
  type: crew
  agents: [interview_question_generation_agent]
  tasks: [interview_question_generation_task]
  state_fields: {interview_qns_output: str}
  output_field: interview_qns_output

send_email:
  type: crew
  agents: [email_send_agent]
  tasks: [email_send_task]
  inputs: {recipient: str}
  state_fields: {mail_status_output: str}
  output_field: mail_status_output
# workflow (sent in the request payload or defined under src/templates/)
dynamic_workflow:
  workflow_type: conditional
  nodes: [{name: pdf_text_extraction}, {name: interview_qn_generation}, {name: send_email}, {name: stop_execution}]
  conditions:
    - {from_node: pdf_text_extraction, condition: check_node_output,
       paths: {continue: interview_qn_generation, end: stop_execution}}
  edges:
    - {from_node: interview_qn_generation, next_node: send_email}
  entry_point: pdf_text_extraction
  finish_point: send_email

An ai node that summarises the resume before question generation would be:

resume_summary:
  type: ai
  prompt: "Summarise this resume in three bullet points:\n{pdf_text_extract_output}"
  state_fields: {resume_summary: str}
  output_field: resume_summary

Running it

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env            # choose the LLM provider and fill in tool keys
python app.py                   # Flask API on :5001
curl -X POST localhost:5001/dynamic -H 'content-type: application/json' \
     -d '{"stream": "true", "payload": { ...workflow config... }}'

LLM_PROVIDER selects the model for every agent and AI node: ollama (default, local), openai, or groq. Set WORKFLOW_GRAPH_IMAGE=graph.png to have each compiled graph rendered as a PNG.

Tests

pytest -q          # 11 tests, no model or network needed

The tests exercise the engine with fake nodes: state construction from node config, node-type dispatch, prompt rendering in ai nodes, and linear, parallel (fan-out and fan-in) and conditional graph execution end to end through LangGraph. CI runs them on every push.

Screenshots and demo

| | | |---|---| | Text extraction | Text Extraction | | Question generation | Interview Qns | | Email agent | Email Agent |

Screen recordings: Google Drive or the demo-videos release.

Project structure

app.py                         Flask entry point
config/, config_mgr/           application config loading
constants/                     state and config key names
src/
├── adapters/                  request → normalised workflow config
├── agents/  tasks/  tools/    CrewAI factories + YAML registries
├── nodes/                     crew / ai / functional nodes, NodeFactory
├── handlers/nodes/            functional handlers (conditions, stop)
├── entities/states/           dynamic TypedDict state builder
├── workflows/                 linear / parallel / conditional graphs, WorkflowFactory
├── managers/  builders/       email (SendGrid) and template helpers
├── services/  api/            Flask service and blueprint
└── templates/dynamic/         example workflow templates
tests/                         engine tests with fake nodes

Limitations

  • Crew nodes return raw text; structured outputs depend on the prompt asking for JSON and state_fields typing the field as dict.
  • No retry or timeout policy per node yet; a hung tool call hangs the workflow.
  • Parallel branches must write distinct output fields; a shared key is last-writer-wins by design.

Contract & API

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

MissingGITHUB REPOS

Contract coverage

Status

missing

Auth

None

Streaming

No

Data region

Unspecified

Protocol support

OpenClaw: 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/crewai-kiran-bal-smarthire-agent-workflows/snapshot"
curl -s "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/contract"
curl -s "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/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
Github ReposUpdated 4h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW
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/crewai-kiran-bal-smarthire-agent-workflows/snapshot",
    "contractUrl": "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/contract",
    "trustUrl": "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/trust"
  },
  "curlExamples": [
    "curl -s \"https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/snapshot\"",
    "curl -s \"https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/contract\"",
    "curl -s \"https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/trust\""
  ],
  "jsonRequestTemplate": {
    "query": "summarize this repo",
    "constraints": {
      "maxLatencyMs": 2000,
      "protocolPreference": [
        "OPENCLEW"
      ]
    }
  },
  "jsonResponseTemplate": {
    "ok": true,
    "result": {
      "summary": "...",
      "confidence": 0.9
    },
    "meta": {
      "source": "GITHUB_REPOS",
      "generatedAt": "2026-10-09T22:42:47.313Z"
    }
  },
  "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": "OPENCLEW",
      "type": "protocol",
      "support": "unknown",
      "confidenceSource": "profile",
      "notes": "Listed on profile"
    },
    {
      "key": "crewai",
      "type": "capability",
      "support": "supported",
      "confidenceSource": "profile",
      "notes": "Declared in agent profile metadata"
    },
    {
      "key": "multi-agent",
      "type": "capability",
      "support": "supported",
      "confidenceSource": "profile",
      "notes": "Declared in agent profile metadata"
    }
  ],
  "flattenedTokens": "protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"
}

Facts JSON

[
  {
    "factKey": "vendor",
    "category": "vendor",
    "label": "Vendor",
    "value": "Kiran Bal",
    "href": "https://github.com/kiran-bal/smarthire-agent-workflows",
    "sourceUrl": "https://github.com/kiran-bal/smarthire-agent-workflows",
    "sourceType": "profile",
    "confidence": "medium",
    "observedAt": "2026-10-09T12:50:38.261Z",
    "isPublic": true
  },
  {
    "factKey": "protocols",
    "category": "compatibility",
    "label": "Protocol compatibility",
    "value": "OpenClaw",
    "href": "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/contract",
    "sourceUrl": "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/contract",
    "sourceType": "contract",
    "confidence": "medium",
    "observedAt": "2026-10-09T12:50:38.261Z",
    "isPublic": true
  },
  {
    "factKey": "docs_crawl",
    "category": "integration",
    "label": "Crawlable docs",
    "value": "6 indexed pages on 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
  },
  {
    "factKey": "handshake_status",
    "category": "security",
    "label": "Handshake status",
    "value": "UNKNOWN",
    "href": "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/trust",
    "sourceUrl": "https://www.xpersona.co/api/v1/agents/crewai-kiran-bal-smarthire-agent-workflows/trust",
    "sourceType": "trust",
    "confidence": "medium",
    "observedAt": null,
    "isPublic": true
  }
]

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
  }
]

Sponsored

Ads related to smarthire-agent-workflows and adjacent AI workflows.