Skip to main content
Every error an Ultron agent encounters becomes a lesson. Every lesson is recalled before the next run. Errors happen at most once.

How it works

1

Error occurs

An agent encounters a failure: an API rate limit, a scraping block, a tool returning an unexpected format, a cold email failing the quality gate.
2

Lesson stored

The agent immediately stores a feedback memory:
{
  "type": "feedback",
  "tags": ["lesson", "specter"],
  "text": "LESSON: Apollo returns 429 on bulk enrichment over 10 leads. PREVENTION: Batch max 10 leads per run, wait 2s between batches."
}
3

Next run starts

Before starting any work, the agent searches memory for lessons tagged with its name:
search_memories({ query: "lesson specter", limit: 10 })
4

Lessons applied

The retrieved lessons are injected before any tool calls. The agent adjusts its behavior — batching correctly, using alternative approaches, avoiding known failure patterns.

Real examples

ErrorLesson stored
Apollo 429 on bulk enrichmentBatch max 10, wait 2s between batches
ZeroBounce returns catch-all for a domainFlag domain as catch-all, reduce outreach priority
LinkedIn scrape blockedSwitch to Apollo for profile data on this domain
Cold email failed quality gate 3xDefault to 2-sentence body for technical audiences
Stripe API key expired mid-sessionCheck Stripe token validity at session start

Why both errors AND successes

The lessons system stores confirmed patterns too:
VALIDATION: The 3-sentence body + open question CTA
outperformed longer formats. Reply rate: 12% vs 4%.
Keep as default for SaaS founder ICP.
Storing only failures causes drift. Ultron starts changing what’s working, trying to improve. Storing validations locks in what works.
You can manually add lessons. In chat, say: “Remember that [thing you learned] — apply this going forward.” Ultron stores it as a feedback memory immediately.