Skip to content

Commit 0042b4d

Browse files
djzagerdymurray
andauthored
📖 Add getting-started guide and sample CRs (#140)
## Summary Adds user-facing documentation and sample manifests so new contributors and testers can deploy the controller and configure agent workloads without reverse-engineering the codebase. ### What's included **Getting-started guide** (`docs/getting-started.md`): - Prerequisites (K8s 1.33+, Agent Sandbox) - Deploying the controller (`make deploy`) - Creating Gateways with credentials for each provider - Creating an Agent and triggering an AgentRun - Workflow pointers, local dev, e2e testing, troubleshooting **Sample CRs** (`config/samples/`): - `gateway_vertex_ai.yaml` — GCP Vertex AI with Claude - `gateway_openai.yaml` — OpenAI GPT-4o - `gateway_anthropic.yaml` — Anthropic direct API - `gateway_aws_bedrock.yaml` — AWS Bedrock - `agent_example.yaml` — Java migration agent referencing a gateway and skill - `agentrun_example.yaml` — Triggers the migration agent Sample CRs are self-contained reference examples with inline comments explaining prerequisites (e.g. secret creation commands). They are not added to the samples kustomization since they require user-specific credentials. **README update**: Added a "Getting started" section linking to the new guide. ### Context From team discussion: multiple people were blocked on testing because there was no documentation on how to configure things after deploying the controller. The `LLMProvider` CRD was renamed to `Gateway` and some team members were still on the old version without realizing. ### ADR compatibility Reviewed all open ADR PRs (#108, #106, #138) before writing. The guide stays at the CRD-level user interface and does not describe internal delivery mechanisms (params.json, skill loading, ACP transport) that are in flux. Nothing here contradicts pending decisions. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added sample configurations for Agents, AgentRuns, and AI gateways across Anthropic, AWS Bedrock, OpenAI, and Vertex AI. * Added a Java EE-to-Quarkus migration Agent example with repository and branch parameters. * **Documentation** * Added a comprehensive getting-started guide covering setup, deployment, provider configuration, workflows, testing, cleanup, and troubleshooting. * Added a README link to the getting-started guide. * **Bug Fixes** * Updated the AWS Bedrock example to use the Claude Sonnet 4.5 model identifier. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: David Zager <david.j.zager@gmail.com> Signed-off-by: Dylan Murray <dymurray@redhat.com> Co-authored-by: Dylan Murray <dymurray@redhat.com>
1 parent 120b26b commit 0042b4d

12 files changed

Lines changed: 589 additions & 4 deletions

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ CI pipeline) resolves application metadata before creating the CR.
4242

4343
See `docs/adr/` for the full set of architecture decision records.
4444

45+
## Getting started
46+
47+
See [docs/getting-started.md](docs/getting-started.md) for a
48+
step-by-step guide to deploying the controller, configuring a Gateway
49+
with LLM credentials, and creating your first AgentRun.
50+
4551
## Project structure
4652

