agent/docs/RFC-GO-AGENT-MODELS.md
Snider be78c27561 docs: add full RFC specs for agent dispatch
AX principles + go/agent + core/agent + php/agent specs.
Temporary — needed in-repo until core-agent mount bug is fixed.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-30 19:51:55 +01:00

52 KiB

core-agent — Models

Structs, interfaces, and types extracted from source by Codex. Packages: agentic, brain, lib, messages, monitor, setup.

agentic

Import: dappco.re/go/agent/pkg/agentic Files: 27

Package agentic provides MCP tools for agent orchestration. Prepares workspaces and dispatches subagents.

Types

AgentsConfig

  • File: queue.go
  • Purpose: AgentsConfig is the root of config/agent.yaml.
  • Fields:
    • Version int — Configuration version number.
    • Dispatch DispatchConfig — Dispatch-specific configuration.
    • Concurrency map[string]ConcurrencyLimit — Per-pool concurrency settings.
    • Rates map[string]RateConfig — Per-pool rate-limit configuration.

BlockedInfo

  • File: status.go
  • Purpose: BlockedInfo shows a workspace that needs human input.
  • Fields:
    • Name string — Name of the item.
    • Repo string — Repository name.
    • Agent string — Agent name or pool identifier.
    • Question string — Blocking question that needs an answer.

ChildRef

  • File: epic.go
  • Purpose: ChildRef references a child issue.
  • Fields:
    • Number int — Numeric identifier.
    • Title string — Title text.
    • URL string — URL for the item.

CompletionEvent

  • File: events.go
  • Purpose: CompletionEvent is emitted when a dispatched agent finishes. Written to ~/.core/workspace/events.jsonl as append-only log.
  • Fields:
    • Type string — Type discriminator.
    • Agent string — Agent name or pool identifier.
    • Workspace string — Workspace identifier or path.
    • Status string — Current status string.
    • Timestamp string — Timestamp recorded for the event.

ConcurrencyLimit

  • File: queue.go
  • Purpose: ConcurrencyLimit supports both flat (int) and nested (map with total + per-model) formats.
  • Fields:
    • Total int — Total concurrent dispatches allowed for the pool.
    • Models map[string]int — Per-model concurrency caps.

CreatePRInput

  • File: pr.go
  • Purpose: CreatePRInput is the input for agentic_create_pr.
  • Fields:
    • Workspace string — workspace name (e.g. "mcp-1773581873")
    • Title string — PR title (default: task description)
    • Body string — PR body (default: auto-generated)
    • Base string — base branch (default: "main")
    • DryRun bool — preview without creating

CreatePROutput

  • File: pr.go
  • Purpose: CreatePROutput is the output for agentic_create_pr.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • PRURL string — Pull request URL.
    • PRNum int — Pull request number.
    • Title string — Title text.
    • Branch string — Branch name.
    • Repo string — Repository name.
    • Pushed bool — Whether changes were pushed upstream.

DispatchConfig

  • File: queue.go
  • Purpose: DispatchConfig controls agent dispatch behaviour.
  • Fields:
    • DefaultAgent string — Default agent used when one is not supplied.
    • DefaultTemplate string — Default prompt template slug.
    • WorkspaceRoot string — Root directory used for prepared workspaces.

DispatchInput

  • File: dispatch.go
  • Purpose: DispatchInput is the input for agentic_dispatch.
  • Fields:
    • Repo string — Target repo (e.g. "go-io")
    • Org string — Forge org (default "core")
    • Task string — What the agent should do
    • Agent string — "codex" (default), "claude", "gemini"
    • Template string — "conventions", "security", "coding" (default)
    • PlanTemplate string — Plan template slug
    • Variables map[string]string — Template variable substitution
    • Persona string — Persona slug
    • Issue int — Forge issue number → workspace: task-{num}/
    • PR int — PR number → workspace: pr-{num}/
    • Branch string — Branch → workspace: {branch}/
    • Tag string — Tag → workspace: {tag}/ (immutable)
    • DryRun bool — Preview without executing

DispatchOutput

  • File: dispatch.go
  • Purpose: DispatchOutput is the output for agentic_dispatch.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Agent string — Agent name or pool identifier.
    • Repo string — Repository name.
    • WorkspaceDir string — Workspace directory path.
    • Prompt string — Rendered prompt content.
    • PID int — Process ID for the spawned agent.
    • OutputFile string — Path to the captured process output file.

DispatchSyncInput

  • File: dispatch_sync.go
  • Purpose: DispatchSyncInput is the input for a synchronous (blocking) task run.
  • Fields:
    • Org string — Forge organisation or namespace.
    • Repo string — Repository name.
    • Agent string — Agent name or pool identifier.
    • Task string — Task description.
    • Issue int — Issue number.

DispatchSyncResult

  • File: dispatch_sync.go
  • Purpose: DispatchSyncResult is the output of a synchronous task run.
  • Fields:
    • OK bool — Whether the synchronous dispatch finished successfully.
    • Status string — Current status string.
    • Error string — Error message, if the operation failed.
    • PRURL string — Pull request URL.

EpicInput

  • File: epic.go
  • Purpose: EpicInput is the input for agentic_create_epic.
  • Fields:
    • Repo string — Target repo (e.g. "go-scm")
    • Org string — Forge org (default "core")
    • Title string — Epic title
    • Body string — Epic description (above checklist)
    • Tasks []string — Sub-task titles (become child issues)
    • Labels []string — Labels for epic + children (e.g. ["agentic"])
    • Dispatch bool — Auto-dispatch agents to each child
    • Agent string — Agent type for dispatch (default "claude")
    • Template string — Prompt template for dispatch (default "coding")

EpicOutput

  • File: epic.go
  • Purpose: EpicOutput is the output for agentic_create_epic.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • EpicNumber int — Epic issue number.
    • EpicURL string — Epic issue URL.
    • Children []ChildRef — Child issues created under the epic.
    • Dispatched int — Number of child issues dispatched to agents.

ListPRsInput

  • File: pr.go
  • Purpose: ListPRsInput is the input for agentic_list_prs.
  • Fields:
    • Org string — forge org (default "core")
    • Repo string — specific repo, or empty for all
    • State string — "open" (default), "closed", "all"
    • Limit int — max results (default 20)

