Skip to main content

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.

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.

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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