> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seasonlabs.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Give your AI agent a clear, live summary of what the user needs.

## What is Era?

Era turns a conversation into a short context block for your AI agent. The
block summarizes the user's current goal, intent, urgency, and recommended next
step.

Call `turnContext()` before each model response, then add the returned string to
your system prompt:

```typescript theme={null}
const eraContext = await era.turnContext(messages, {
  visitorId,
  sessionId,
});

const systemPrompt = `You are a helpful assistant.\n\n${eraContext}`;
```

The rest of your model call stays the same.

## What Era returns

`turnContext()` returns a plain string:

```text theme={null}
[STATE v1] urgency=immediate [/STATE]
[GOAL v1] active=seek:confirm_qualifying_time resolved=unresolved [/GOAL]
[INTENT v1] intent=validating(0.95) specificity=specific [/INTENT]
[CAUSAL v1] emotion=anxious need_level=safety [/CAUSAL]
[REC v1] action=validate do="Confirm whether qualifying has happened" priority=0.85 [/REC]
```

Your model uses that block as internal context. Do not show it to the user.

## How one turn works

1. Your user sends a message.
2. Your backend calls `turnContext()` with the conversation and visitor ID.
3. Era returns a context block.
4. You add the block to the system prompt and call your model.
5. Your model responds with a better read on what the user needs.

In the default `async` mode, Era returns the previous turn's prepared block.
Use `sync` mode when you need context for the current turn and can accept more
latency. [Compare async and sync mode](/concepts/async-sync).

## What Era is not

Era is not a replacement for conversation history or long-term memory.

* **Conversation history** gives the model the exact messages.
* **Memory** stores durable facts, such as a user's preferences.
* **Era** summarizes what the user is trying to do right now.

You can use all three together.

## Which SDK do I need?

| Where your code runs | SDK                    | What it does                                      |
| -------------------- | ---------------------- | ------------------------------------------------- |
| Trusted backend      | `@seasonlabs/era-node` | Returns the context block.                        |
| Browser              | `@seasonlabs/era-web`  | Creates a visitor ID and verifies email or phone. |
| Flutter app          | `era_flutter`          | Creates a visitor ID and verifies email or phone. |

The secret Node SDK API key must stay on your backend. The Web and Flutter
SDKs use publishable keys.

## Next steps

<CardGroup cols={2}>
  <Card title="Node SDK quickstart" icon="rocket" href="/quickstart">
    Make your first Node SDK call.
  </Card>

  <Card title="Setup SDKs" icon="code-branch" href="/sdk-chooser">
    Choose the SDKs for your application.
  </Card>

  <Card title="All SDK methods" icon="brackets-curly" href="/api-reference">
    Find every public method and function.
  </Card>

  <Card title="See an example" icon="wand-magic-sparkles" href="/use-cases/fan-companion">
    Compare the same conversation with and without Era.
  </Card>
</CardGroup>
