flue-eve
Concepts

Authoring Model

flue-eve supports two authoring styles. Both produce Flue agents under the hood.

Style A: Eve-style (declarative layout)

Place files in the standard Eve layout. The scaffold imports them into Flue runtime artifacts:

your-project/
├── agent/
│   ├── instructions.md      # system prompt
│   ├── tools/
│   │   └── weather.ts       # declarative tool
│   └── connections/
│       └── linear.ts        # MCP connection
├── src/
│   └── app.ts               # Flue Hono app
└── eve.config.ts            # plugin configuration

agent/tools/weather.ts:

export default {
  name: "get_weather",
  description: "Get weather for a city",
  parameters: {
    type: "object",
    properties: { city: { type: "string" } },
    required: ["city"],
  },
  execute: async ({ city }) => ({ city, temp: 72, condition: "sunny" }),
}

Run npx flue-eve init to generate Flue runtime files from these declarations.

Style B: Flue-native (code-first)

Author agents directly with Flue's createAgent API:

// src/agents/assistant.ts
import { createAgent } from '@flue/runtime'

export default createAgent({
  name: 'assistant',
  model: 'anthropic/claude-sonnet-4-6',
  instructions: 'You are a helpful assistant.',
  tools: [/* ... */],
})

This gives access to all Flue primitives: skills, sandbox, custom harness configuration, and the full Flue tool API.

Which to choose

  • Use Eve-style to follow Eve tutorials/guides, migrate an existing Eve project, or prefer declarative tool definitions
  • Use Flue-native for custom runtime behavior, full Flue API access, or when your project already uses @flue/runtime

Both styles are compatible with the same /eve/v1/* HTTP surface and client/frontend imports.

Generated files

Files generated by npx flue-eve init are marked with @flue-eve/generated or @flue-eve/injected comments. They are safe to edit, and re-running the scaffold will not overwrite them unless you pass --force.

See authoring tools and authoring connections for detailed per-feature guides.