github Python analyzed b1dd115

JoelJohnsonThomas/ForgeFlow

github

Production-grade multi-agent workflow orchestrator built with LangGraph, MCP (Model Context Protocol), A2A protocol, and PostgreSQL+pgvector. Features supervisor hub-and-spoke routing, human-in-the-loop approvals, semantic memory, circuit breakers, LLM-as-judge evaluation, and a real-time Streamlit observability dashboard.

maintainer
JoelJohnsonThomas
license
Apache-2.0
first seen
2026-06-30
last seen
2026-07-02
releases · 30d
0
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged committed secret in JoelJohnsonThomas/ForgeFlow
capabilities 63 tools
transport stdio · streamable-http counts 63 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • create_lead
  • describe_image
  • draft_email
  • extract_pdf
  • fetch_enrichment
  • get_lead
  • github_close_issue
  • github_comment_issue
  • github_create_issue
  • github_get_repo
  • github_review_pr
  • github_search_issues
  • hubspot_add_note
  • hubspot_create_company
  • hubspot_create_contact
  • hubspot_create_deal
  • hubspot_create_deal_idempotent
  • hubspot_search_contacts
  • hubspot_update_deal_stage
  • hubspot_upsert_company
  • hubspot_upsert_contact
  • jira_comment_issue
  • jira_create_issue
  • jira_get_issue
  • jira_search
  • jira_transition_issue
  • msgraph_create_event
  • msgraph_get_user
  • msgraph_list_messages
  • msgraph_post_adaptive_card
  • msgraph_post_teams_chat
  • msgraph_post_teams_message
  • msgraph_send_mail
  • query_db
  • quickbooks_create_customer
  • quickbooks_create_invoice
  • quickbooks_create_journal_entry
  • quickbooks_get_customer
  • quickbooks_list_accounts
  • quickbooks_query
  • salesforce_create_lead
  • salesforce_create_opportunity
  • salesforce_get_lead
  • salesforce_query
  • salesforce_update_lead_status
  • sap_get_business_partner
  • sap_get_sales_order
  • sap_get_supplier_invoice
  • sap_query_entity_set
  • sap_search_business_partners
  • sap_search_sales_orders
  • sap_search_supplier_invoices
  • scrape_url
  • send_email
  • servicenow_create_incident
  • servicenow_get_incident
  • servicenow_resolve_incident
  • servicenow_search_incidents
  • servicenow_update_incident_state
  • slack_post_message
  • slack_send_approval_card
  • update_lead
  • web_search
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit b1dd115 · analyzer v28 · 3d ago

danger signals1

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 258

filesystem 4

  • fs JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/evaluation/regression.py :20 from pathlib import Path
  • fs JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/marketplace/registry.py :20 from pathlib import Path
  • fs JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/multimodal/images.py :23 from pathlib import Path
  • fs JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/multimodal/pdf.py :17 from pathlib import Path

network 13

  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/app.py :11 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/1_overview.py :5 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/2_traces.py :5 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/3_cost.py :5 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/4_evaluation.py :5 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/5_audit.py :16 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/6_marketplace.py :7 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/a2a/transport.py :14 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/connectors/base.py :28 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/connectors/sap.py :35 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/resilience/retry.py :9 import httpx
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/security/ssrf_guard.py :30 import socket
  • net JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/telemetry/emitter.py :96 import httpx

secrets 3

  • secrets JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/app.py :22 _TOKEN = os.environ.get("FORGEFLOW_TOKEN", "")
  • secrets JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/graph/builder.py :69 os.environ["LANGCHAIN_API_KEY"] = settings.langchain_api_key.get_secret_value()
  • secrets JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/observability/tracing_provider.py :64 secret_key = os.environ.get("LANGFUSE_SECRET_KEY", "")

database 21

  • db JoelJohnsonThomas-ForgeFlow-b1dd115/alembic/env.py :6 from sqlalchemy import engine_from_config, pool
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/alembic/versions/001_initial_schema.py :8 import sqlalchemy as sa
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/dependencies.py :5 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/approvals.py :9 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/audit.py :16 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/auth.py :21 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/memory.py :16 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/metrics.py :5 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/workflows.py :11 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/api/routers/workspaces.py :15 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/auth/membership.py :18 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/auth/tokens.py :22 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/auth/users.py :11 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/database.py :7 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/events/redis_consumer.py :103 import redis.asyncio as redis # type: ignore[import-untyped]
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/jobs/escalation.py :28 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/memory/memory_manager.py :12 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/memory/pgvector_store.py :15 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/memory/relational_store.py :7 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/observability/metrics_store.py :7 import asyncpg
  • db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/observability/prometheus.py :25 import asyncpg

tool registrations 63

  • create_lead JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/crm_tools.py :19
  • update_lead JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/crm_tools.py :56
  • get_lead JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/crm_tools.py :96
  • fetch_enrichment JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/data_tools.py :30
  • query_db JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/data_tools.py :53
  • draft_email JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/email_tools.py :19
  • send_email JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/email_tools.py :65
  • github_create_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/github_tools.py :24
  • github_comment_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/github_tools.py :37
  • github_close_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/github_tools.py :45
  • github_search_issues JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/github_tools.py :51
  • github_review_pr JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/github_tools.py :62
  • github_get_repo JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/github_tools.py :74
  • hubspot_create_contact JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :19
  • hubspot_upsert_contact JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :37
  • hubspot_search_contacts JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :52
  • hubspot_create_company JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :58
  • hubspot_upsert_company JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :69
  • hubspot_create_deal JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :80
  • hubspot_create_deal_idempotent JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :104
  • hubspot_update_deal_stage JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :131
  • hubspot_add_note JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/hubspot_tools.py :137
  • jira_create_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/jira_tools.py :19
  • jira_get_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/jira_tools.py :39
  • jira_comment_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/jira_tools.py :45
  • jira_transition_issue JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/jira_tools.py :51
  • jira_search JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/jira_tools.py :57
  • msgraph_post_teams_message JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :20
  • msgraph_post_teams_chat JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :33
  • msgraph_post_adaptive_card JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :43
  • msgraph_send_mail JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :57
  • msgraph_list_messages JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :77
  • msgraph_create_event JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :90
  • msgraph_get_user JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/msgraph_tools.py :115
  • extract_pdf JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/multimodal_tools.py :14
  • describe_image JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/multimodal_tools.py :52
  • quickbooks_query JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/quickbooks_tools.py :20
  • quickbooks_create_customer JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/quickbooks_tools.py :31
  • quickbooks_get_customer JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/quickbooks_tools.py :45
  • quickbooks_create_invoice JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/quickbooks_tools.py :51
  • quickbooks_list_accounts JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/quickbooks_tools.py :73
  • quickbooks_create_journal_entry JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/quickbooks_tools.py :79
  • salesforce_create_lead JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/salesforce_tools.py :19
  • salesforce_update_lead_status JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/salesforce_tools.py :39
  • salesforce_get_lead JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/salesforce_tools.py :45
  • salesforce_create_opportunity JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/salesforce_tools.py :51
  • salesforce_query JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/salesforce_tools.py :69
  • sap_get_sales_order JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :19
  • sap_search_sales_orders JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :25
  • sap_get_business_partner JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :38
  • sap_search_business_partners JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :44
  • sap_get_supplier_invoice JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :52
  • sap_search_supplier_invoices JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :58
  • sap_query_entity_set JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/sap_tools.py :66
  • web_search JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/search_tools.py :17
  • scrape_url JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/search_tools.py :59
  • servicenow_create_incident JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/servicenow_tools.py :19
  • servicenow_get_incident JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/servicenow_tools.py :39
  • servicenow_update_incident_state JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/servicenow_tools.py :45
  • servicenow_resolve_incident JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/servicenow_tools.py :58
  • servicenow_search_incidents JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/servicenow_tools.py :68
  • slack_post_message JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/slack_tools.py :21
  • slack_send_approval_card JoelJohnsonThomas-ForgeFlow-b1dd115/forgeflow/mcp/server/tools/slack_tools.py :40

declared dependencies 25

  • fastmcp@>=2.0.0
  • langgraph@>=0.2.60
  • langgraph-checkpoint-postgres@>=2.0.0
  • langchain-core@>=0.3.28
  • langchain-openai@>=0.3.0
  • langchain-community@>=0.3.0
  • langchain-mcp-adapters@>=0.1.0
  • fastapi@>=0.115.0
  • pytest@>=8.3.0
  • pytest-asyncio@>=0.24.0
  • pytest-cov@>=6.0.0
  • httpx@>=0.28.0
  • ruff@>=0.8.0
  • mypy@>=1.13.0
  • types-beautifulsoup4@*
  • testrelic-pytest@>=0.6.4
  • langchain-ollama@>=0.2.0
  • langchain-anthropic@>=0.3.0
  • opentelemetry-api@>=1.27.0
  • opentelemetry-sdk@>=1.27.0
  • opentelemetry-exporter-otlp-proto-http@>=1.27.0
  • opentelemetry-instrumentation-fastapi@>=0.48b0
  • pypdf@>=4.3.0
  • redis@>=5.0.0
  • aiokafka@>=0.11.0

perm:untrusted 4

  • untrusted JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/1_overview.py :18 return httpx.get(f"{API_URL}/metrics/runs?limit=50", timeout=5).json()
  • untrusted JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/2_traces.py :18 return httpx.get(f"{API_URL}/metrics/runs?limit=30", timeout=5).json()
  • untrusted JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/3_cost.py :22 return httpx.get(f"{API_URL}{path}", params=params or {}, timeout=8).json()
  • untrusted JoelJohnsonThomas-ForgeFlow-b1dd115/dashboard/pages/4_evaluation.py :18 return httpx.get(f"{API_URL}/metrics/evaluation", timeout=5).json()