# Dingdinglz Skill Write Agent Use Adk Go Adk Go Agent

> ADK-Go Agent Development

- Skill: `tomevault-io/dingdinglz-skill-write-agent-use-adk-go-adk-go-agent` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/dingdinglz-skill-write-agent-use-adk-go-adk-go-agent`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/dingdinglz-skill-write-agent-use-adk-go-adk-go-agent/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/dingdinglz-skill-write-agent-use-adk-go-adk-go-agent

---


# ADK-Go Agent Development

## Quick Start

### 1. Install Dependency

```bash
go get google.golang.org/adk
```

### 2. Create Model

#### Gemini

```go
import (
    "google.golang.org/adk/model/gemini"
    "google.golang.org/genai"
)

// Use lock if changing base URL (genai lacks API for this)
envLock.Lock()
if baseURL != "" {
    os.Setenv("GOOGLE_GEMINI_BASE_URL", baseURL)
} else {
    os.Unsetenv("GOOGLE_GEMINI_BASE_URL")
}

llmModel, err := gemini.NewModel(ctx, modelName, &genai.ClientConfig{
    APIKey: apiKey,
})

os.Unsetenv("GOOGLE_GEMINI_BASE_URL")
envLock.Unlock()
```

#### OpenAI

```bash
go get github.com/byebyebruce/adk-go-openai
```

```go
import (
    openai "github.com/byebyebruce/adk-go-openai"
    go_openai "github.com/sashabaranov/go-openai"
)

cfg := go_openai.DefaultConfig(os.Getenv("OPENAI_API_KEY"))
if baseURL := os.Getenv("OPENAI_BASE_URL"); baseURL != "" {
    cfg.BaseURL = baseURL
}
model := openai.NewOpenAIModel(modelName, cfg)
```

### 3. Wrap with RetryLLM

Always wrap model with RetryLLM for resilience. See [references/retry_llm.md](references/retry_llm.md) for full implementation.

```go
retryLLM := &RetryLLM{
    llm:        llmModel,
    maxRetries: 3,
}
```

### 4. Create Tools

```go
import "google.golang.org/adk/tool/functiontool"

type SetTitleInput struct {
    Title string `json:"title"`
}

type SetTitleOutput struct{}

setTitleTool, _ := functiontool.New(functiontool.Config{
    Name:        "set_title",
    Description: "set the title of the project",
}, func(ctx tool.Context, input SetTitleInput) (SetTitleOutput, error) {
    // Implementation
    return SetTitleOutput{}, nil
})
```

### 5. Create Agent

```go
import (
    "google.golang.org/adk/agent/llmagent"
    "google.golang.org/adk/tool"
    "google.golang.org/genai"
)

agent, err := llmagent.New(llmagent.Config{
    Name:        "my-agent",
    Model:       retryLLM,
    Description: "Agent description",
    Instruction: "System prompt - describe tools usage here",
    Tools:       []tool.Tool{setTitleTool},
    GenerateContentConfig: &genai.GenerateContentConfig{
        MaxOutputTokens: 4096,
    },
})
```

**Important**: Describe tool usage in `Instruction` (system prompt).

### 6. Run Agent

```go
import (
    adkagent "google.golang.org/adk/agent"
    "google.golang.org/adk/runner"
    "google.golang.org/adk/session"
)

// Create session service
sessionService := session.InMemoryService()

// Create runner
r, err := runner.New(runner.Config{
    AppName:        "my-app",
    Agent:          agent,
    SessionService: sessionService,
})

// Create session before running (required)
_, err = sessionService.Create(ctx, &session.CreateRequest{
    AppName:   "my-app",
    UserID:    userID,
    SessionID: sessionID,
    State:     make(map[string]any),
})

// Run with streaming
runConfig := adkagent.RunConfig{
    StreamingMode: adkagent.StreamingModeSSE,
}

fullResponse := ""
for event, err := range r.Run(ctx, userID, sessionID, userContent, runConfig) {
    if err != nil {
        break
    }
    if event == nil {
        continue
    }
    if event.Content != nil {
        for _, part := range event.Content.Parts {
            if part.Text != "" && event.Partial {
                fullResponse += part.Text
            }
        }
    }
}
```

### 7. Clean Up Session

For single-turn conversations, delete session after use:

```go
err := sessionService.Delete(ctx, &session.DeleteRequest{
    AppName:   "my-app",
    UserID:    userID,
    SessionID: sessionID,
})
```

## Required Imports Summary

```go
import (
    adkagent "google.golang.org/adk/agent"
    "google.golang.org/adk/agent/llmagent"
    adkmodel "google.golang.org/adk/model"
    "google.golang.org/adk/model/gemini"
    "google.golang.org/adk/runner"
    "google.golang.org/adk/session"
    "google.golang.org/adk/tool"
    "google.golang.org/adk/tool/functiontool"
    "google.golang.org/genai"
)
```

## Resources

- [references/retry_llm.md](references/retry_llm.md) - Complete RetryLLM implementation with exponential backoff

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/dingdinglz) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-13 -->

