Skip to content

Add Embabel Agent Framework skill for Copilot cloud agent#334

Merged
jwijgerd merged 1 commit into
mainfrom
copilot/create-skill-embabel-agent
Apr 11, 2026
Merged

Add Embabel Agent Framework skill for Copilot cloud agent#334
jwijgerd merged 1 commit into
mainfrom
copilot/create-skill-embabel-agent

Conversation

Copilot AI commented Apr 11, 2026

Copy link
Copy Markdown
Contributor

Adds a Copilot agent skill describing Embabel Agent Framework concepts and how to build agents with Embabel, including the current akces-agentic module integration.

Skill contents

  • Embabel core concepts: @Agent, @Action, @AchievesGoal, @Condition, Blackboard pattern, GOAP planning, AgentProcess lifecycle, domain objects with @Tool, execution modes (Focused/Closed/Open), subagents, @State, configuration
  • Akces integration architecture: @AgenticAggregateInfo, AgenticAggregate<S>, TaskAwareState/MemoryAwareState, built-in commands/events (AssignTaskCommand, AgentTaskAssignedEvent, AgentTaskFinishedEvent, MemoryStoredEvent, MemoryRevokedEvent), agent resolution logic, Blackboard population, tick-based execution flow
  • Step-by-step guide for creating an agentic aggregate backed by an Embabel agent
  • Design rules: singleton aggregates, agent naming conventions for auto-resolution, immutable state contracts, event registration requirements, idle-poll tick advancement model

Location

.github/skills/embabel-agent-framework/SKILL.md — automatically discovered by Copilot when relevant to the user's prompt.

@jwijgerd
jwijgerd marked this pull request as ready for review April 11, 2026 11:29
Copilot AI review requested due to automatic review settings April 11, 2026 11:29
@jwijgerd
jwijgerd merged commit 56f1081 into main Apr 11, 2026
6 checks passed
@jwijgerd
jwijgerd deleted the copilot/create-skill-embabel-agent branch April 11, 2026 11:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new GitHub Copilot skill document describing Embabel Agent Framework concepts and how Akces’ akces-agentic module integrates with Embabel (agentic aggregates, memory/tasks, and the tick-based runtime model).

Changes:

  • Introduces a new skill at .github/skills/embabel-agent-framework/SKILL.md with Embabel concepts (@Agent, @Action, GOAP/Blackboard, lifecycle, execution modes).
  • Documents Akces agentic integration components (@AgenticAggregateInfo, built-in commands/events, memory/tasks state interfaces).
  • Provides a step-by-step guide and “design rules” for building an agentic aggregate backed by an Embabel agent.

- **Akces** provides the CQRS/Event Sourcing infrastructure (Kafka, state management, schema registry).
- **Embabel** provides the AI agent runtime (GOAP planning, LLM integration, Blackboard).

When a command or event arrives at an agentic aggregate, the Akces runtime creates an Embabel `AgentProcess`, populates its Blackboard with the aggregate's current state, memories, and context, then lets the Embabel planning engine decide which actions to execute. The resulting `DomainEvent` objects are collected from the Blackboard and fed back into the Akces event-sourcing pipeline.
- `"state"` — the current aggregate state
- `"agenticAggregateId"` — the aggregate identifier
- `"memories"` — the list of current memories from state
- `"aggregateServices"` — all known aggregate service records
Extends `Aggregate<S>` with:

- `getCreateDomainEvent()` — returns the domain event to auto-create initial state (agentic aggregates are singletons).
- `getMemories(S state)` — extracts memories from the state.
Comment on lines +338 to +346
The state must be a Java record implementing `AggregateState`, `TaskAwareState`, and optionally `MemoryAwareState`:

```java
@AggregateStateInfo(type = "MyAgentState", version = 1)
public record MyAgentState(
String id,
List<AssignedTask> assignedTasks,
List<AgenticAggregateMemory> memories
) implements AggregateState, TaskAwareState, MemoryAwareState {
Comment on lines +329 to +332
3. The process is **not** ticked immediately. The partition's idle-poll cycle (`resumeAgentTasks`) exclusively drives all `AgentProcess` advancement via `AgentProcessSingleTickRunner.tick()`.
4. After each tick, `AgentProcessResultTranslator.collectEvents()` drains `DomainEvent` objects from the Blackboard and hides them.
5. Collected events are fed into the Akces event-sourcing pipeline.
6. When `AgentProcess.getFinished()` returns `true`, an `AgentTaskFinishedEvent` is emitted with the `AgentProcessStatusCode`.
Comment on lines +510 to +511
4. **Domain events produced by agents must be registered** — either as produced events on the `@CommandHandler`/`@EventHandler` or declared in `agentProducedErrors`.
5. **Undeclared error events are silently excluded** — they are logged at WARN level but not persisted. Always declare error events in `agentProducedErrors`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants