AutoSwarm Shadow Adapter

Pauses AutoSwarm agentic DAGs for human sign-off or remote GPU work without timeouts or stalling parallel branches.

Stars
★ 2.8k
Last updated
2d ago
License
MIT
Primary language
Python

At a glance

How it runs
Library / SDKSelf-hosted serviceCLI
Works with
Portable with changesOpenAI API · Claude API
Cost
Free software; you pay for model usage
Setup effort
Medium · a few setup steps
You'll need
Python 3.10+AutoSwarm (opc) coreOllama (optional, for local silicon workers)Shell / CLINetwork accessLocal filesystem
Typical use
A company runs multi-agent AutoSwarm workflows but needs real people to sign off on legal review or architecture decisions
Not a fit if
  • Teams without an OpenOPC/AutoSwarm DAG engine to plug into
  • Teams wanting a managed hosted service instead of self-hosting

What does this agent do, and when should you use it?

AutoSwarm-Shadow-Adapter is an external agent adapter plugin for the AutoSwarm (OpenOPC) agentic DAG runtime, registered through ADAPTER_CLASSES["shadow"] with zero modifications to the core repository. It intercepts tasks for roles configured with preferred_external_agent: shadow, parks them in an isolated SQLite WAL database (shadow_tasks.db) in under 50ms, and returns AWAITING_HUMAN so worker threads are released immediately. Human reviewers claim work through a React 19 portal on top of a FastAPI REST API (shadow-serve, port 8800), where they read generated markdown briefs, inspect inherited upstream artifacts, and upload up to 5 files per submission. Remote GPU machines can join as silicon workers via the shadow-worker daemon, polling by role and running local inference through Ollama, Anthropic, OpenAI, or a custom Python handler. When a deliverable is submitted, OpcResumeRepository writes back to delegation_work_items.phase in the host store.db, waking downstream DAG nodes through AutoSwarm's native phase hooks.

On the engine side, ShadowModeAdapter parses the project goal, builds a markdown task brief with TaskBriefBuilder, persists the record to shadow_tasks.db, and returns AWAITING_HUMAN; ancestor deliverables are packaged as context. On the portal side, the FastAPI server (shadow-serve --port 8800) exposes JWT+bcrypt-authenticated /api/v1 endpoints, and a React 19 TaskWorkspace lets humans claim pending tasks, write solution notes, and attach files that are indexed into CorporateArtifacts with SHA-256 hashes. On the silicon side, shadow-worker logs in with --server-url, --role, --provider and --model, polls the queue, and runs local inference; ShadowWorker(custom_handler=...) embeds the same loop in custom Python pipelines. Submission triggers OpcResumeRepository to update delegation_work_items.phase in the host store.db, so AutoSwarm's native phase hooks resume downstream DAG nodes and pass artifacts forward; a rework_requested transition supports return-for-revision loops.

  1. A company runs multi-agent AutoSwarm workflows but needs real people to sign off on legal review or architecture decisions
  2. A freelancer juggling several client contracts routes execution to remote silicon nodes and approves deliverables asynchronously
  3. Finance, healthcare or legal teams need immutable, attributed audit trails for SOC 2, ISO 27001 or GDPR human-oversight requirements
  4. An enterprise has spare GPU workstations or cloud nodes and wants to plug them in as BYOC inference workers without touching the central engine
  5. A role is vacant or overloaded, so AI completes most preliminary work and only the final decision is routed to an available manager

How do you install or deploy this agent?

Requires Python 3.10+ and a host project where AutoSwarm (opc) is installed and runnable.

pip install AutoSwarm-shadow-adapter

A JWT signing secret (documented as at least 32 characters) is mandatory:

export SHADOW_JWT_SECRET="a-very-long-secret-at-least-32-chars"

Optional variables include SHADOW_DB_PATH, SHADOW_OPC_STORE_PATH, SHADOW_UPLOAD_DIR, SHADOW_MAX_FILES_PER_SUBMISSION, SHADOW_MAX_FILE_SIZE_MB, SHADOW_MAX_TOTAL_UPLOAD_SIZE_MB and SHADOW_API_PORT.

