{"record":{"id":"1a2aee6ff08c1a09","repo":"micro/go-micro","slug":"agent-s-has-no-checkpoint-configured","errorCode":null,"errorMessage":"agent %s has no checkpoint configured","messagePattern":"agent (.+?) has no checkpoint configured","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent/checkpoint.go","lineNumber":80,"sourceCode":"\t\t})\n\t}\n\treturn nil\n}\n\n// Resume returns the response for a checkpointed agent run. Completed runs are\n// returned from the checkpoint without calling the model or replaying tool\n// calls; failed or in-progress runs continue from the saved input message.\nfunc Resume(ctx context.Context, ag Agent, runID string) (*Response, error) {\n\ta, ok := ag.(*agentImpl)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"agent resume: unsupported agent implementation %T\", ag)\n\t}\n\treturn a.resume(ctx, runID)\n}\n\nfunc (a *agentImpl) resume(ctx context.Context, runID string) (*Response, error) {\n\tif a.opts.Checkpoint == nil {\n\t\treturn nil, fmt.Errorf(\"agent %s has no checkpoint configured\", a.opts.Name)\n\t}\n\trun, ok, err := a.opts.Checkpoint.Load(ctx, runID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"agent run %s not found\", runID)\n\t}\n\tif run.Status == \"paused\" {\n\t\tif run.State.Stage == agentInputStep {\n\t\t\treturn nil, fmt.Errorf(\"agent run %s is input-required; resume with ResumeInput\", runID)\n\t\t}\n\t\trun.Status = \"running\"\n\t\trun.State.Stage = agentAskStep\n\t}\n\tif run.Status == \"done\" {\n\t\tvar resp Response\n\t\tif err := json.Unmarshal(run.State.Data, &resp); err != nil {","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/micro/go-micro/blob/24529f140421a11a33b6999ab7944f2021cfd69c/agent/checkpoint.go#L62-L98","documentation":"agentImpl.resume (agent/checkpoint.go:80) requires a Checkpoint store to load the run. If opts.Checkpoint is nil — the agent was constructed without durable checkpointing — resume cannot locate any run and returns this error naming the agent.","triggerScenarios":"Calling agent.Resume(ctx, ag, runID) (or ResumePending/Pending) on an agent built without the Checkpoint option, i.e. one whose runs were never persisted.","commonSituations":"Constructor options omit Checkpoint in one environment (e.g. local dev) while ops code assumes resume works; configuration refactor dropped the checkpoint option; calling resume on a transient agent created ad-hoc.","solutions":["Construct the agent with a Checkpoint option before attempting resume","Verify the config path that builds the agent passes the checkpoint store in all environments","For non-checkpointed agents, re-issue the original request instead of resuming","Add a pre-call check that checkpointing is enabled for the agent"],"exampleFix":"// before\nag := agent.New(model, mem) // no checkpoint\nresp, err := agent.Resume(ctx, ag, runID) // no checkpoint configured\n// after\nag := agent.New(model, mem, agent.WithCheckpoint(cpStore))\nresp, err := agent.Resume(ctx, ag, runID)\n","handlingStrategy":"validation","validationCode":"// guard before resuming\nif !agentHasCheckpoint(ag) { // e.g. track checkpoint presence in your config\n    return errors.New(\"cannot resume: agent built without checkpoint option\")\n}","typeGuard":null,"tryCatchPattern":"resp, err := agent.Resume(ctx, ag, runID)\nif err != nil && strings.Contains(err.Error(), \"no checkpoint configured\") {\n    return fmt.Errorf(\"enable WithCheckpoint to use resume: %w\", err)\n}","preventionTips":["Always pass a Checkpoint option in environments that use resume/pending","Centralize agent construction so checkpoint config cannot be dropped","Add a startup assertion that checkpointing is enabled where resume flows exist"],"tags":["go","agent","checkpoint","misconfiguration"],"backgroundTag":"missing-checkpoint-configuration","analyzedSha":"24529f140421a11a33b6999ab7944f2021cfd69c","analyzedAt":"2026-09-01T02:52:24.923Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}