Skip to content

Local dev starter - #56

Merged
AmitAvital1 merged 4 commits into
mainfrom
local-dev-starter
Jul 27, 2026
Merged

Local dev starter#56
AmitAvital1 merged 4 commits into
mainfrom
local-dev-starter

Conversation

@AmitAvital1

Copy link
Copy Markdown
Collaborator

No description provided.

AmitAvital1 and others added 4 commits July 27, 2026 20:14
`make up` builds the image and runs the Enterprise Knowledge Assistant in
containers, so a new developer needs only Docker and one API key.

  make up      engine  -> http://localhost:8090
  make up-ui   chat UI -> http://localhost:8100/demo
  make down

All services run the same `extra:local` image and differ only in the
command, so local runs use the same artifact the release build ships.
They share one network, which keeps `http://127.0.0.1:8765/mcp` in the
example config true inside containers exactly as it is on a laptop.

The example no longer reaches the network: the knowledge agents use the
local mock MCP that already ships with it instead of DeepWiki and
Context7, and CONTEXT7_API_KEY is gone. The full graph is unchanged —
three routers, five agents, five hook points, two local tools, four
resolvers, one protected agent — it just runs offline now.

`make up` validates the config inside the image before starting, and
`make check` fails if `agentctl generate` would write anything, so
committed stubs cannot go stale.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A bank concierge with fake data: two accounts, five transactions, no
database and no internet. It uses every part of the platform with logic
simple enough that nothing distracts from the wiring, so it can be the
first example someone reads.

    concierge                    routes, never answers
    ├── support_router
    │   ├── faq_agent            auto: true, answers from its prompt
    │   └── card_agent           local tool, requires approval
    └── accounts_router
        ├── balance_agent        get_accounts     (bundled MCP)
        └── transactions_agent   get_transactions (bundled MCP)

Three levels of routing, a local Python tool, a bundled MCP server over
the real Streamable HTTP transport, shared resolvers, and four hook
lifecycle points that only log so the sequence is visible.

The model is declared once in `defaults`, so switching provider is a
single edit plus the matching key — the YAML names no vendor anywhere
else.

Read-only agents set `auto: true`; card_agent changes state and so
pauses for approval, which shows both behaviours in one system.

Runs with `make up EXAMPLE=examples/starter` or directly with
`agentctl chat --config`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The local-dev work had rewritten the flagship example to drop its remote
MCPs, rename a hook and relax its credential check. That was never the
goal — examples/starter now covers the "runs with one key, no internet"
case, so the flagship goes back to demonstrating remote and
authenticated MCPs as before.

Restored to origin/main:
  examples/enterprise-knowledge-assistant/agents.yaml
  examples/enterprise-knowledge-assistant/plugins/hooks/research_hooks.py
  tests/cli/test_validate_command.py
  tests/runtime/hooks/test_enterprise_knowledge_assistant_research_hooks.py

`make up` now defaults to examples/starter, which needs one API key and
no network; the flagship still runs with
EXAMPLE=examples/enterprise-knowledge-assistant. `make validate` and the
generate drift check now cover every example rather than just one, so
neither can rot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ments

The example now runs with no paid API key: provider `openai` pointed at a
local Ollama server through the OpenAI-compatible API. `.env.example`
ships working defaults, including host.docker.internal so the containers
reach Ollama on the host.

Comments in agents.yaml are cut back to the places where the config does
something a reader cannot infer:

* what `auto: true` costs — it skips the human approval prompt
* what the MCP block becomes in production, and where the credential
  goes (a before_mcp_request hook, never the YAML)
* when a local tool is the right choice instead of an MCP
* that `failure_policy: warn` is the exception, not the default
* that graph indentation is what a node is allowed to reach

Everything that merely restated the key names is gone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@AmitAvital1
AmitAvital1 requested a review from Asaf-prog July 27, 2026 17:18
@AmitAvital1
AmitAvital1 merged commit 12e1455 into main Jul 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants