Migration Guide¶
Migrate existing agent projects to AgentKit.
Overview¶
Migration typically involves:
- Adding the AgentKit dependency
- Replacing local
pkg/imports with AgentKit imports - Using server factories instead of manual setup
- Removing redundant local packages
Step 1: Add Dependency¶
Step 2: Replace Imports¶
Configuration¶
// Before
import "github.com/myproject/pkg/config"
// After
import "github.com/plexusone/agentkit/config"
LLM¶
Agent¶
// Before
import "github.com/myproject/pkg/agent"
// After
import "github.com/plexusone/agentkit/agent"
HTTP Client¶
// Before
import "github.com/myproject/pkg/httpclient"
// After
import "github.com/plexusone/agentkit/http"
Step 3: Use Server Factories¶
A2A Server¶
// Before (~70 lines)
func startA2AServer(agent agent.Agent, port string) error {
listener, _ := net.Listen("tcp", "0.0.0.0:"+port)
agentCard := &a2a.AgentCard{...}
mux := http.NewServeMux()
// ... 50+ more lines
}
// After (~5 lines)
import "github.com/plexusone/agentkit/a2a"
server, _ := a2a.NewServer(a2a.Config{
Agent: myAgent,
Port: "9001",
})
server.Start(ctx)
HTTP Server¶
// Before (~25 lines)
server := &http.Server{
Addr: ":8001",
ReadTimeout: 30 * time.Second,
// ...
}
http.HandleFunc("/research", handler)
http.HandleFunc("/health", healthHandler)
server.ListenAndServe()
// After (~5 lines)
import "github.com/plexusone/agentkit/httpserver"
server, _ := httpserver.NewBuilder("my-agent", 8001).
WithHandlerFunc("/research", handler).
Build()
server.Start()
Step 4: Remove Redundant Code¶
Delete your local packages that are now provided by AgentKit:
Complete Example¶
Before¶
package main
import (
"github.com/myproject/pkg/config"
"github.com/myproject/pkg/agent"
)
func main() {
cfg := config.LoadConfig()
base, _ := agent.NewBaseAgent(cfg, 30)
defer base.Close()
researchAgent := NewResearchAgent(base, cfg)
// Manual HTTP server setup (~25 lines)
server := &http.Server{...}
http.HandleFunc("/research", researchAgent.HandleResearch)
http.HandleFunc("/health", ...)
// Manual A2A server setup (~70 lines)
go func() {
listener, _ := net.Listen(...)
agentCard := &a2a.AgentCard{...}
// ... many more lines
}()
server.ListenAndServe()
}
After¶
package main
import (
"github.com/plexusone/agentkit/agent"
"github.com/plexusone/agentkit/config"
"github.com/plexusone/agentkit/a2a"
"github.com/plexusone/agentkit/httpserver"
)
func main() {
ctx := context.Background()
cfg := config.LoadConfig()
base, _ := agent.NewBaseAgent(cfg, "research-agent", 30)
defer base.Close()
researchAgent := NewResearchAgent(base, cfg)
// HTTP server - 5 lines
httpServer, _ := httpserver.NewBuilder("research-agent", 8001).
WithHandlerFunc("/research", researchAgent.HandleResearch).
Build()
// A2A server - 5 lines
a2aServer, _ := a2a.NewServer(a2a.Config{
Agent: researchAgent.ADKAgent(),
Port: "9001",
})
a2aServer.StartAsync(ctx)
httpServer.Start()
}
Migration Checklist¶
- [ ] Add AgentKit dependency
- [ ] Replace
pkg/configwithagentkit/config - [ ] Replace
pkg/llmwithagentkit/llm - [ ] Replace
pkg/agentwithagentkit/agent - [ ] Replace
pkg/httpclientwithagentkit/http - [ ] Replace manual A2A server with
a2a.NewServer() - [ ] Replace manual HTTP server with
httpserver.NewBuilder() - [ ] Remove redundant
pkg/directories - [ ] Update tests
- [ ] Verify all endpoints work
Estimated Savings¶
| Component | Lines Removed |
|---|---|
| pkg/config | ~140 lines |
| pkg/llm | ~200 lines |
| pkg/agent | ~140 lines |
| pkg/httpclient | ~90 lines |
| A2A server boilerplate | ~350 lines |
| HTTP server boilerplate | ~125 lines |
| Total | ~1,045 lines |
Gradual Migration¶
You can migrate incrementally:
- Week 1: Replace
pkg/configandpkg/llm - Week 2: Replace server boilerplate with factories
- Week 3: Replace remaining packages, remove old code
Each step is independently testable.