4753
```

config/samples/agent_example.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Example Agent for Java EE to Quarkus migration.
2+
#
3+
# An Agent is a template — it declares what is available (image,
4+
# gateways, skills) but does not execute anything. Create an AgentRun
5+
# to trigger execution.
6+
#
7+
# Prerequisites:
8+
# - A Gateway CR (e.g. gateway_vertex_ai.yaml)
9+
# - SkillCard CRs (the default samples or your own)
10+
apiVersion: konveyor.io/v1alpha1
11+
kind: Agent
12+
metadata:
13+
name: migration-agent
14+
spec:
15+
# Container image carrying the agent runtime and toolchains.
16+
image: quay.io/konveyor/agent-java:latest
17+
18+
# Standing instructions for how the agent operates.
19+
prompt: |
20+
You are a migration agent. Analyze the source repository and
21+
migrate it from Java EE to Quarkus 3.
22+
23+
# Gateways available for runs. An AgentRun selects one.
24+
gateways:
25+
- ref: gcp-vertex-ai
26+
27+
# Skills available to the agent.
28+
skillCards:
29+
- ref: javaee-to-quarkus
30+
31+
# No params: the agent-java harness resolves the repository to migrate
32+
# (and its git credentials) from Konveyor Hub by APP_ID, and reads the
33+
# target branch from the TARGET_BRANCH env var — neither comes from run
34+
# parameters. See docs/getting-started.md section 5.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Example AgentRun — triggers execution of an Agent.
2+
#
3+
# An AgentRun is immutable once created. To change values, delete
4+
# and recreate the AgentRun.
5+
#
6+
# Prerequisites:
7+
# - The referenced Agent CR (e.g. agent_example.yaml)
8+
# - The Gateway selected here must be in the Agent's gateway list
9+
# - A Konveyor Hub with the application registered — the harness clones
10+
# the repo and reads git credentials from Hub by APP_ID. See
11+
# hack/install-konveyor.sh and docs/getting-started.md section 5.
12+
apiVersion: konveyor.io/v1alpha1
13+
kind: AgentRun
14+
metadata:
15+
name: migration-run-001
16+
spec:
17+
# Reference to the Agent to execute.
18+
agentRef: migration-agent
19+
20+
# Select which gateway (provider/model) to use for this run.
21+
# Must be one of the gateways declared on the Agent.
22+
# Note: Agent uses `gateways: [{ref: name}]` (a list of refs)
23+
# because it declares multiple available options. AgentRun uses a
24+
# bare string because it selects exactly one.
25+
gateway: gcp-vertex-ai
26+
27+
# The harness resolves the repository and git credentials from Konveyor
28+
# Hub by APP_ID and reads the target branch from TARGET_BRANCH, so this
29+
# run carries a Hub connection rather than source_url/target_branch
30+
# params. Edit these to match your Hub and registered application.
31+
env:
32+
- name: HUB_BASE_URL
33+
value: "http://tackle-hub.konveyor-tackle.svc:8080"
34+
- name: APP_ID
35+
value: "1"
36+
- name: TARGET_BRANCH
37+
value: "konveyor/migration"
38+
39+
# Task-specific instructions for this run. Composed with the
40+
# Agent's prompt at execution time.
41+
instructions: |
42+
Focus on the EJB-to-CDI migration first. Run mvn compile after
43+
each major change to catch errors early.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Gateway for Anthropic (direct API).
2+
#
3+
# Prerequisites — create a Secret with your real API key:
4+
# kubectl create secret generic anthropic-credentials \
5+
# --from-literal=api-key="<your-anthropic-api-key>"
6+
apiVersion: konveyor.io/v1alpha1
7+
kind: Gateway
8+
metadata:
9+
name: anthropic
10+
spec:
11+
provider: anthropic
12+
endpoint: "https://api.anthropic.com"
13+
credentialRef:
14+
secretName: anthropic-credentials
15+
key: api-key
16+
model:
17+
name: claude-sonnet-4-5-20250929
18+
contextWindow: 200000
19+
tier: premium
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Gateway for AWS Bedrock.
2+
#
3+
# Prerequisites — create a Secret with your real AWS credentials:
4+
# kubectl create secret generic bedrock-credentials \
5+
# --from-literal=AWS_ACCESS_KEY_ID="<your-access-key-id>" \
6+
# --from-literal=AWS_SECRET_ACCESS_KEY="<your-secret-access-key>" \
7+
# --from-literal=AWS_REGION="<your-region>"
8+
#
9+
# The credential Secret uses envFrom (no key field) because Bedrock
10+
# requires multiple AWS env vars.
11+
apiVersion: konveyor.io/v1alpha1
12+
kind: Gateway
13+
metadata:
14+
name: aws-bedrock
15+
spec:
16+
provider: aws-bedrock
17+
endpoint: "https://bedrock-runtime.us-east-1.amazonaws.com"
18+
credentialRef:
19+
secretName: bedrock-credentials
20+
model:
21+
name: us.anthropic.claude-sonnet-4-5-20250929-v1:0
22+
contextWindow: 200000
23+
tier: premium

config/samples/gateway_openai.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Gateway for OpenAI.
2+
#
3+
# Prerequisites — create a Secret with your real API key:
4+
# kubectl create secret generic openai-credentials \
5+
# --from-literal=api-key="<your-openai-api-key>"
6+
apiVersion: konveyor.io/v1alpha1
7+
kind: Gateway
8+
metadata:
9+
name: openai
10+
spec:
11+
provider: openai
12+
endpoint: "https://api.openai.com"
13+
credentialRef:
14+
secretName: openai-credentials
15+
key: api-key
16+
model:
17+
name: gpt-4o
18+
contextWindow: 128000
19+
tier: premium
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Gateway for GCP Vertex AI with Claude.
2+
#
3+
# Prerequisites:
4+
# kubectl create secret generic vertex-credentials \
5+
# --from-file=GOOGLE_APPLICATION_CREDENTIALS_JSON="$HOME/.config/gcloud/application_default_credentials.json" \
6+
# --from-literal=GCP_PROJECT_ID="$(gcloud config get-value project)" \
7+
# --from-literal=GCP_LOCATION=global
8+
#
9+
# The credential Secret uses envFrom (no key field) because Vertex AI
10+
# requires GOOGLE_APPLICATION_CREDENTIALS_JSON as an env var name. The
11+
# whole Secret is exposed via envFrom, so GCP_PROJECT_ID (required by
12+
# goose's Vertex provider) and GCP_LOCATION ride along too.
13+
apiVersion: konveyor.io/v1alpha1
14+
kind: Gateway
15+
metadata:
16+
name: gcp-vertex-ai
17+
spec:
18+
provider: gcp-vertex-ai
19+
endpoint: "https://global-aiplatform.googleapis.com"
20+
credentialRef:
21+
secretName: vertex-credentials
22+
model:
23+
name: claude-sonnet-4-5@20250929
24+
contextWindow: 200000
25+
tier: premium

config/samples/gateway_xai.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Gateway for xAI (Grok).
2+
#
3+
# Prerequisites — create a Secret with your real API key:
4+
# kubectl create secret generic grok-credentials \
5+
# --from-literal=api-key="<your-xai-api-key>"
6+
apiVersion: konveyor.io/v1alpha1
7+
kind: Gateway
8+
metadata:
9+
name: grok
10+
spec:
11+
# Provider must be "xai" — the harness maps it to goose's xAI provider
12+
# and forwards XAI_API_KEY.
13+
provider: xai
14+
# xAI API host. The controller's verification probe appends /v1/models;
15+
# goose defaults XAI_HOST to https://api.x.ai/v1.
16+
endpoint: "https://api.x.ai"
17+
credentialRef:
18+
secretName: grok-credentials
19+
key: api-key
20+
model:
21+
name: grok-4
22+
contextWindow: 256000
23+
tier: premium

0 commit comments

Comments
 (0)