Skip to main content

Best Practices

Proven strategies from real customer usage. Learn what works, what doesn’t, and how to build an effective second brain.

Start Right: Your First Week

1

Day 1: Store Naturally

Don’t overthink it. Start storing as you work:
"Our API uses JWT tokens that expire after 30 days"
Let the system handle classification and connections.
2

Days 2-3: Search and Observe

Search for what you’ve stored.Notice how semantic search finds related info without exact keywords.
3

Days 4-7: Build Momentum

Store 5-10 memories daily from actual work.Don’t migrate old notes yet—build new habits first.By week end: 25-50 memories with automatic connections ✓
Customer insight: Teams who start small have 3x higher adoption than those who migrate everything at once.

Content Writing

What to Store

✅ DO Store

  • Decisions & reasoning (“Why PostgreSQL?”)
  • Code patterns (“Our error handling”)
  • Customer context (“Acme prefers email”)
  • Insights (“Customer hates manual organization”)
  • Information you’ll need later

❌ DON'T Store

  • Easily Googled info (“What is React?”)
  • Temporary debugging thoughts
  • Extremely personal/sensitive data
  • Duplicate information (search first!)

Writing Effective Memories

  • ❌ Bad
  • ✅ Good
"PostgreSQL"
Problem: No context, no connections, won’t be useful

Writing Principles

  1. Be Specific: “API limit: 60 req/min” not “API has limits”
  2. Add Context: Include who, what, when, why, where
  3. Link Related: Reference docs, tickets, people
  4. Clear Language: Write for future you or teammates
  5. Include Source: Where did this come from?

Tagging Strategy

Ideal: 3-7 tags per memory
  • Under 3: Harder to filter
  • Over 10: Diminishing returns (semantic search handles it)

✅ DO Tag

  • Projects (memory-module, api-v2)
  • Entities (acme-corp, sarah-chen, stripe)
  • Topics (authentication, performance)
  • Types (adr, bug-report, meeting-notes)

❌ DON'T Tag

  • Common words (important, good, useful)
  • Full sentences (this-is-about-api-auth)
  • Redundant info (already in content)
  • Ephemeral details (temporary, draft)
Tagging Patterns:
Hierarchical: memory-module:decay, memory-module:waypoints
Entity: customer-acme-corp, team-backend, person-sarah
Status: active, archived, critical, draft

Sector Selection

Quick Decision Guide:
If it’s…SectorExample
Specific event/meetingEpisodic”Sprint planning 2025-01-20”
Timeless factSemantic”JWT tokens expire after 30 days”
Step-by-stepProcedural”How to deploy to production”
Feelings/sentimentEmotional”Customer frustrated with UI”
Strategic insightReflective”Why we chose PostgreSQL”

Common Mistakes

Problem: Lose benefit of appropriate decay ratesFix: Think about information type:
  • Time-bound → Episodic
  • Strategic → Reflective
  • How-to → Procedural
Problem: Nothing fades, defeats purpose of decayFix: Reserve Reflective for strategic insights. Meeting notes are Episodic.
Problem: Lose valuable sentiment contextFix: Capture sentiment:
  • Customer feedback & satisfaction
  • Team morale in retrospectives
  • User reactions to features

Reinforcement Strategy

  • Immediately (Emergency)
  • Weekly (Deep Learning)
  • Bi-Weekly (Maintenance)
  • As-Needed (Quick Refresh)
Profile: Emergency (Δ0.25)Use for:
  • Production incident procedures
  • Security protocols
  • Critical customer context
  • Core product docs
Reinforce memory [id] with Emergency profile
Automated Reinforcement:
// Reinforce critical docs weekly
async function reinforceCriticalDocs() {
  const critical = await fetch('https://api.ulpi.io/api/v1/memories/search', {
    method: 'POST',
    body: JSON.stringify({ query: '', tags: ['critical', 'documentation'] })
  }).then(r => r.json());

  for (const memory of critical.data) {
    await fetch(`https://api.ulpi.io/api/v1/memories/${memory.id}/reinforce`, {
      method: 'POST',
      body: JSON.stringify({ profile: 'maintenance' })
    });
  }
}

Search Optimization

Concept Search

Search: "state management in React"
Returns: Hooks, Redux, Context API—without exact keywordsWhy: Vector embeddings understand concepts

Filtered Search

Search semantic for "API documentation"
Filters to Semantic sector before rankingWhen: Reduce noise, know the type

Context Expansion

Search "microservices" with context
Returns: Direct + related decisions + patterns + lessonsWhen: Need comprehensive context

Recency Search

Search recent for "customer feedback"
Ranks by recency over similarityWhen: Looking for latest info
Search Tips:
  1. Start broad, then filter
  2. Use natural language (“How do we handle errors?”)
  3. Enable waypoints for research
  4. Disable waypoints for precision
  5. Try different phrasings

Token Management

Token costs only apply when using paid features: OpenAI embeddings or LLM classification. Free (Typesense + Regex) uses zero tokens.

Token Costs

OperationFree OptionPaid OptionCost
StoreTypesense + RegexOpenAI + LLM~150-500 tokens
SearchTypesense vectorOpenAI~50-100 tokens
WaypointsIncluded freeIncluded free~10-20/hop
ReinforceIncluded freeIncluded free~5 tokens

Staying Within Limits

Starter (100K/month):
  • Use free features ✅
  • ~200-300 memories/month (free) or ~30-40 (paid)
Pro (1M/month):
  • Mix free and paid strategically
  • ~3,000/month (free) or ~300 (paid)
Enterprise (Unlimited):
  • Use paid everywhere, no restrictions

Default to Free

Use Typesense + Regex unless you need higher quality.Most customers find free features sufficient!

Batch Operations

Store multiple memories in one session.Amortizes overhead, reduces per-item cost.

Monitor Usage

Check admin panel monthly.Adjust strategy if approaching limits.

Selective Paid

Use OpenAI only for critical memories.Tag differently, specify provider via API.

Admin Panel Usage

Daily (1 minute)

  • Embeddings Log: Any failures?
  • Stats: Total memories, hot memories, average salience

Weekly (5 minutes)

  • Sector Distribution: Balanced?
  • Hot Memories: Frequently accessed? Reinforce?
  • Recent Activity: Consistent creation?

Monthly (15 minutes)

  • Prune: Remove memories under 0.1 salience
  • Reinforce: Boost strategic documentation
  • Review Waypoints: Rebuild if bulk imports
  • Export Backup: Download JSON

Common Pitfalls

Problem: Information overload, defeats selective memoryFix: Ask “Will I need this later?” Only store future value.
Problem: Important memories fadeFix: Weekly/monthly reinforcement schedules
Problem: 20+ tags, redundant with contentFix: 3-7 meaningful tags. Semantic search handles the rest.
Problem: Everything Semantic, missing decay benefitsFix: Spend 2 seconds choosing right sector!
Problem: Trying to create folder structuresFix: Trust waypoints and reinforcement!
Problem: No visibility into memory healthFix: Weekly 5-minute check-in

Performance Optimization

Slow Searches (>2s)?

  1. Reduce waypoint expansion: max_hops: 1 or expand_waypoints: false
  2. Use filters: Narrow by sector, tags, date first
  3. Lower limits: Request fewer results (limit: 5)
  4. Check Typesense: Admin → Stats → Index status

Slow Storage?

  1. Async embedding: Don’t wait (API returns immediately)
  2. Batch operations: Multiple memories per session
  3. Check queue: Admin → Horizon → Queue depth

Security & Privacy

✅ DO

  • Store keys in environment variables
  • Separate keys per environment
  • Rotate keys quarterly
  • Revoke immediately if exposed

❌ DON'T

  • Commit keys to git
  • Share keys via Slack/email
  • Use same key across projects
Data Privacy:
  • Multi-tenant isolation (complete)
  • Encryption: At rest + in transit
  • Access logs: All operations tracked
  • Export control: You own your data
GDPR Compliance:
  1. Document PII in memory content
  2. Use shorter-decay sectors (Episodic, Emotional)
  3. Manual deletion available
  4. Export capability for data requests

Success Metrics

Track Impact:
  1. Time Saved: Context search time (before vs after)
  2. Adoption: % of team using daily
  3. Memory Health: Avg salience, hot count, sector distribution
  4. Search Quality: Finding on first search?
  5. Reinforcement: Which memories reinforced most? (Most valuable!)
Target Benchmarks:
  • 5-10 new memories/person/week
  • 10-20 searches/person/day
  • 70%+ team using within 1 month
  • Average salience >0.5
  • 20-30% hot memories

Next Steps


Need Help?
  • Docs: docs.ulpi.io/memory
  • Admin: app.ulpi.io/admin/memories
  • Email: support@ulpi.io (Starter: 48h, Pro: 24h, Enterprise: 4h)
  • Community: forum.ulpi.io
  • Bugs: github.com/ulpi-io/ulpi/issues

Build habits, trust the system, let semantic connections emerge naturally.