# fullsend-ai/fullsend architecture

> Architecture diagram of the GitHub repository fullsend-ai/fullsend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fullsend-ai/fullsend
- Repository: https://github.com/fullsend-ai/fullsend

## Overview

Fullsend is an autonomous software-development agent for Git-hosted organizations. Its documented user-facing loop is to triage issues, implement changes, review code, and merge; the repository also exposes organization setup and repository enrollment, plus Jira polling and runtime skill fetching. The graph highlights those product stages and the agent execution/security layer. Some links are documented at product level rather than shown in sampled call sites; those use README evidence, and uncertain wiring is omitted.

Main entry points: [`internal/harness/compose.go`](https://github.com/fullsend-ai/fullsend/blob/main/internal/harness/compose.go) (Agent harness), [`internal/runtime/pi_run.go`](https://github.com/fullsend-ai/fullsend/blob/main/internal/runtime/pi_run.go) (Agent runtime), [`internal/appsetup/appsetup.go`](https://github.com/fullsend-ai/fullsend/blob/main/internal/appsetup/appsetup.go) (App setup), [`internal/cli`](https://github.com/fullsend-ai/fullsend/tree/main/internal/cli) (Fullsend CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Product entry"]
  node_cli["Fullsend CLI"]
end

subgraph group_integration["Forge integrations"]
  node_forge["Forge APIs<br/>[forge.go]"]
  node_github["GitHub client<br/>[github.go]"]
  node_jira["Jira client<br/>[client.go]"]
  node_poller["Jira poller<br/>[poller.go]"]
  node_tracker["Tracker adapter<br/>[jira_client.go]"]
  node_status["Status comments<br/>[statuscomment.go]"]
end

subgraph group_agent["Agent execution"]
  node_harness["Agent harness<br/>[compose.go]"]
  node_runtime["Agent runtime<br/>[pi_run.go]"]
  node_sandbox["Sandbox<br/>[sandbox.go]"]
  node_security["Tool security"]
  node_resolve["Task resolution<br/>[resolve.go]"]
  node_inference["Model inference<br/>[inference.go]"]
end

subgraph group_operations["Organization operations"]
  node_setup["App setup<br/>[appsetup.go]"]
  node_enrollment["Repo enrollment<br/>[enrollment.go]"]
end

subgraph group_support["Runtime services"]
  node_fetchsvc["Skill fetch service<br/>[service.go]"]
  node_fetch[("Skill cache<br/>[cache.go]")]
  node_gitfetch["Git tree fetch<br/>[gitfetch.go]"]
  node_mint["Token mint<br/>[handler.go]"]
end

node_org(("Git organization"))

node_org -->|"initiates setup"| node_cli
node_cli -.->|"configures organization"| node_setup
node_setup -->|"uses forge APIs"| node_forge
node_setup -->|"uses GitHub"| node_github
node_setup -->|"uses token mint"| node_mint
node_cli -.->|"enrolls repositories"| node_enrollment
node_enrollment -->|"dispatches workflows"| node_forge
node_org -.->|"provides issues"| node_poller
node_poller -->|"polls Jira"| node_jira
node_tracker -->|"adapts Jira calls"| node_jira
node_status -->|"uses tracker"| node_tracker
node_org -.->|"requests agent work"| node_harness
node_harness -->|"resolves tasks"| node_resolve
node_harness -->|"fetches repository trees"| node_gitfetch
node_harness -.->|"prepares agent run"| node_runtime
node_runtime -->|"runs sandboxed"| node_sandbox
node_runtime -.->|"requests inference"| node_inference
node_runtime -.->|"enforces tool controls"| node_security
node_fetchsvc -->|"reads and writes cache"| node_fetch
node_fetchsvc -->|"fetches skill trees"| node_gitfetch

click node_cli "https://github.com/fullsend-ai/fullsend/tree/main/internal/cli"
click node_setup "https://github.com/fullsend-ai/fullsend/blob/main/internal/appsetup/appsetup.go"
click node_enrollment "https://github.com/fullsend-ai/fullsend/blob/main/internal/layers/enrollment.go"
click node_forge "https://github.com/fullsend-ai/fullsend/blob/main/internal/forge/forge.go"
click node_github "https://github.com/fullsend-ai/fullsend/blob/main/internal/forge/github/github.go"
click node_jira "https://github.com/fullsend-ai/fullsend/blob/main/internal/forge/jira/client.go"
click node_poller "https://github.com/fullsend-ai/fullsend/blob/main/internal/jirapoll/poller.go"
click node_tracker "https://github.com/fullsend-ai/fullsend/blob/main/internal/tracker/jira_client.go"
click node_status "https://github.com/fullsend-ai/fullsend/blob/main/internal/statuscomment/statuscomment.go"
click node_harness "https://github.com/fullsend-ai/fullsend/blob/main/internal/harness/compose.go"
click node_runtime "https://github.com/fullsend-ai/fullsend/blob/main/internal/runtime/pi_run.go"
click node_sandbox "https://github.com/fullsend-ai/fullsend/blob/main/internal/sandbox/sandbox.go"
click node_security "https://github.com/fullsend-ai/fullsend/blob/main/internal/security/hooks/context_suppress_posttool.py"
click node_resolve "https://github.com/fullsend-ai/fullsend/blob/main/internal/resolve/resolve.go"
click node_inference "https://github.com/fullsend-ai/fullsend/blob/main/internal/inference/inference.go"
click node_fetchsvc "https://github.com/fullsend-ai/fullsend/blob/main/internal/fetchsvc/service.go"
click node_fetch "https://github.com/fullsend-ai/fullsend/blob/main/internal/fetch/cache.go"
click node_gitfetch "https://github.com/fullsend-ai/fullsend/blob/main/internal/gitfetch/gitfetch.go"
click node_mint "https://github.com/fullsend-ai/fullsend/blob/main/internal/mintcore/handler.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli toneBlue
class node_forge,node_github,node_jira,node_poller,node_tracker,node_status toneAmber
class node_harness,node_runtime,node_sandbox,node_security,node_resolve,node_inference toneMint
class node_setup,node_enrollment toneRose
class node_fetchsvc,node_fetch,node_gitfetch,node_mint,node_org toneIndigo
```

## Components

### Product entry

- [Fullsend CLI](https://github.com/fullsend-ai/fullsend/tree/main/internal/cli): `internal/cli`

### Forge integrations

- [Forge APIs](https://github.com/fullsend-ai/fullsend/blob/main/internal/forge/forge.go): `internal/forge/forge.go`
- [GitHub client](https://github.com/fullsend-ai/fullsend/blob/main/internal/forge/github/github.go): `internal/forge/github/github.go`
- [Jira client](https://github.com/fullsend-ai/fullsend/blob/main/internal/forge/jira/client.go): `internal/forge/jira/client.go`
- [Jira poller](https://github.com/fullsend-ai/fullsend/blob/main/internal/jirapoll/poller.go): `internal/jirapoll/poller.go`
- [Tracker adapter](https://github.com/fullsend-ai/fullsend/blob/main/internal/tracker/jira_client.go): `internal/tracker/jira_client.go`
- [Status comments](https://github.com/fullsend-ai/fullsend/blob/main/internal/statuscomment/statuscomment.go): `internal/statuscomment/statuscomment.go`

### Agent execution

- [Agent harness](https://github.com/fullsend-ai/fullsend/blob/main/internal/harness/compose.go): `internal/harness/compose.go`
- [Agent runtime](https://github.com/fullsend-ai/fullsend/blob/main/internal/runtime/pi_run.go): `internal/runtime/pi_run.go`
- [Sandbox](https://github.com/fullsend-ai/fullsend/blob/main/internal/sandbox/sandbox.go): `internal/sandbox/sandbox.go`
- [Tool security](https://github.com/fullsend-ai/fullsend/blob/main/internal/security/hooks/context_suppress_posttool.py): `internal/security/hooks/context_suppress_posttool.py`
- [Task resolution](https://github.com/fullsend-ai/fullsend/blob/main/internal/resolve/resolve.go): `internal/resolve/resolve.go`
- [Model inference](https://github.com/fullsend-ai/fullsend/blob/main/internal/inference/inference.go): `internal/inference/inference.go`

### Organization operations

- [App setup](https://github.com/fullsend-ai/fullsend/blob/main/internal/appsetup/appsetup.go): `internal/appsetup/appsetup.go`
- [Repo enrollment](https://github.com/fullsend-ai/fullsend/blob/main/internal/layers/enrollment.go): `internal/layers/enrollment.go`

### Runtime services

- [Skill fetch service](https://github.com/fullsend-ai/fullsend/blob/main/internal/fetchsvc/service.go): `internal/fetchsvc/service.go`
- [Skill cache](https://github.com/fullsend-ai/fullsend/blob/main/internal/fetch/cache.go): `internal/fetch/cache.go`
- [Git tree fetch](https://github.com/fullsend-ai/fullsend/blob/main/internal/gitfetch/gitfetch.go): `internal/gitfetch/gitfetch.go`
- [Token mint](https://github.com/fullsend-ai/fullsend/blob/main/internal/mintcore/handler.go): `internal/mintcore/handler.go`

### Other components

- **Git organization**

## Connections

- Git organization → Fullsend CLI: initiates setup
- Fullsend CLI → App setup: configures organization
- App setup → Forge APIs: uses forge APIs (evidence: `internal/appsetup/appsetup.go`)
- App setup → GitHub client: uses GitHub (evidence: `internal/appsetup/appsetup.go`)
- App setup → Token mint: uses token mint (evidence: `internal/appsetup/appsetup.go`)
- Fullsend CLI → Repo enrollment: enrolls repositories
- Repo enrollment → Forge APIs: dispatches workflows (evidence: `internal/layers/enrollment.go`)
- Git organization → Jira poller: provides issues
- Jira poller → Jira client: polls Jira (evidence: `internal/jirapoll/poller.go`)
- Tracker adapter → Jira client: adapts Jira calls (evidence: `internal/tracker/jira_client.go`)
- Status comments → Tracker adapter: uses tracker (evidence: `internal/statuscomment/statuscomment.go`)
- Git organization → Agent harness: requests agent work
- Agent harness → Task resolution: resolves tasks (evidence: `internal/harness/compose.go`)
- Agent harness → Git tree fetch: fetches repository trees (evidence: `internal/harness/compose.go`)
- Agent harness → Agent runtime: prepares agent run
- Agent runtime → Sandbox: runs sandboxed (evidence: `internal/runtime/pi_run.go`)
- Agent runtime → Model inference: requests inference
- Agent runtime → Tool security: enforces tool controls
- Skill fetch service → Skill cache: reads and writes cache (evidence: `internal/fetchsvc/service.go`)
- Skill fetch service → Git tree fetch: fetches skill trees (evidence: `internal/fetchsvc/service.go`)