ListPRsOutput

  • File: pr.go
  • Purpose: ListPRsOutput is the output for agentic_list_prs.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Count int — Number of pull requests returned.
    • PRs []PRInfo — Pull requests returned by the query.

MirrorInput

  • File: mirror.go
  • Purpose: MirrorInput is the input for agentic_mirror.
  • Fields:
    • Repo string — Specific repo, or empty for all
    • DryRun bool — Preview without pushing
    • MaxFiles int — Max files per PR (default 50, CodeRabbit limit)

MirrorOutput

  • File: mirror.go
  • Purpose: MirrorOutput is the output for agentic_mirror.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Synced []MirrorSync — Repositories that were synchronised.
    • Skipped []string — Skipped items or skip reason, depending on context.
    • Count int — Number of repos included in the mirror result.

MirrorSync

  • File: mirror.go
  • Purpose: MirrorSync records one repo sync.
  • Fields:
    • Repo string — Repository name.
    • CommitsAhead int — Number of commits ahead of the mirror target.
    • FilesChanged int — Number of changed files included in the sync.
    • PRURL string — Pull request URL.
    • Pushed bool — Whether changes were pushed upstream.
    • Skipped string — Skipped items or skip reason, depending on context.

PRInfo

  • File: pr.go
  • Purpose: PRInfo represents a pull request.
  • Fields:
    • Repo string — Repository name.
    • Number int — Numeric identifier.
    • Title string — Title text.
    • State string — Current state value.
    • Author string — Pull request author name.
    • Branch string — Branch name.
    • Base string — Base branch for the pull request.
    • Labels []string — Label names applied to the issue or pull request.
    • Mergeable bool — Whether Forge reports the PR as mergeable.
    • URL string — URL for the item.

Phase

  • File: plan.go
  • Purpose: Phase represents a phase within an implementation plan.
  • Fields:
    • Number int — Numeric identifier.
    • Name string — Name of the item.
    • Status string — pending, in_progress, done
    • Criteria []string — Acceptance criteria for the phase.
    • Tests int — Expected test count for the phase.
    • Notes string — Free-form notes attached to the object.

Plan

  • File: plan.go
  • Purpose: Plan represents an implementation plan for agent work.
  • Fields:
    • ID string — Stable identifier.
    • Title string — Title text.
    • Status string — draft, ready, in_progress, needs_verification, verified, approved
    • Repo string — Repository name.
    • Org string — Forge organisation or namespace.
    • Objective string — Plan objective.
    • Phases []Phase — Plan phases.
    • Notes string — Free-form notes attached to the object.
    • Agent string — Agent name or pool identifier.
    • CreatedAt time.Time — Creation timestamp.
    • UpdatedAt time.Time — Last-update timestamp.

PlanCreateInput

  • File: plan.go
  • Purpose: PlanCreateInput is the input for agentic_plan_create.
  • Fields:
    • Title string — Title text.
    • Objective string — Plan objective.
    • Repo string — Repository name.
    • Org string — Forge organisation or namespace.
    • Phases []Phase — Plan phases.
    • Notes string — Free-form notes attached to the object.

PlanCreateOutput

  • File: plan.go
  • Purpose: PlanCreateOutput is the output for agentic_plan_create.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • ID string — Stable identifier.
    • Path string — Filesystem path for the generated or stored item.

PlanDeleteInput

  • File: plan.go
  • Purpose: PlanDeleteInput is the input for agentic_plan_delete.
  • Fields:
    • ID string — Stable identifier.

PlanDeleteOutput

  • File: plan.go
  • Purpose: PlanDeleteOutput is the output for agentic_plan_delete.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Deleted string — Identifier of the deleted plan.

PlanListInput

  • File: plan.go
  • Purpose: PlanListInput is the input for agentic_plan_list.
  • Fields:
    • Status string — Current status string.
    • Repo string — Repository name.

PlanListOutput

  • File: plan.go
  • Purpose: PlanListOutput is the output for agentic_plan_list.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Count int — Number of plans returned.
    • Plans []Plan — Plans returned by the query.

PlanReadInput

  • File: plan.go
  • Purpose: PlanReadInput is the input for agentic_plan_read.
  • Fields:
    • ID string — Stable identifier.

PlanReadOutput

  • File: plan.go
  • Purpose: PlanReadOutput is the output for agentic_plan_read.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Plan Plan — Returned plan data.

PlanUpdateInput

  • File: plan.go
  • Purpose: PlanUpdateInput is the input for agentic_plan_update.
  • Fields:
    • ID string — Stable identifier.
    • Status string — Current status string.
    • Title string — Title text.
    • Objective string — Plan objective.
    • Phases []Phase — Plan phases.
    • Notes string — Free-form notes attached to the object.
    • Agent string — Agent name or pool identifier.

PlanUpdateOutput

  • File: plan.go
  • Purpose: PlanUpdateOutput is the output for agentic_plan_update.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Plan Plan — Returned plan data.

PrepInput

  • File: prep.go
  • Purpose: PrepInput is the input for agentic_prep_workspace. One of Issue, PR, Branch, or Tag is required.
  • Fields:
    • Repo string — required: e.g. "go-io"
    • Org string — default "core"
    • Task string — task description
    • Agent string — agent type
    • Issue int — Forge issue → workspace: task-{num}/
    • PR int — PR number → workspace: pr-{num}/
    • Branch string — branch → workspace: {branch}/
    • Tag string — tag → workspace: {tag}/ (immutable)
    • Template string — prompt template slug
    • PlanTemplate string — plan template slug
    • Variables map[string]string — template variable substitution
    • Persona string — persona slug
    • DryRun bool — preview without executing

PrepOutput

  • File: prep.go
  • Purpose: PrepOutput is the output for agentic_prep_workspace.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • WorkspaceDir string — Workspace directory path.
    • RepoDir string — Local repository checkout directory.
    • Branch string — Branch name.
    • Prompt string — Rendered prompt content.
    • Memories int — Number of recalled memories injected into the prompt.
    • Consumers int — Number of dependent modules or consumers discovered.
    • Resumed bool — Whether the workspace was resumed instead of freshly prepared.

