AI assistant
The workbench carries an assistant in the right-hand drawer. Ctrl/Cmd+Shift+A opens and closes it. It sees what you see: the selected method, its schema, the last response and the recent calls. It can look things up itself:
| Tool | What it does |
|---|---|
bowire_list_services |
The services and methods discovery found |
bowire_describe_method |
One method's request and response shape |
bowire_recent_history |
The last calls and their outcome |
bowire_open_method |
Opens a method in the workbench |
bowire_invoke |
Calls a method — only after you switch off observe-only in the drawer's warning bar; that holds for the session and every call is audited |
Ask it what a method does, what a request body should look like, or why the last call failed.
Without a model the drawer is not empty: rule-based hints still point out an empty gRPC response, fields the schema does not declare, or a call you keep repeating.
Pick a model
Everything goes through one choice: Settings → AI, or the same three settings on the command line or in configuration.
| Provider | ProviderId |
Endpoint | Key | Where prompts go |
|---|---|---|---|---|
| Ollama | ollama (default) |
http://localhost:11434 |
— | nowhere, it stays on the machine |
| LM Studio | lmstudio |
http://localhost:1234 |
— | nowhere, it stays on the machine |
| Anthropic | anthropic |
SDK default | yours | api.anthropic.com |
| OpenAI | openai |
https://api.openai.com/v1 |
yours | api.openai.com, or the proxy / Azure deployment you name |
| OpenRouter | openrouter |
https://openrouter.ai/api/v1 |
yours | openrouter.ai |
| MCP host | mcp |
an MCP URL, or stdio:<command> |
— | the MCP host you run |
A running Ollama or LM Studio is found on its own. The settings page then offers its models. Settings saved on that page win over flags and configuration, since they are the most recent explicit choice.
A key stays on the machine that runs Bowire. Bowire calls the provider directly, and Küstenlogik never sees the key, the prompts or the responses.
The CLI
ollama pull llama3.2:3b
bowire --url https://api.example.com --ai-provider ollama --ai-model llama3.2:3b
With a key:
export Bowire__Ai__ApiKey=<your key>
bowire --url https://api.example.com --ai-provider anthropic --ai-model claude-opus-4-7
--ai-provider, --ai-endpoint and --ai-model map to Bowire:Ai:ProviderId, Endpoint and Model. There is no flag for the key, so it cannot end up in shell history or a process list.
The container
The same settings as environment variables. Inside the container localhost is the container itself, so a model server on the host is host.docker.internal:
docker run --rm -p 5080:5080 \
-e Bowire__Ai__ProviderId=ollama \
-e Bowire__Ai__Endpoint=http://host.docker.internal:11434 \
-e Bowire__Ai__Model=llama3.2:3b \
--add-host host.docker.internal:host-gateway \
kuestenlogik/bowire:latest --url https://api.example.com
An embedded host
The assistant is its own package. Ollama and LM Studio come with it, and each cloud provider is one more package:
dotnet add package Kuestenlogik.Bowire.Ai
dotnet add package Kuestenlogik.Bowire.Ai.Anthropic # or .OpenAi (OpenAI + OpenRouter), .Mcp
builder.Services.AddBowireAi(builder.Configuration); // reads Bowire:Ai
builder.Services.AddBowireAiAnthropic();
var app = builder.Build();
app.MapBowire();
app.MapBowireAiEndpoints();
If the host already registers an IChatClient before AddBowireAi, the assistant uses that client. The Settings page then shows the provider as host-managed.
VS Code
The extension drives a bowire CLI. Pick the provider under Settings → AI in its panel.
More
- The assistant also writes the spec for service scaffolding, local model first.
- The AI integration design covers the three model-access modes, which features work on a small local model, and the privacy stance.
- The security drawer uses the same model for AI-assisted findings — see security testing.