open-index/open-npm huggingface dataset:
npm package: @philschmid/agent
Description: Agent wrapper with hooks system for @philschmid/agents-core
Author: Philipp Schmid
Latest version: 0.2.1

# @philschmid/agent

Agent wrapper with hooks system for `@philschmid/agents-core`.

## Installation

```bash
bun add @philschmid/agent
# or
npm install @philschmid/agent
```

## Features

- **AgentSession**: Stateful session with message queuing and hook support
- **Hooks System**: Intercept agent lifecycle (onAgentStart, beforeToolExecute, etc.)
- **Built-in Tools**: Read/write files, bash, grep, web search, and more
- **Skills & Subagents**: Load specialized skills and delegate to subagents

## Quick Start

```typescript
import { createAgentSession, printAgentStream } from '@philschmid/agent';

const session = createAgentSession({
  model: 'gemini-3-flash-preview',
  tools: ['read', 'write', 'bash'],
});

// Register hooks
session.on('beforeToolExecute', (event) => {
  console.log(`Executing: ${event.toolName}`);
  return { allow: true };
});

// Send message and stream
session.send('Read the package.json file');
await printAgentStream(session.stream(), { verbosity: 'verbose' });
```

## Built-in Tools

| Name | Description |
|------|-------------|
| `read` | Read file contents |
| `write` | Apply patches to files |
| `bash` | Execute shell commands |
| `grep` | Search files with patterns |
| `list` | List directory contents |
| `web_search` | Search the web |
| `web_fetch` | Fetch and parse URLs |
| `skills` | Load skill instructions |
| `subagent` | Delegate to subagents |

## API

See the [documentation](https://ia-agents.philschmid.dev) for full API reference.

## License

Apache-2.0
npm package: @philschmid/agents-core
Description: Minimal agent framework for Gemini Interactions API
Author: Philipp Schmid
Latest version: 0.1.1

# @philschmid/agents-core

Minimal agent framework for the **Gemini Interactions API**.

Based on [pi-ai EventStream pattern](https://github.com/badlogic/pi-mono).

## Installation

```bash
bun add @philschmid/agents-core
# or
npm install @philschmid/agents-core
```

## Examples

### 1. Basic Agent Loop

```typescript
import { agentLoop, printStream } from '@philschmid/agents-core';

const stream = agentLoop([{ type: 'text', text: 'What is 5 + 3?' }], {
  model: 'gemini-3-flash-preview',
  systemInstruction: 'You are a helpful assistant.',
});

await printStream(stream, { verbosity: 'normal' });
```

### 2. Multi-turn with previousInteractionId

```typescript
import { agentLoop, printStream } from '@philschmid/agents-core';

// Turn 1
const stream1 = agentLoop([{ type: 'text', text: 'What is 5 + 3?' }], {
  model: 'gemini-3-flash-preview',
});
await printStream(stream1);
const result1 = await stream1.result();

// Turn 2 (continues conversation)
const stream2 = agentLoop([{ type: 'text', text: 'Multiply that by 2' }], {
  model: 'gemini-3-flash-preview',
  previousInteractionId: result1.interactionId,
});
await printStream(stream2);
```

### 3. With Tools

```typescript
import { agentLoop, printStream, type AgentTool } from '@philschmid/agents-core';

const calculate: AgentTool = {
  name: 'calculate',
  label: 'Calculator',
  description: 'Evaluate math expression',
  parameters: { type: 'object', properties: { expr: { type: 'string' } } },
  execute: async (id, args) => ({ result: String(eval(args.expr as string)) }),
};

const stream = agentLoop([{ type: 'text', text: 'What is 123 * 456?' }], {
  model: 'gemini-3-flash-preview',
  tools: [calculate],
});

for await (const event of stream) {
  if (event.type === 'text.delta') process.stdout.write(event.delta);
  if (event.type === 'tool.start') console.log(`\n[Calling ${event.name}]`);
}
```

## API

```typescript
// agentLoop - one-shot agent execution
const stream = agentLoop(input, options);

for await (const event of stream) {
  // Handle events
}

const result = await stream.result();
// result.interactionId - use for multi-turn chaining
// result.interactions - full conversation history
// result.usage - token usage
```

> **Note:** For multi-turn with message queuing, use `AgentSession` from `@philschmid/agent`.