PrepSubsystem

  • File: prep.go
  • Purpose: PrepSubsystem provides agentic MCP tools for workspace orchestration. Agent lifecycle events are broadcast via c.ACTION(messages.AgentCompleted{}).
  • Fields:
    • core *core.Core — Core framework instance for IPC, Config, Lock
    • forge *forge.Forge — Forge client used for issue, PR, and repository operations.
    • forgeURL string — Forge base URL.
    • forgeToken string — Forge API token.
    • brainURL string — OpenBrain API base URL.
    • brainKey string — OpenBrain API key.
    • codePath string — Local code root used for prepared workspaces.
    • client *http.Client — HTTP client used for remote and Forge requests.
    • drainMu sync.Mutex — Mutex guarding queue-drain operations.
    • pokeCh chan struct{} — Channel used to wake the queue runner.
    • frozen bool — Whether queue processing is frozen during shutdown.
    • backoff map[string]time.Time — pool → paused until
    • failCount map[string]int — pool → consecutive fast failures

RateConfig

  • File: queue.go
  • Purpose: RateConfig controls pacing between task dispatches.
  • Fields:
    • ResetUTC string — Daily quota reset time (UTC), e.g. "06:00"
    • DailyLimit int — Max requests per day (0 = unknown)
    • MinDelay int — Minimum seconds between task starts
    • SustainedDelay int — Delay when pacing for full-day use
    • BurstWindow int — Hours before reset where burst kicks in
    • BurstDelay int — Delay during burst window

RateLimitInfo

  • File: review_queue.go
  • Purpose: RateLimitInfo tracks CodeRabbit rate limit state.
  • Fields:
    • Limited bool — Whether the pool is currently rate-limited.
    • RetryAt time.Time — Time when the backoff expires.
    • Message string — Human-readable status message.

RemoteDispatchInput

  • File: remote.go
  • Purpose: RemoteDispatchInput dispatches a task to a remote core-agent over HTTP.
  • Fields:
    • Host string — Remote agent host (e.g. "charon", "10.69.69.165:9101")
    • Repo string — Target repo
    • Task string — What the agent should do
    • Agent string — Agent type (default: claude:opus)
    • Template string — Prompt template
    • Persona string — Persona slug
    • Org string — Forge org (default: core)
    • Variables map[string]string — Template variables

RemoteDispatchOutput

  • File: remote.go
  • Purpose: RemoteDispatchOutput is the response from a remote dispatch.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Host string — Remote host handling the request.
    • Repo string — Repository name.
    • Agent string — Agent name or pool identifier.
    • WorkspaceDir string — Workspace directory path.
    • PID int — Process ID for the spawned agent.
    • Error string — Error message, if the operation failed.

RemoteStatusInput

  • File: remote_status.go
  • Purpose: RemoteStatusInput queries a remote core-agent for workspace status.
  • Fields:
    • Host string — Remote agent host (e.g. "charon")

RemoteStatusOutput

  • File: remote_status.go
  • Purpose: RemoteStatusOutput is the response from a remote status check.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Host string — Remote host handling the request.
    • Stats StatusOutput — Status snapshot returned by the remote host.
    • Error string — Error message, if the operation failed.

ResumeInput

  • File: resume.go
  • Purpose: ResumeInput is the input for agentic_resume.
  • Fields:
    • Workspace string — workspace name (e.g. "go-scm-1773581173")
    • Answer string — answer to the blocked question (written to ANSWER.md)
    • Agent string — override agent type (default: same as original)
    • DryRun bool — preview without executing

ResumeOutput

  • File: resume.go
  • Purpose: ResumeOutput is the output for agentic_resume.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Workspace string — Workspace identifier or path.
    • Agent string — Agent name or pool identifier.
    • PID int — Process ID for the spawned agent.
    • OutputFile string — Path to the captured process output file.
    • Prompt string — Rendered prompt content.

ReviewQueueInput

  • File: review_queue.go
  • Purpose: ReviewQueueInput controls the review queue runner.
  • Fields:
    • Limit int — Max PRs to process this run (default: 4)
    • Reviewer string — "coderabbit" (default), "codex", or "both"
    • DryRun bool — Preview without acting
    • LocalOnly bool — Run review locally, don't touch GitHub

ReviewQueueOutput

  • File: review_queue.go
  • Purpose: ReviewQueueOutput reports what happened.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Processed []ReviewResult — Review results that were processed.
    • Skipped []string — Skipped items or skip reason, depending on context.
    • RateLimit *RateLimitInfo — Rate-limit information, when present.

ReviewResult

  • File: review_queue.go
  • Purpose: ReviewResult is the outcome of reviewing one repo.
  • Fields:
    • Repo string — Repository name.
    • Verdict string — clean, findings, rate_limited, error
    • Findings int — Number of findings (0 = clean)
    • Action string — merged, fix_dispatched, skipped, waiting
    • Detail string — Additional detail about the review result.

ScanInput

  • File: scan.go
  • Purpose: ScanInput is the input for agentic_scan.
  • Fields:
    • Org string — default "core"
    • Labels []string — filter by labels (default: agentic, help-wanted, bug)
    • Limit int — max issues to return

ScanIssue

  • File: scan.go
  • Purpose: ScanIssue is a single actionable issue.
  • Fields:
    • Repo string — Repository name.
    • Number int — Numeric identifier.
    • Title string — Title text.
    • Labels []string — Label names applied to the issue or pull request.
    • Assignee string — Assignee.
    • URL string — URL for the item.

ScanOutput

  • File: scan.go
  • Purpose: ScanOutput is the output for agentic_scan.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Count int — Number of issues returned by the scan.
    • Issues []ScanIssue — Issues returned by the scan.

ShutdownInput

  • File: shutdown.go
  • Purpose: ShutdownInput is the input for agentic_dispatch_shutdown.
  • Fields: none

ShutdownOutput

  • File: shutdown.go
  • Purpose: ShutdownOutput is the output for agentic_dispatch_shutdown.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Running int — Running value.
    • Queued int — Number of queued items.
    • Message string — Human-readable status message.

