Skip to main content

Implicit state machine middleware for LangChain v1 agents. Ordered task pipelines with per-task tool scoping, prompt injection, and composable validation.

Project description

langchain-task-steering

Implicit state-machine middleware for LangChain v1 agents. Define ordered task pipelines with per-task tool scoping, dynamic prompt injection, and composable validation — all as a drop-in AgentMiddleware.

Also available for TypeScript/JavaScript.

PENDING ──> IN_PROGRESS ──> COMPLETE

The model drives its own transitions by calling update_task_status. The middleware enforces ordering, scopes tools, injects the active task's instruction into the system prompt, and gates completion via pluggable validators.

When to use this

Scenario task-steering LangGraph explicit workflows
Linear task pipeline (A then B then C) Best fit Verbose — one node + edges per task
Per-task tool scoping Built-in Manual — separate tool lists per node
Dynamic tasks from config / DB Easy — tasks are data Hard — graph is compiled at build time
Multiple workflows, agent-driven activation Built-inWorkflowSteeringMiddleware Manual — routing logic + subgraphs
Human-in-the-loop within tasks Built-ininterrupt() in tools Built-ininterrupt() per node
Branching / parallel execution Not supported Built-in — edges + Send()
Complex orchestration with retries / cycles Not supported Built-in — conditional edges
Composition with other middleware Native — it's an AgentMiddleware N/A — different abstraction

Rule of thumb: If your tasks are sequential and tool-scoped, use task-steering. If you need agent-driven workflow selection with mixed freeform + structured work, use WorkflowSteeringMiddleware. If you need branching, parallelism, or per-node graph control, use explicit LangGraph workflows.

Install

pip install langchain-task-steering

For development:

git clone https://github.com/edvinhallvaxhiu/langchain-task-steering
cd langchain-task-steering/packages/python
pip install -e ".[dev]"

Requirements

  • Python >= 3.10
  • langchain >= 1.0.0
  • langgraph >= 0.4.0

Quick start

from langchain.agents import create_agent
from langchain.tools import tool
from langchain_task_steering import TaskSteeringMiddleware, Task


@tool
def add_items(items: list[str]) -> str:
    """Add items to the inventory."""
    return f"Added {len(items)} items."


@tool
def categorize(categories: dict[str, list[str]]) -> str:
    """Assign items to categories."""
    return f"Categorized into {len(categories)} groups."


pipeline = TaskSteeringMiddleware(
    tasks=[
        Task(
            name="collect",
            instruction="Collect all relevant items from the user's input.",
            tools=[add_items],
        ),
        Task(
            name="categorize",
            instruction="Organize the collected items into categories.",
            tools=[categorize],
        ),
    ],
)

agent = create_agent(
    model="anthropic:claude-sonnet-4-6",
    middleware=[pipeline],
    system_prompt="You are an inventory assistant.",
)

result = agent.invoke(
    {"messages": [{"role": "user", "content": "I have apples, bolts, and milk."}]}
)

The agent automatically receives an update_task_status tool and sees a task pipeline block in its system prompt. It must complete collect before starting categorize.

Workflow mode

For agents that handle mixed workloads — freeform conversation plus structured workflows — use WorkflowSteeringMiddleware:

from langchain_task_steering import Workflow, WorkflowSteeringMiddleware

middleware = WorkflowSteeringMiddleware(
    workflows=[
        Workflow(
            name="onboarding",
            description="Onboard a new user",
            tasks=[
                Task(name="collect_info", instruction="Collect user details.", tools=[...]),
                Task(name="register", instruction="Register the account.", tools=[...]),
            ],
            global_tools=[ask_user],
        ),
        Workflow(
            name="support",
            description="Handle a support request",
            tasks=[...],
        ),
    ],
)

The agent starts in freeform mode with its full toolset. When a request matches a workflow, it calls activate_workflow("onboarding") to enter the structured pipeline. Tool scoping, prompt injection, and task ordering kick in only while a workflow is active.

See Workflow Mode for full documentation.

Documentation

Topic Description
Task Mode Task lifecycle, hooks, tool scoping, required tasks, configuration
Workflow Mode Dynamic workflow activation, catalog, human-in-the-loop, deactivation
Task Middleware TaskMiddleware hooks, validation, composition, persistent state
Summarization Post-completion message compression (replace and summarize modes)
Skills Task-scoped skills from SKILL.md files
Backend Passthrough Whitelisting backend tools through the filter

Development

cd packages/python
pip install -e ".[dev]"
pytest
pytest --cov=langchain_task_steering

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langchain_task_steering-0.1.8.tar.gz (60.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langchain_task_steering-0.1.8-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file langchain_task_steering-0.1.8.tar.gz.

File metadata

  • Download URL: langchain_task_steering-0.1.8.tar.gz
  • Upload date:
  • Size: 60.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for langchain_task_steering-0.1.8.tar.gz
Algorithm Hash digest
SHA256 441eafbddd15db766eabc4ed729787b983c2d6fae380353b0c5020df3fdd0499
MD5 7c431d9321b3e6dc3020dc789deb6ceb
BLAKE2b-256 804f30bb1215b616d23753bcedf876b1799b3eeab546239b31df543820609c6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for langchain_task_steering-0.1.8.tar.gz:

Publisher: publish.yml on edvinhallvaxhiu/langchain-task-steering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file langchain_task_steering-0.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for langchain_task_steering-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ccd5a60ad9960c6700e87ed8020cc12050e884c059830f4e267c181c5bdf7a4d
MD5 18eaf5db1418299655bdad31096cb33d
BLAKE2b-256 7f05264eb5cce4da57852ab0ddf7cba8b1663f1eaf7ed2206cf2b87a03954d6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for langchain_task_steering-0.1.8-py3-none-any.whl:

Publisher: publish.yml on edvinhallvaxhiu/langchain-task-steering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page