- name
- agents-cli-langchain
- description
- Use when working in this project — adding tools, editing the agent, running, evaluating, serving or deploying it — or when guidance mentions ADK, LlmAgent, google.adk, adk web, or an ADK runner. This project is LangChain/LangGraph scaffolded by agents-cli, so ADK-specific instructions do not apply.
# LangChain project (agents-cli)
The agent is a compiled LangGraph graph exported as `root_agent` from
`app/agent.py`. There is no `google.adk` dependency and no ADK runner. Other
`google-agents-cli-*` skills assume ADK; where they describe the agent itself,
this skill wins.
**Experimental, and Agent Runtime is degraded.** Deploy to cloud_run or gke. On
agent_runtime the app serves, but `publish gemini-enterprise` is refused, the Console
playground cannot invoke it, and Console sessions/traces stay empty: all three want the
ADK `reasoning_engine` routes this project does not serve. Say so before recommending it.
## What ADK guidance maps to here
| ADK guidance | This project |
|---|---|
| `LlmAgent`, `Agent`, `google.adk.tools` | `langchain.agents.create_agent`, plain Python functions as tools, or any compiled `StateGraph` |
| `adk web`, `adk run` | `agents-cli playground` (runs `langgraph dev`) |
| ADK runner behind `agents-cli run` | `agents-cli run` invokes the graph in-process |
| `agents-cli eval dataset synthesize`, `eval optimize` | Unavailable: both drive the agent through ADK. The command says so and exits |
| Add an `LlmAgent` in `app/agent.py` | Change the graph in `app/agent.py`; keep the name `root_agent` |
## The contract
Keep these two, whatever you build inside them:
- `app/agent.py` exports `root_agent`, a compiled graph with `messages` state.
Callers only use `root_agent.invoke({"messages": [...]})` and
`root_agent.astream(stream_mode="messages")`.
- `app/fast_api_app.py` exposes `app`. Every deployment target runs
`uvicorn app.fast_api_app:app`.
Adding a tool means writing a typed function with a docstring and passing it in
`tools=[...]`. Switching frameworks (LangGraph `StateGraph`,
`deepagents.create_deep_agent`) means rewriting `app/agent.py` only. Pre-1.0
LangChain (LCEL chains, `AgentExecutor`) is not supported: not compiled graphs.
## Commands
```bash
agents-cli install # uv sync
agents-cli playground # langgraph dev, port 8080
agents-cli run "hello" # invoke the graph in-process
agents-cli eval generate --dataset tests/eval/datasets/basic-dataset.json -o tests/eval/output/
agents-cli eval grade --traces tests/eval/output/<dataset>.json --config tests/eval/eval_config.yaml
agents-cli deploy # unchanged
agents-cli scaffold enhance -d cloud_run --cicd-runner github_actions # add infra later
```
`playground`, `run` and `eval generate` are overridden by
`agents-cli-extension.yaml` at the project root. Prefix any command with
`AGENTS_CLI_DISABLE_OVERRIDES=1` to reach the built-in instead.
## Serving
A2A only: JSON-RPC at `POST /a2a/app`, card at
`/a2a/app/.well-known/agent-card.json`, health at `/health`. Token streaming
comes from `astream(stream_mode="messages")`.
## Common mistakes
- Renaming `root_agent` or `app`, which breaks `run`, eval and deploy.
- Reaching for `eval dataset synthesize` or `eval optimize`: they need ADK.
Write cases into `tests/eval/datasets/` and use `eval generate` + `eval grade`.
- Expecting `/run_sse` or ADK session routes; this server serves A2A.
- Running `agents-cli run --url ...` against a deployed agent without
`AGENTS_CLI_DISABLE_OVERRIDES=1`, which invokes the local graph instead.
- `run` and `eval generate` call Gemini through Vertex AI with ADC, so they need
`GOOGLE_CLOUD_PROJECT` and credentials, or `GOOGLE_API_KEY` / `GEMINI_API_KEY`
in `.env`.
## References
- `references/langchain.md` — framework contract and per-command detail.
- `references/samples.md` — agents worth copying from, by shape.
View on GitHub