StatusInput

  • File: status.go
  • Purpose: StatusInput is the input for agentic_status.
  • Fields:
    • Workspace string — specific workspace name, or empty for all
    • Limit int — max results (default 100)
    • Status string — filter: running, completed, failed, blocked

StatusOutput

  • File: status.go
  • Purpose: StatusOutput is the output for agentic_status. Returns stats by default. Only blocked workspaces are listed (they need attention).
  • Fields:
    • Total int — Total number of tracked workspaces.
    • Running int — Running value.
    • Queued int — Number of queued items.
    • Completed int — Number of completed items.
    • Failed int — Failed results.
    • Blocked []BlockedInfo — List of blocked values.

WatchInput

  • File: watch.go
  • Purpose: WatchInput is the input for agentic_watch.
  • Fields:
    • Workspaces []string — Workspaces to watch. If empty, watches all running/queued workspaces.
    • PollInterval int — PollInterval in seconds (default: 5)
    • Timeout int — Timeout in seconds (default: 600 = 10 minutes)

WatchOutput

  • File: watch.go
  • Purpose: WatchOutput is the result when all watched workspaces complete.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Completed []WatchResult — Number of completed items.
    • Failed []WatchResult — Failed results.
    • Duration string — Duration string for the event or backoff.

WatchResult

  • File: watch.go
  • Purpose: WatchResult describes one completed workspace.
  • Fields:
    • Workspace string — Workspace identifier or path.
    • Agent string — Agent name or pool identifier.
    • Repo string — Repository name.
    • Status string — Current status string.
    • PRURL string — Pull request URL.

WorkspaceStatus

  • File: status.go
  • Purpose: WorkspaceStatus represents the current state of an agent workspace.
  • Fields:
    • Status string — running, completed, blocked, failed
    • Agent string — gemini, claude, codex
    • Repo string — target repo
    • Org string — forge org (e.g. "core")
    • Task string — task description
    • Branch string — git branch name
    • Issue int — forge issue number
    • PID int — process ID (if running)
    • StartedAt time.Time — when dispatch started
    • UpdatedAt time.Time — last status change
    • Question string — from BLOCKED.md
    • Runs int — how many times dispatched/resumed
    • PRURL string — pull request URL (after PR created)

Functions

AgentName

  • File: paths.go
  • Signature: func AgentName() string
  • Purpose: AgentName returns the name of this agent based on hostname. Checks AGENT_NAME env var first.

CoreRoot

  • File: paths.go
  • Signature: func CoreRoot() string
  • Purpose: CoreRoot returns the root directory for core ecosystem files. Checks CORE_WORKSPACE env var first, falls back to ~/Code/.core.

DefaultBranch

  • File: paths.go
  • Signature: func DefaultBranch(repoDir string) string
  • Purpose: DefaultBranch detects the default branch of a repo (main, master, etc.).

GitHubOrg

  • File: paths.go
  • Signature: func GitHubOrg() string
  • Purpose: GitHubOrg returns the GitHub org for mirror operations.

LocalFs

  • File: paths.go
  • Signature: func LocalFs() *core.Fs
  • Purpose: LocalFs returns an unrestricted filesystem instance for use by other packages.

NewPrep

  • File: prep.go
  • Signature: func NewPrep() *PrepSubsystem
  • Purpose: NewPrep creates an agentic subsystem.

PlansRoot

  • File: paths.go
  • Signature: func PlansRoot() string
  • Purpose: PlansRoot returns the root directory for agent plans.

ReadStatus

  • File: status.go
  • Signature: func ReadStatus(wsDir string) (*WorkspaceStatus, error)
  • Purpose: ReadStatus parses the status.json in a workspace directory.

Register

  • File: register.go
  • Signature: func Register(c *core.Core) core.Result
  • Purpose: Register is the service factory for core.WithService. Returns the PrepSubsystem instance — WithService auto-discovers the name from the package path and registers it. Startable/Stoppable/HandleIPCEvents are auto-discovered by RegisterService.

RegisterHandlers

  • File: handlers.go
  • Signature: func RegisterHandlers(c *core.Core, s *PrepSubsystem)
  • Purpose: RegisterHandlers registers the post-completion pipeline as discrete IPC handlers. Each handler listens for a specific message and emits the next in the chain:

WorkspaceRoot

  • File: paths.go
  • Signature: func WorkspaceRoot() string
  • Purpose: WorkspaceRoot returns the root directory for agent workspaces. Checks CORE_WORKSPACE env var first, falls back to ~/Code/.core/workspace.

Methods

ConcurrencyLimit.UnmarshalYAML

  • File: queue.go
  • Signature: func (*ConcurrencyLimit) UnmarshalYAML(value *yaml.Node) error
  • Purpose: UnmarshalYAML handles both int and map forms.

PrepSubsystem.DispatchSync

  • File: dispatch_sync.go
  • Signature: func (*PrepSubsystem) DispatchSync(ctx context.Context, input DispatchSyncInput) DispatchSyncResult
  • Purpose: DispatchSync preps a workspace, spawns the agent directly (no queue, no concurrency check), and blocks until the agent completes.

PrepSubsystem.Name

  • File: prep.go
  • Signature: func (*PrepSubsystem) Name() string
  • Purpose: Name implements mcp.Subsystem.

PrepSubsystem.OnShutdown

  • File: prep.go
  • Signature: func (*PrepSubsystem) OnShutdown(ctx context.Context) error
  • Purpose: OnShutdown implements core.Stoppable — freezes the queue.

PrepSubsystem.OnStartup

  • File: prep.go
  • Signature: func (*PrepSubsystem) OnStartup(ctx context.Context) error
  • Purpose: OnStartup implements core.Startable — starts the queue runner and registers commands.

PrepSubsystem.Poke

  • File: runner.go
  • Signature: func (*PrepSubsystem) Poke()
  • Purpose: Poke signals the runner to check the queue immediately. Non-blocking — if a poke is already pending, this is a no-op.

PrepSubsystem.RegisterTools

  • File: prep.go
  • Signature: func (*PrepSubsystem) RegisterTools(server *mcp.Server)
  • Purpose: RegisterTools implements mcp.Subsystem.

PrepSubsystem.SetCore

  • File: prep.go
  • Signature: func (*PrepSubsystem) SetCore(c *core.Core)
  • Purpose: SetCore wires the Core framework instance for IPC, Config, and Lock access.

PrepSubsystem.Shutdown

  • File: prep.go
  • Signature: func (*PrepSubsystem) Shutdown(_ context.Context) error
  • Purpose: Shutdown implements mcp.SubsystemWithShutdown.

PrepSubsystem.StartRunner

  • File: runner.go
  • Signature: func (*PrepSubsystem) StartRunner()
  • Purpose: StartRunner begins the background queue runner. Queue is frozen by default — use agentic_dispatch_start to unfreeze, or set CORE_AGENT_DISPATCH=1 to auto-start.

PrepSubsystem.TestBuildPrompt

  • File: prep.go
  • Signature: func (*PrepSubsystem) TestBuildPrompt(ctx context.Context, input PrepInput, branch, repoPath string) (string, int, int)
  • Purpose: TestBuildPrompt exposes buildPrompt for CLI testing.

PrepSubsystem.TestPrepWorkspace

  • File: prep.go
  • Signature: func (*PrepSubsystem) TestPrepWorkspace(ctx context.Context, input PrepInput) (*mcp.CallToolResult, PrepOutput, error)
  • Purpose: TestPrepWorkspace exposes prepWorkspace for CLI testing.

brain

Import: dappco.re/go/agent/pkg/brain Files: 6

Package brain provides an MCP subsystem that proxies OpenBrain knowledge store operations to the Laravel php-agentic backend via the IDE bridge.

Types

BrainProvider

  • File: provider.go
  • Purpose: BrainProvider wraps the brain Subsystem as a service provider with REST endpoints. It delegates to the same IDE bridge that the MCP tools use.
  • Fields:
    • bridge *ide.Bridge — IDE bridge used to access php-agentic services.
    • hub *ws.Hub — WebSocket hub exposed by the provider.

ConversationInput

  • File: messaging.go
  • Purpose: ConversationInput selects the agent thread to load.
  • Fields:
    • Agent string — Agent name or pool identifier.

ConversationOutput

  • File: messaging.go
  • Purpose: ConversationOutput returns a direct message thread with another agent.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Messages []MessageItem — Conversation or inbox messages.

DirectSubsystem

  • File: direct.go
  • Purpose: DirectSubsystem calls the OpenBrain HTTP API without the IDE bridge.
  • Fields:
    • apiURL string — Base URL for direct OpenBrain HTTP calls.
    • apiKey string — API key for direct OpenBrain HTTP calls.
    • client *http.Client — HTTP client used for direct requests.

ForgetInput

  • File: tools.go
  • Purpose: ForgetInput is the input for brain_forget.
  • Fields:
    • ID string — Stable identifier.
    • Reason string — Reason string supplied with the result.

ForgetOutput

  • File: tools.go
  • Purpose: ForgetOutput is the output for brain_forget.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Forgotten string — Identifier of the forgotten memory.
    • Timestamp time.Time — Timestamp recorded for the event.

InboxInput

  • File: messaging.go
  • Purpose: InboxInput selects which agent inbox to read.
  • Fields:
    • Agent string — Agent name or pool identifier.

InboxOutput

  • File: messaging.go
  • Purpose: InboxOutput returns the latest direct messages for an agent.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Messages []MessageItem — Conversation or inbox messages.

ListInput

  • File: tools.go
  • Purpose: ListInput is the input for brain_list.
  • Fields:
    • Project string — Project name associated with the request.
    • Type string — Type discriminator.
    • AgentID string — Agent identifier used by the brain service.
    • Limit int — Maximum number of items to return.

ListOutput

  • File: tools.go
  • Purpose: ListOutput is the output for brain_list.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Count int — Total number of returned items.
    • Memories []Memory — Returned memories or memory count, depending on context.

Memory

  • File: tools.go
  • Purpose: Memory is a single memory entry returned by recall or list.
  • Fields:
    • ID string — Stable identifier.
    • AgentID string — Agent identifier used by the brain service.
    • Type string — Type discriminator.
    • Content string — Message or memory content.
    • Tags []string — Tag values attached to the memory.
    • Project string — Project name associated with the request.
    • Confidence float64 — Confidence score attached to the memory.
    • SupersedesID string — Identifier of the superseded memory.
    • ExpiresAt string — Expiration timestamp, when set.
    • CreatedAt string — Creation timestamp.
    • UpdatedAt string — Last-update timestamp.

MessageItem

  • File: messaging.go
  • Purpose: MessageItem is one inbox or conversation message.
  • Fields:
    • ID int — Stable identifier.
    • From string — Message sender.
    • To string — Message recipient.
    • Subject string — Message subject.
    • Content string — Message or memory content.
    • Read bool — Whether the message has been marked as read.
    • CreatedAt string — Creation timestamp.

RecallFilter

  • File: tools.go
  • Purpose: RecallFilter holds optional filter criteria for brain_recall.
  • Fields:
    • Project string — Project name associated with the request.
    • Type any — Type discriminator.
    • AgentID string — Agent identifier used by the brain service.
    • MinConfidence float64 — Minimum confidence required when filtering recalls.

RecallInput

  • File: tools.go
  • Purpose: RecallInput is the input for brain_recall.
  • Fields:
    • Query string — Recall query text.
    • TopK int — Maximum number of recall matches to return.
    • Filter RecallFilter — Recall filter applied to the query.

RecallOutput

  • File: tools.go
  • Purpose: RecallOutput is the output for brain_recall.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • Count int — Total number of returned items.
    • Memories []Memory — Returned memories or memory count, depending on context.

RememberInput

  • File: tools.go
  • Purpose: RememberInput is the input for brain_remember.
  • Fields:
    • Content string — Message or memory content.
    • Type string — Type discriminator.
    • Tags []string — Tag values attached to the memory.
    • Project string — Project name associated with the request.
    • Confidence float64 — Confidence score attached to the memory.
    • Supersedes string — Identifier of the memory this write supersedes.
    • ExpiresIn int — Relative expiry in seconds.

RememberOutput

  • File: tools.go
  • Purpose: RememberOutput is the output for brain_remember.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • MemoryID string — Identifier of the stored memory.
    • Timestamp time.Time — Timestamp recorded for the event.

SendInput

  • File: messaging.go
  • Purpose: SendInput sends a direct message to another agent.
  • Fields:
    • To string — Message recipient.
    • Content string — Message or memory content.
    • Subject string — Message subject.

SendOutput

  • File: messaging.go
  • Purpose: SendOutput reports the created direct message.
  • Fields:
    • Success bool — Whether the operation succeeded.
    • ID int — Stable identifier.
    • To string — Message recipient.

Subsystem

  • File: brain.go
  • Purpose: Subsystem proxies brain_* MCP tools through the shared IDE bridge.
  • Fields:
    • bridge *ide.Bridge — IDE bridge used to proxy requests into php-agentic.

Functions

New

  • File: brain.go
  • Signature: func New(bridge *ide.Bridge) *Subsystem
  • Purpose: New creates a bridge-backed brain subsystem.

NewDirect

  • File: direct.go
  • Signature: func NewDirect() *DirectSubsystem
  • Purpose: NewDirect creates a direct HTTP brain subsystem.

NewProvider

  • File: provider.go
  • Signature: func NewProvider(bridge *ide.Bridge, hub *ws.Hub) *BrainProvider
  • Purpose: NewProvider creates a brain provider that proxies to Laravel via the IDE bridge. The WS hub is used to emit brain events. Pass nil for hub if not needed.

Register

  • File: register.go
  • Signature: func Register(c *core.Core) core.Result
  • Purpose: Register is the service factory for core.WithService. Returns the DirectSubsystem — WithService auto-registers it.

Methods

BrainProvider.BasePath

  • File: provider.go
  • Signature: func (*BrainProvider) BasePath() string
  • Purpose: BasePath implements api.RouteGroup.

BrainProvider.Channels

  • File: provider.go
  • Signature: func (*BrainProvider) Channels() []string
  • Purpose: Channels implements provider.Streamable.

BrainProvider.Describe

  • File: provider.go
  • Signature: func (*BrainProvider) Describe() []api.RouteDescription
  • Purpose: Describe implements api.DescribableGroup.

BrainProvider.Element

  • File: provider.go
  • Signature: func (*BrainProvider) Element() provider.ElementSpec
  • Purpose: Element implements provider.Renderable.

BrainProvider.Name

  • File: provider.go
  • Signature: func (*BrainProvider) Name() string
  • Purpose: Name implements api.RouteGroup.

BrainProvider.RegisterRoutes

  • File: provider.go
  • Signature: func (*BrainProvider) RegisterRoutes(rg *gin.RouterGroup)
  • Purpose: RegisterRoutes implements api.RouteGroup.

DirectSubsystem.Name

  • File: direct.go
  • Signature: func (*DirectSubsystem) Name() string
  • Purpose: Name returns the MCP subsystem name.

DirectSubsystem.RegisterMessagingTools

  • File: messaging.go
  • Signature: func (*DirectSubsystem) RegisterMessagingTools(server *mcp.Server)
  • Purpose: RegisterMessagingTools adds direct agent messaging tools to an MCP server.

DirectSubsystem.RegisterTools

  • File: direct.go
  • Signature: func (*DirectSubsystem) RegisterTools(server *mcp.Server)
  • Purpose: RegisterTools adds the direct OpenBrain tools to an MCP server.

DirectSubsystem.Shutdown

  • File: direct.go
  • Signature: func (*DirectSubsystem) Shutdown(_ context.Context) error
  • Purpose: Shutdown closes the direct subsystem without additional cleanup.

Subsystem.Name

  • File: brain.go
  • Signature: func (*Subsystem) Name() string
  • Purpose: Name returns the MCP subsystem name.

Subsystem.RegisterTools

  • File: brain.go
  • Signature: func (*Subsystem) RegisterTools(server *mcp.Server)
  • Purpose: RegisterTools adds the bridge-backed brain tools to an MCP server.

Subsystem.Shutdown

  • File: brain.go
  • Signature: func (*Subsystem) Shutdown(_ context.Context) error
  • Purpose: Shutdown closes the subsystem without additional cleanup.

lib

Import: dappco.re/go/agent/pkg/lib Files: 1

Package lib provides embedded content for agent dispatch. Prompts, tasks, flows, personas, and workspace templates.

Structure:

prompt/      — System prompts (HOW to work)
task/        — Structured task plans (WHAT to do)
task/code/   — Code-specific tasks (review, refactor, etc.)
flow/        — Build/release workflows per language/tool
persona/     — Domain/role system prompts (WHO you are)
workspace/   — Agent workspace templates (WHERE to work)

Usage:

r := lib.Prompt("coding")        // r.Value.(string)
r := lib.Task("code/review")     // r.Value.(string)
r := lib.Persona("secops/dev")   // r.Value.(string)
r := lib.Flow("go")              // r.Value.(string)
lib.ExtractWorkspace("default", "/tmp/ws", data)

Types

Bundle

  • File: lib.go
  • Purpose: Bundle holds a task's main content plus companion files.
  • Fields:
    • Main string — Primary bundled document content.
    • Files map[string]string — Number of files or bundled file contents, depending on context.

WorkspaceData

  • File: lib.go
  • Purpose: WorkspaceData is the data passed to workspace templates.
  • Fields:
    • Repo string — Repository name.
    • Branch string — Branch name.
    • Task string — Task description.
    • Agent string — Agent name or pool identifier.
    • Language string — Detected repository language.
    • Prompt string — Rendered prompt content.
    • Persona string — Persona slug injected into the workspace template.
    • Flow string — Workflow content or slug injected into the workspace template.
    • Context string — Additional context injected into a workspace template.
    • Recent string — Recent-change context injected into a workspace template.
    • Dependencies string — Dependency context injected into a workspace template.
    • Conventions string — Coding-convention guidance injected into a workspace template.
    • RepoDescription string — Repository description injected into the workspace template.
    • BuildCmd string — Build command injected into workspace templates.
    • TestCmd string — Test command injected into workspace templates.

Functions