How do you use this agent?

Register the adapter and start the portal in a background thread from your entry point:

from opc.layer3_agent.adapters.registry import ADAPTER_CLASSES
from shadow_adapter import ShadowModeAdapter, start_server_in_thread

ADAPTER_CLASSES["shadow"] = ShadowModeAdapter
start_server_in_thread(port=8800)

Or run it as a sidecar from a separate terminal:

shadow-serve --port 8800

Point human-backed roles at the shadow adapter in your company config:

roles:
  legal_counsel:
    title: "Human Legal Counsel"
    execution_strategy: external
    preferred_external_agent: shadow

  senior_architect:
    title: "Human Senior Architect"
    execution_strategy: external
    preferred_external_agent: shadow

Join remote compute nodes as silicon workers:

shadow-worker \
  --server-url "http://192.168.1.100:8800" \
  --username "dev_node_1" \
  --password "secure_pass_1" \
  --role "senior_developer" \
  --provider "ollama" \
  --model "llama3.3:70b"

Reviewers then open http://localhost:8800 to claim tasks and submit deliverables; the REST base is http://localhost:8800/api/v1.

What are this agent's strengths and limitations?

Pros
  • Sub-50ms non-blocking intercept parks tasks in an isolated SQLite WAL store, so human response times can be arbitrarily long without engine timeouts
  • Registers as ADAPTER_CLASSES["shadow"] without modifying the AutoSwarm core repository
  • One REST surface serves both the React 19 human portal and remote shadow-worker nodes across Ollama, Anthropic, OpenAI or custom handlers
  • Submission writes back to delegation_work_items.phase in the host store.db, reusing AutoSwarm's native state machine to resume downstream nodes
  • Built-in CorporateArtifacts registry with SHA-256 hashes and hierarchy-driven context injection gives downstream roles the exact upstream files
Limitations
  • Hard-coupled to AutoSwarm (opc): adapter registry, store.db schema and host runtime, so it is unusable outside that ecosystem
  • Deployment requires a JWT secret, host store.db path, upload directory and multi-user accounts — not a one-command setup
  • Documented as a v0.1.0 pre-release, and repository naming is inconsistent (shadow-adapter vs Shadow-Adapter)
  • Default upload limits (10MB per file, 5 files, 50MB total) may be too small for large deliverables
  • Several architecture deep-dive links resolve to search pages rather than files, so some specs must be reconstructed

How does this agent compare with similar options?

Key facts side by side with the most closely related agents.

Agent Source review Form / cost Stars Updated Language Full support on
AutoSwarm Shadow Adapter This agent 31 · Major gaps Library / SDKFree + model costs ★ 2.8k 2d ago Python OpenAI API · Claude API
Auto Browser 62 · Some gaps Self-hosted serviceFree + model costs ★ 914 3d ago Python OpenAI API · Claude API
AuditPilot 60 · Some gaps Web appFree + model costs ★ 1.2k 2mo ago Python —
Agentspan 62 · Some gaps CLIFree + model costs ★ 499 27d ago TypeScript OpenAI API · Claude API

How does FollowAgents rate this agent?

FollowAgents source review · FARS-2.1
Major gaps
31/ 100 5-point scale 1.6 / 5
Trust 8/29
Reliability 5/14
Adaptability 8/18
Convention 4/18
Effectiveness 4/13
Verifiability 2/8
Why each dimension lost points
Trust8 / 29 · 1.4/5

README describes JWT+bcrypt auth, upload size caps, SHA-256 integrity hashes, and audit timelines as design intent; however the repository only provides README, LICENSE, pyproject, CI, and test files, with no actual implementation code (shadow_adapter package, security.py, upload.py, etc.) to verify. Thus least_privilege, user_confirmation, data_flow_transparency, sensitive_data_handling, dependency_security, and external_effects each score 1 (asserted without implementation support). Rollback scores 0: README claims store.db state recovery but provides no mechanism to undo submitted deliverables or restore overwritten state. Source_attribution scores 1: LICENSE and pyproject declare MIT and authors, but README links point to google.com searches rather than real docs, weakening attribution credibility.

Reliability5 / 14 · 1.8/5

Test files (conftest.py, mock_openopc_engine.py) show full lifecycle assertions against a mock engine, and CI configures a multi-version matrix, indicating some self-consistency; but implementation code is absent, so tests cannot be verified to pass, dependency availability (opc>=0.1.0 is optional) is unconfirmed, and failure message handling has no source to inspect—all three score 1.

Adaptability8 / 18 · 2.2/5

README clearly lists target audiences (freelancers, enterprise compliance, BYOC remote compute) and multiple scenarios, so audience_and_scenarios scores 2; but capability boundaries (which DAG features are unsupported), trigger precision (matching rules for preferred_external_agent: shadow), and environment fit (only Python 3.10+, SQLite WAL mentioned; no OS/network/firewall requirements) are only summarized, scoring 1 each.

Convention4 / 18 · 1.1/5

README is well-structured with install steps and examples, scoring 1; but naming stability is problematic: package name is AutoSwarm-shadow-adapter in README, openopc-shadow-adapter in pyproject, and repo name AutoSwarm-Shadow-Adapter, with README links pointing to google.com searches—naming and links are unstable, scoring 0. Known limitations are entirely absent, scoring 0. LICENSE is full MIT text, scoring 2. Version numbers conflict (README v0.1.0 vs pyproject 1.0.0) and no CHANGELOG file exists, scoring 0. Maintenance responsibility: author and issue link present but publisher identity unverified, scoring 1.

Effectiveness4 / 13 · 1.5/5

README describes output usability (deliverables, attachments, audit timeline) and marginal value (non-blocking HITL, BYOC), but lacks implementation code and real run evidence, so whether outputs are directly usable, marginal value holds, and cost-benefit is reasonable cannot be confirmed—all three score 1.

Verifiability2 / 8 · 1.3/5

claim_traceability scores 0: multiple README links point to google.com searches rather than real docs (docs/architecture.md etc.), making key claims untraceable. cross_source_corroboration scores 1: test files somewhat correspond to README descriptions, but implementation code is missing, limiting cross-validation. fact_inference_separation scores 1: README mixes factual descriptions with marketing inferences (e.g., '5x output', '90% preliminary work') without clear separation.

Risks and how to mitigate them
  • Not found in source: rollback or recovery pathBack up first, or work on a git branch or snapshot, so its changes can be undone.
  • Repository lacks actual implementation code (shadow_adapter package, security.py, upload.py, etc.); only README, tests, and config are present, so security and functional claims cannot be verified.
  • Multiple README documentation links point to google.com searches rather than real files, making key architecture and database schema claims untraceable.
  • Package name and version are inconsistent (README v0.1.0 / pyproject 1.0.0; AutoSwarm-shadow-adapter / openopc-shadow-adapter), posing naming and release stability risks.
  • Known limitations and CHANGELOG are absent, rollback mechanism is unspecified, and publisher identity is unverified.
Evidence confidence: Low Reviewed Oct 22, 2026 Reviewed revision 69d27ddcd626
See the full review method →

FAQ

What happens if a human takes hours to respond — will the DAG time out?
No. The task is persisted to the separate shadow_tasks.db and AWAITING_HUMAN is returned immediately, releasing the execution thread while parallel branches keep running; downstream nodes only resume when the deliverable is written back to the host store.db.
Do I have to use a hosted model provider?
No. shadow-worker accepts --provider ollama for local GPU inference, or anthropic/openai, and ShadowWorker(custom_handler=...) lets you plug in a private model or database.
How are remote nodes authenticated and where does data live?
The portal uses JWT (secret SHADOW_JWT_SECRET, at least 32 characters) plus bcrypt, and workers log in with --username/--password. Tasks and attachments stay in your local shadow_tasks.db and shadow_uploads directory, with artifact hashes in CorporateArtifacts.
Can I use it in a project that does not run OpenOPC/AutoSwarm?
No. It hooks into AutoSwarm's adapter registry and writes back to its store.db, so a runnable opc host environment is required.
View on GitHub ↗ Install ↓

Related agents