206 lines
6.2 KiB
Plaintext
206 lines
6.2 KiB
Plaintext
---
|
|
title: "ClineCore"
|
|
sidebarTitle: "ClineCore"
|
|
description: "The full Cline harness: built-in tools, sessions, approvals, scheduling, and hub support."
|
|
---
|
|
|
|
`ClineCore` is the full Cline harness as a programmable runtime. It gives you everything Cline ships out of the box: built-in tools for files, shell, search, and web; session persistence and message history; tool approval callbacks; local, hub, and remote backends; scheduling and automation APIs; and plugin support.
|
|
|
|
Under the hood, `ClineCore` uses the `Agent` class from `@cline/agents`. You can use `Agent` directly if you want to skip the harness and wire everything yourself: your own tools, your own persistence, your own lifecycle.
|
|
|
|
## When to use which
|
|
|
|
| Need | Use |
|
|
|------|-----|
|
|
| Sessions, persistence, message history | `ClineCore` |
|
|
| Built-in tools for files, shell, search, web fetch | `ClineCore` |
|
|
| Hub/remote runtime | `ClineCore` |
|
|
| Scheduling or event automation | `ClineCore` |
|
|
| Multi-agent teams | `ClineCore` |
|
|
| Browser-compatible or lightweight in-process agent | `Agent` |
|
|
| Custom tools only, no built-ins | `Agent` |
|
|
| Full control over persistence and lifecycle | `Agent` |
|
|
|
|
## ClineCore
|
|
|
|
`ClineCore` wraps runtime execution with application features:
|
|
|
|
- session manifests and message artifacts
|
|
- built-in tools
|
|
- tool approval callbacks
|
|
- local, hub, and remote backends
|
|
- automation/scheduling APIs
|
|
- optional plugin paths and extensions
|
|
|
|
```typescript
|
|
import { ClineCore } from "@cline/sdk"
|
|
|
|
const cline = await ClineCore.create({
|
|
clientName: "my-app",
|
|
backendMode: "auto",
|
|
})
|
|
|
|
const session = await cline.start({
|
|
prompt: "Set up GitHub Actions for this repo",
|
|
config: {
|
|
providerId: "anthropic",
|
|
modelId: "claude-sonnet-4-6",
|
|
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
systemPrompt: "You are a helpful coding assistant.",
|
|
cwd: "/path/to/project",
|
|
workspaceRoot: "/path/to/project",
|
|
enableTools: true,
|
|
enableSpawnAgent: false,
|
|
enableAgentTeams: false,
|
|
},
|
|
})
|
|
|
|
console.log(session.sessionId)
|
|
console.log(session.result?.finishReason)
|
|
```
|
|
|
|
### Methods
|
|
|
|
| Method | Purpose |
|
|
|--------|---------|
|
|
| `ClineCore.create(options)` | Create the runtime |
|
|
| `start(input)` | Start a session |
|
|
| `send({ sessionId, prompt })` | Send a follow-up message |
|
|
| `subscribe(listener, options?)` | Listen to session events |
|
|
| `list(limit?, options?)` | List sessions with history metadata |
|
|
| `get(sessionId)` | Read session metadata |
|
|
| `readMessages(sessionId)` | Read session messages |
|
|
| `getAccumulatedUsage(sessionId)` | Read session token/cost totals |
|
|
| `abort(sessionId, reason?)` | Abort current work |
|
|
| `stop(sessionId)` | Stop a session |
|
|
| `delete(sessionId)` | Delete a session |
|
|
| `dispose(reason?)` | Clean up runtime resources |
|
|
|
|
See [ClineCore reference](/sdk/reference/cline-core) for exact signatures.
|
|
|
|
## Backend Modes
|
|
|
|
| Mode | Behavior |
|
|
|------|----------|
|
|
| `auto` | Prefer a compatible local hub, otherwise use local execution |
|
|
| `hub` | Require a compatible WebSocket hub |
|
|
| `remote` | Connect to a configured remote hub |
|
|
| `local` | Always use local in-process execution and local storage |
|
|
|
|
For process topology, see [Hub & Spoke](/sdk/architecture/hub-spoke).
|
|
|
|
## Session Artifacts
|
|
|
|
`ClineCore` stores session manifests and messages as files. A session result includes:
|
|
|
|
| Field | Meaning |
|
|
|-------|---------|
|
|
| `sessionId` | Session identifier |
|
|
| `manifest` | Parsed session manifest |
|
|
| `manifestPath` | Path to the session manifest JSON |
|
|
| `messagesPath` | Path to persisted message JSON |
|
|
| `result` | Final `AgentResult`, when available |
|
|
|
|
## Tool Approval
|
|
|
|
Use tool policies for simple cases:
|
|
|
|
```typescript
|
|
await cline.start({
|
|
prompt: "Audit this repo",
|
|
config: {
|
|
providerId: "anthropic",
|
|
modelId: "claude-sonnet-4-6",
|
|
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
systemPrompt: "You are a helpful coding assistant.",
|
|
cwd: process.cwd(),
|
|
workspaceRoot: process.cwd(),
|
|
enableTools: true,
|
|
enableSpawnAgent: false,
|
|
enableAgentTeams: false,
|
|
},
|
|
toolPolicies: {
|
|
read_files: { autoApprove: true },
|
|
search_codebase: { autoApprove: true },
|
|
run_commands: { autoApprove: false },
|
|
editor: { autoApprove: false },
|
|
},
|
|
})
|
|
```
|
|
|
|
Use `requestToolApproval` when your application needs to decide dynamically:
|
|
|
|
```typescript
|
|
const cline = await ClineCore.create({
|
|
clientName: "my-app",
|
|
capabilities: {
|
|
requestToolApproval: async (request) => {
|
|
return { approved: request.toolName !== "run_commands" }
|
|
},
|
|
},
|
|
})
|
|
```
|
|
|
|
For tool behavior and policies, see [Tools](/sdk/tools).
|
|
|
|
## Using Agent directly
|
|
|
|
`Agent` (also exported as `AgentRuntime`) is the stateless primitive that `ClineCore` builds on. Use it directly when you want full control or don't need the harness.
|
|
|
|
`Agent` is an alias for `AgentRuntime`. Use `Agent` when constructing from provider/model IDs. Use `AgentRuntime` when supplying a pre-built `AgentModel`.
|
|
|
|
`Agent` runs the core loop:
|
|
|
|
```txt
|
|
run() or continue()
|
|
-> model request
|
|
-> tool calls, if any
|
|
-> tool results
|
|
-> repeat until complete
|
|
```
|
|
|
|
```typescript
|
|
import { Agent } from "@cline/sdk"
|
|
|
|
const agent = new Agent({
|
|
providerId: "anthropic",
|
|
modelId: "claude-sonnet-4-6",
|
|
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
systemPrompt: "You are a helpful coding assistant.",
|
|
tools: [myTool],
|
|
})
|
|
|
|
agent.subscribe((event) => {
|
|
if (event.type === "assistant-text-delta") {
|
|
process.stdout.write(event.text ?? "")
|
|
}
|
|
})
|
|
|
|
const result = await agent.run("Review this diff")
|
|
console.log(result.outputText)
|
|
```
|
|
|
|
### Agent Methods
|
|
|
|
| Method | Purpose |
|
|
|--------|---------|
|
|
| `run(input)` | Start a run with user input |
|
|
| `continue(input?)` | Continue with optional new input |
|
|
| `abort(reason?)` | Abort the active run |
|
|
| `subscribe(listener)` | Listen to `AgentRuntimeEvent` events |
|
|
| `restore(messages)` | Replace conversation history |
|
|
| `snapshot()` | Read runtime state |
|
|
|
|
See [Agent reference](/sdk/reference/agent) for exact signatures.
|
|
|
|
### Multi-Turn Conversations
|
|
|
|
`AgentRuntime` keeps message state internally. Use `continue()` after the first run:
|
|
|
|
```typescript
|
|
await agent.run("What does this project do?")
|
|
await agent.continue("Now identify risky files")
|
|
```
|
|
|
|
If you persist messages externally, restore them with `restore(messages)` before continuing.
|