ExtractWorkspace

  • File: lib.go
  • Signature: func ExtractWorkspace(tmplName, targetDir string, data *WorkspaceData) error
  • Purpose: ExtractWorkspace creates an agent workspace from a template. Template names: "default", "security", "review".

Flow

  • File: lib.go
  • Signature: func Flow(slug string) core.Result
  • Purpose: Flow reads a build/release workflow by slug.

ListFlows

  • File: lib.go
  • Signature: func ListFlows() []string
  • Purpose: Lists embedded workflow slugs from the flow bundle.

ListPersonas

  • File: lib.go
  • Signature: func ListPersonas() []string
  • Purpose: Lists embedded persona paths from the persona bundle.

ListPrompts

  • File: lib.go
  • Signature: func ListPrompts() []string
  • Purpose: Lists embedded prompt slugs from the prompt bundle.

ListTasks

  • File: lib.go
  • Signature: func ListTasks() []string
  • Purpose: Lists embedded task slugs by walking the task bundle.

ListWorkspaces

  • File: lib.go
  • Signature: func ListWorkspaces() []string
  • Purpose: Lists embedded workspace template names from the workspace bundle.

Persona

  • File: lib.go
  • Signature: func Persona(path string) core.Result
  • Purpose: Persona reads a domain/role persona by path.

Prompt

  • File: lib.go
  • Signature: func Prompt(slug string) core.Result
  • Purpose: Prompt reads a system prompt by slug.

Task

  • File: lib.go
  • Signature: func Task(slug string) core.Result
  • Purpose: Task reads a structured task plan by slug. Tries .md, .yaml, .yml.

TaskBundle

  • File: lib.go
  • Signature: func TaskBundle(slug string) core.Result
  • Purpose: TaskBundle reads a task and its companion files.

Template

  • File: lib.go
  • Signature: func Template(slug string) core.Result
  • Purpose: Template tries Prompt then Task (backwards compat).

Methods

No exported methods.

messages

Import: dappco.re/go/agent/pkg/messages Files: 1

Package messages defines IPC message types for inter-service communication within core-agent. Services emit these via c.ACTION() and handle them via c.RegisterAction(). No service imports another — they share only these types.

c.ACTION(messages.AgentCompleted{Agent: "codex", Repo: "go-io", Status: "completed"})

Types

AgentCompleted

  • File: messages.go
  • Purpose: AgentCompleted is broadcast when a subagent process exits.
  • Fields:
    • Agent string — Agent name or pool identifier.
    • Repo string — Repository name.
    • Workspace string — Workspace identifier or path.
    • Status string — completed, failed, blocked

AgentStarted

  • File: messages.go
  • Purpose: AgentStarted is broadcast when a subagent process is spawned.
  • Fields:
    • Agent string — Agent name or pool identifier.
    • Repo string — Repository name.
    • Workspace string — Workspace identifier or path.

HarvestComplete

  • File: messages.go
  • Purpose: HarvestComplete is broadcast when a workspace branch is ready for review.
  • Fields:
    • Repo string — Repository name.
    • Branch string — Branch name.
    • Files int — Number of files or bundled file contents, depending on context.

HarvestRejected

  • File: messages.go
  • Purpose: HarvestRejected is broadcast when a workspace fails safety checks (binaries, size).
  • Fields:
    • Repo string — Repository name.
    • Branch string — Branch name.
    • Reason string — Reason string supplied with the result.

InboxMessage

  • File: messages.go
  • Purpose: InboxMessage is broadcast when new inter-agent messages arrive.
  • Fields:
    • New int — Number of newly observed messages.
    • Total int — Total number of items observed.

PRCreated

  • File: messages.go
  • Purpose: PRCreated is broadcast after a PR is auto-created on Forge.
  • Fields:
    • Repo string — Repository name.
    • Branch string — Branch name.
    • PRURL string — Pull request URL.
    • PRNum int — Pull request number.

PRMerged

  • File: messages.go
  • Purpose: PRMerged is broadcast after a PR is auto-verified and merged.
  • Fields:
    • Repo string — Repository name.
    • PRURL string — Pull request URL.
    • PRNum int — Pull request number.

PRNeedsReview

  • File: messages.go
  • Purpose: PRNeedsReview is broadcast when auto-merge fails and human attention is needed.
  • Fields:
    • Repo string — Repository name.
    • PRURL string — Pull request URL.
    • PRNum int — Pull request number.
    • Reason string — Reason string supplied with the result.

PokeQueue

  • File: messages.go
  • Purpose: PokeQueue signals the runner to drain the queue immediately.
  • Fields: none

QAResult

  • File: messages.go
  • Purpose: QAResult is broadcast after QA runs on a completed workspace.
  • Fields:
    • Workspace string — Workspace identifier or path.
    • Repo string — Repository name.
    • Passed bool — Whether QA passed.
    • Output string — Command output or QA output text.

QueueDrained

  • File: messages.go
  • Purpose: QueueDrained is broadcast when running=0 and queued=0 (genuinely empty).
  • Fields:
    • Completed int — Number of completed items.

RateLimitDetected

  • File: messages.go
  • Purpose: RateLimitDetected is broadcast when fast failures trigger agent pool backoff.
  • Fields:
    • Pool string — Agent pool that triggered the event.
    • Duration string — Duration string for the event or backoff.

Functions

No exported functions.

Methods

No exported methods.

monitor

Import: dappco.re/go/agent/pkg/monitor Files: 4

Package monitor provides a background subsystem that watches the ecosystem and pushes notifications to connected MCP clients.

Checks performed on each tick:

  • Agent completions: scans workspace for newly completed agents
  • Repo drift: checks forge for repos with unpushed/unpulled changes
  • Inbox: checks for unread agent messages

Types

ChangedRepo

  • File: sync.go
  • Purpose: ChangedRepo is a repo that has new commits.
  • Fields:
    • Repo string — Repository name.
    • Branch string — Branch name.
    • SHA string — Commit SHA.

ChannelNotifier

  • File: monitor.go
  • Purpose: ChannelNotifier pushes events to connected MCP sessions.
  • Methods:
    • ChannelSend(ctx context.Context, channel string, data any) — Sends a payload to a named notifier channel.

