Skill v1.0.0
Trusted Publisher100/100version: "1.0.0" 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.pyexportsroot_agent, a compiled graph withmessagesstate.
Callers only use root_agent.invoke({"messages": [...]}) and root_agent.astream(stream_mode="messages").
app/fast_api_app.pyexposesapp. 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
agents-cli install # uv syncagents-cli playground # langgraph dev, port 8080agents-cli run "hello" # invoke the graph in-processagents-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.yamlagents-cli deploy # unchangedagents-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_agentorapp, which breaksrun, eval and deploy. - Reaching for
eval dataset synthesizeoreval optimize: they need ADK.
Write cases into tests/eval/datasets/ and use eval generate + eval grade.
- Expecting
/run_sseor 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.
runandeval generatecall 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.