CheckinResponse

  • File: sync.go
  • Purpose: CheckinResponse is what the API returns for an agent checkin.
  • Fields:
    • Changed []ChangedRepo — Repos that have new commits since the agent's last checkin.
    • Timestamp int64 — Server timestamp — use as "since" on next checkin.

Options

  • File: monitor.go
  • Purpose: Options configures the monitor interval.
  • Fields:
    • Interval time.Duration — Interval between checks (default: 2 minutes)

Subsystem

  • File: monitor.go
  • Purpose: Subsystem implements mcp.Subsystem for background monitoring.
  • Fields:
    • core *core.Core — Core framework instance for IPC
    • server *mcp.Server — MCP server used to register monitor resources.
    • notifier ChannelNotifier — Channel notification relay, uses c.ACTION()
    • interval time.Duration — Interval between monitor scans.
    • cancel context.CancelFunc — Cancellation function for the monitor loop.
    • wg sync.WaitGroup — WaitGroup tracking monitor goroutines.
    • lastCompletedCount int — Track last seen state to only notify on changes
    • seenCompleted map[string]bool — workspace names we've already notified about
    • seenRunning map[string]bool — workspace names we've already sent start notification for
    • completionsSeeded bool — true after first completions check
    • lastInboxMaxID int — highest message ID seen
    • inboxSeeded bool — true after first inbox check
    • lastSyncTimestamp int64 — Unix timestamp of the last repo-sync check.
    • mu sync.Mutex — Mutex guarding monitor state.
    • poke chan struct{} — Event-driven poke channel — dispatch goroutine sends here on completion

Functions

New

  • File: monitor.go
  • Signature: func New(opts ...Options) *Subsystem
  • Purpose: New creates a monitor subsystem.

Register

  • File: register.go
  • Signature: func Register(c *core.Core) core.Result
  • Purpose: Register is the service factory for core.WithService. Returns the monitor Subsystem — WithService auto-registers it.

Methods

Subsystem.Name

  • File: monitor.go
  • Signature: func (*Subsystem) Name() string
  • Purpose: Name returns the subsystem identifier used by MCP registration.

Subsystem.OnShutdown

  • File: monitor.go
  • Signature: func (*Subsystem) OnShutdown(ctx context.Context) error
  • Purpose: OnShutdown implements core.Stoppable — stops the monitoring loop.

Subsystem.OnStartup

  • File: monitor.go
  • Signature: func (*Subsystem) OnStartup(ctx context.Context) error
  • Purpose: OnStartup implements core.Startable — starts the monitoring loop.

Subsystem.Poke

  • File: monitor.go
  • Signature: func (*Subsystem) Poke()
  • Purpose: Poke triggers an immediate check cycle. Prefer AgentStarted/AgentCompleted..

Subsystem.RegisterTools

  • File: monitor.go
  • Signature: func (*Subsystem) RegisterTools(server *mcp.Server)
  • Purpose: RegisterTools binds the monitor resource to an MCP server.

Subsystem.SetCore

  • File: monitor.go
  • Signature: func (*Subsystem) SetCore(c *core.Core)
  • Purpose: SetCore wires the Core framework instance and registers IPC handlers.

Subsystem.SetNotifier

  • File: monitor.go
  • Signature: func (*Subsystem) SetNotifier(n ChannelNotifier)
  • Purpose: SetNotifier wires up channel event broadcasting. Deprecated: Phase 3 replaces this with c.ACTION(messages.X{}).

Subsystem.Shutdown

  • File: monitor.go
  • Signature: func (*Subsystem) Shutdown(_ context.Context) error
  • Purpose: Shutdown stops the monitoring loop and waits for it to exit.

Subsystem.Start

  • File: monitor.go
  • Signature: func (*Subsystem) Start(ctx context.Context)
  • Purpose: Start begins the background monitoring loop after MCP startup.

setup

Import: dappco.re/go/agent/pkg/setup Files: 3

Package setup provides workspace setup and scaffolding using lib templates.

Types

Command

  • File: config.go
  • Purpose: Command is a named runnable command.
  • Fields:
    • Name string — Name of the item.
    • Run string — Command line to run.

ConfigData

  • File: config.go
  • Purpose: ConfigData holds the data passed to config templates.
  • Fields:
    • Name string — Name of the item.
    • Description string — Human-readable description.
    • Type string — Type discriminator.
    • Module string — Detected Go module or project module name.
    • Repository string — Repository remote in owner/name form.
    • GoVersion string — Detected Go version.
    • Targets []Target — Configured build targets.
    • Commands []Command — Generated commands or command definitions.
    • Env map[string]string — Environment variables included in generated config.

Options

  • File: setup.go
  • Purpose: Options controls setup behaviour.
  • Fields:
    • Path string — Target directory (default: cwd)
    • DryRun bool — Preview only, don't write
    • Force bool — Overwrite existing files
    • Template string — Workspace template or compatibility alias (default, review, security, agent, go, php, gui, auto)

ProjectType

  • File: detect.go
  • Purpose: ProjectType identifies what kind of project lives at a path.
  • Underlying Type: string

Target

  • File: config.go
  • Purpose: Target is a build target (os/arch pair).
  • Fields:
    • OS string — Target operating system.
    • Arch string — Target CPU architecture.

Functions

Detect

  • File: detect.go
  • Signature: func Detect(path string) ProjectType
  • Purpose: Detect identifies the project type from files present at the given path.

DetectAll

  • File: detect.go
  • Signature: func DetectAll(path string) []ProjectType
  • Purpose: DetectAll returns all project types found at the path (polyglot repos).

GenerateBuildConfig

  • File: config.go
  • Signature: func GenerateBuildConfig(path string, projType ProjectType) (string, error)
  • Purpose: GenerateBuildConfig renders a build.yaml for the detected project type.

GenerateTestConfig

  • File: config.go
  • Signature: func GenerateTestConfig(projType ProjectType) (string, error)
  • Purpose: GenerateTestConfig renders a test.yaml for the detected project type.

Run

  • File: setup.go
  • Signature: func Run(opts Options) error
  • Purpose: Run performs the workspace setup at the given path. It detects the project type, generates .core/ configs, and optionally scaffolds a workspace from a dir template.

Methods

No exported methods.