Dagger
Search

daggie

Daggie — AI-powered Dagger CI specialist agent.

Installation

dagger install github.com/telchak/daggerverse/daggie@v0.1.0

Entrypoint

Return Type
Daggie !
Arguments
NameTypeDefault ValueDescription
sourceDirectory -Project source directory
moduleUrls[String ! ] -Git URLs of Dagger modules to clone and read for reference (e.g. 'https://github.com/org/repo.git#main:path/to/module')
selfImproveString !"off"Self-improvement mode: 'off' (default), 'write' (update context file), 'commit' (update + git commit)
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string
func (m *MyModule) Example(selfImprove string) *dagger.Daggie  {
	return dag.
			Daggie(selfImprove)
}
@function
def example(self_improve: str) -> dagger.Daggie:
	return (
		dag.daggie(self_improve)
	)
@func()
example(selfImprove: string): Daggie {
	return dag
		.daggie(selfImprove)
}

Types

Daggie 🔗

AI-powered Dagger CI specialist agent. Specializes in creating, explaining, and debugging Dagger CI modules and pipelines across all SDKs (Python, TypeScript, Go, Java). Accepts Git URLs of Dagger modules at runtime, clones them via dag.git(), reads their source code, and uses that knowledge to propose implementations. Pass your project as --source and optionally reference Dagger modules via --module-urls for the agent to learn from.

source() 🔗

Project source directory

Return Type
Directory !
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string source
func (m *MyModule) Example(selfImprove string) *dagger.Directory  {
	return dag.
			Daggie(selfImprove).
			Source()
}
@function
def example(self_improve: str) -> dagger.Directory:
	return (
		dag.daggie(self_improve)
		.source()
	)
@func()
example(selfImprove: string): Directory {
	return dag
		.daggie(selfImprove)
		.source()
}

moduleUrls() 🔗

Git URLs of Dagger modules to clone and read for reference (e.g. ‘https://github.com/org/repo.git#main:path/to/module’)

Return Type
[String ! ] !
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string module-urls
func (m *MyModule) Example(ctx context.Context, selfImprove string) []string  {
	return dag.
			Daggie(selfImprove).
			ModuleUrls(ctx)
}
@function
async def example(self_improve: str) -> List[str]:
	return await (
		dag.daggie(self_improve)
		.module_urls()
	)
@func()
async example(selfImprove: string): Promise<string[]> {
	return dag
		.daggie(selfImprove)
		.moduleUrls()
}

selfImprove() 🔗

Self-improvement mode: ‘off’ (default), ‘write’ (update context file), ‘commit’ (update + git commit)

Return Type
String !
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string self-improve
func (m *MyModule) Example(ctx context.Context, selfImprove string) string  {
	return dag.
			Daggie(selfImprove).
			SelfImprove(ctx)
}
@function
async def example(self_improve: str) -> str:
	return await (
		dag.daggie(self_improve)
		.self_improve()
	)
@func()
async example(selfImprove: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.selfImprove()
}

githubToken() 🔗

Return Type
Secret 
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string github-token
func (m *MyModule) Example(selfImprove string) *dagger.Secret  {
	return dag.
			Daggie(selfImprove).
			GithubToken()
}
@function
def example(self_improve: str) -> dagger.Secret:
	return (
		dag.daggie(self_improve)
		.github_token()
	)
@func()
example(selfImprove: string): Secret {
	return dag
		.daggie(selfImprove)
		.githubToken()
}

prRepo() 🔗

Return Type
String !
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string pr-repo
func (m *MyModule) Example(ctx context.Context, selfImprove string) string  {
	return dag.
			Daggie(selfImprove).
			PrRepo(ctx)
}
@function
async def example(self_improve: str) -> str:
	return await (
		dag.daggie(self_improve)
		.pr_repo()
	)
@func()
async example(selfImprove: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.prRepo()
}

prNumber() 🔗

Return Type
Integer !
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string pr-number
func (m *MyModule) Example(ctx context.Context, selfImprove string) int  {
	return dag.
			Daggie(selfImprove).
			PrNumber(ctx)
}
@function
async def example(self_improve: str) -> int:
	return await (
		dag.daggie(self_improve)
		.pr_number()
	)
@func()
async example(selfImprove: string): Promise<number> {
	return dag
		.daggie(selfImprove)
		.prNumber()
}

prCommitSha() 🔗

Return Type
String !
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string pr-commit-sha
func (m *MyModule) Example(ctx context.Context, selfImprove string) string  {
	return dag.
			Daggie(selfImprove).
			PrCommitSha(ctx)
}
@function
async def example(self_improve: str) -> str:
	return await (
		dag.daggie(self_improve)
		.pr_commit_sha()
	)
@func()
async example(selfImprove: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.prCommitSha()
}

assist() 🔗

Create Dagger pipelines and modules, implement features.

Reads reference modules, understands your project, and implements Dagger CI pipelines. Returns the modified workspace directory.

Return Type
Directory !
Arguments
NameTypeDefault ValueDescription
assignmentString !-What you want the agent to do (e.g. 'Create a Dagger pipeline for building and testing a Python project')
sourceDirectory nullOverride source directory (uses constructor source if omitted)
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string assist --assignment string
func (m *MyModule) Example(selfImprove string, assignment string) *dagger.Directory  {
	return dag.
			Daggie(selfImprove).
			Assist(assignment)
}
@function
def example(self_improve: str, assignment: str) -> dagger.Directory:
	return (
		dag.daggie(self_improve)
		.assist(assignment)
	)
@func()
example(selfImprove: string, assignment: string): Directory {
	return dag
		.daggie(selfImprove)
		.assist(assignment)
}

debug() 🔗

Diagnose and fix Dagger pipeline errors.

Analyzes error output, reads relevant source files, identifies the root cause, and applies fixes. Returns the modified workspace directory.

Return Type
Directory !
Arguments
NameTypeDefault ValueDescription
errorOutputString !-Pipeline error output (stderr/stdout from dagger call)
sourceDirectory nullSource directory with the broken module (optional)
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string debug --error-output string
func (m *MyModule) Example(selfImprove string, errorOutput string) *dagger.Directory  {
	return dag.
			Daggie(selfImprove).
			Debug(errorOutput)
}
@function
def example(self_improve: str, error_output: str) -> dagger.Directory:
	return (
		dag.daggie(self_improve)
		.debug(error_output)
	)
@func()
example(selfImprove: string, errorOutput: string): Directory {
	return dag
		.daggie(selfImprove)
		.debug(errorOutput)
}

developGithubIssue() 🔗

Read a GitHub issue, route it to the best agent, and create a Pull Request.

A router LLM reads the issue and selects the optimal function — assist, explain, or debug — then calls it with extracted parameters. Comments on the issue with a summary and a link to the PR. Returns the PR URL.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
githubTokenSecret !-GitHub token with repo and pull-request permissions
issueIdInteger !-GitHub issue number
repositoryString !-GitHub repository URL (e.g. 'https://github.com/owner/repo')
sourceDirectory nullOverride source directory (uses constructor source if omitted)
baseString !"main"Base branch for the pull request
suggestGithubFixOnFailureBoolean !falsePost a diagnostic comment on the issue if the agent fails
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string develop-github-issue --github-token env:MYSECRET --issue-id integer --repository string --base string --suggest-github-fix-on-failure boolean
func (m *MyModule) Example(ctx context.Context, selfImprove string, githubToken *dagger.Secret, issueId int, repository string, base string, suggestGithubFixOnFailure bool) string  {
	return dag.
			Daggie(selfImprove).
			DevelopGithubIssue(ctx, githubToken, issueId, repository, base, suggestGithubFixOnFailure)
}
@function
async def example(self_improve: str, github_token: dagger.Secret, issue_id: int, repository: str, base: str, suggest_github_fix_on_failure: bool) -> str:
	return await (
		dag.daggie(self_improve)
		.develop_github_issue(github_token, issue_id, repository, base, suggest_github_fix_on_failure)
	)
@func()
async example(selfImprove: string, githubToken: Secret, issueId: number, repository: string, base: string, suggestGithubFixOnFailure: boolean): Promise<string> {
	return dag
		.daggie(selfImprove)
		.developGithubIssue(githubToken, issueId, repository, base, suggestGithubFixOnFailure)
}

editFile() 🔗

Edit a file by replacing a string. The old_string must match exactly.

Returns a changeset showing the diff.

Return Type
Changeset !
Arguments
NameTypeDefault ValueDescription
filePathString !-Path to the file relative to the workspace root
oldStringString !-The exact string to find and replace
newStringString !-The replacement string
replaceAllBoolean !falseReplace all occurrences (default: first only)
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string edit-file --file-path string --old-string string --new-string string --replace-all boolean
func (m *MyModule) Example(selfImprove string, filePath string, oldString string, newString string, replaceAll bool) *dagger.Changeset  {
	return dag.
			Daggie(selfImprove).
			EditFile(filePath, oldString, newString, replaceAll)
}
@function
def example(self_improve: str, file_path: str, old_string: str, new_string: str, replace_all: bool) -> dagger.Changeset:
	return (
		dag.daggie(self_improve)
		.edit_file(file_path, old_string, new_string, replace_all)
	)
@func()
example(selfImprove: string, filePath: string, oldString: string, newString: string, replaceAll: boolean): Changeset {
	return dag
		.daggie(selfImprove)
		.editFile(filePath, oldString, newString, replaceAll)
}

explain() 🔗

Explain Dagger modules, CLI commands, pipeline patterns, and concepts.

Reads reference modules and source code to provide clear explanations with code examples. Returns the explanation as text.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
questionString !-What you want explained (e.g. 'How does caching work in Dagger?')
sourceDirectory nullSource directory to reference (optional)
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string explain --question string
func (m *MyModule) Example(ctx context.Context, selfImprove string, question string) string  {
	return dag.
			Daggie(selfImprove).
			Explain(ctx, question)
}
@function
async def example(self_improve: str, question: str) -> str:
	return await (
		dag.daggie(self_improve)
		.explain(question)
	)
@func()
async example(selfImprove: string, question: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.explain(question)
}

glob() 🔗

Find files in the workspace matching a glob pattern.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
patternString !-Glob pattern (e.g. 'src/**/*.py', '**/*.go', '**/dagger.json')
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string glob --pattern string
func (m *MyModule) Example(ctx context.Context, selfImprove string, pattern string) string  {
	return dag.
			Daggie(selfImprove).
			Glob(ctx, pattern)
}
@function
async def example(self_improve: str, pattern: str) -> str:
	return await (
		dag.daggie(self_improve)
		.glob(pattern)
	)
@func()
async example(selfImprove: string, pattern: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.glob(pattern)
}

grep() 🔗

Search file contents in the workspace using grep.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
patternString !-Search pattern (regex supported)
pathsString !""Comma-separated paths to search in (optional)
fileGlobString !""Glob pattern to filter files (e.g. '*.py')
insensitiveBoolean !falseCase-insensitive search
limitInteger !100Maximum number of matching lines to return
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string grep --pattern string --paths string --file-glob string --insensitive boolean --limit integer
func (m *MyModule) Example(ctx context.Context, selfImprove string, pattern string, paths string, fileGlob string, insensitive bool, limit int) string  {
	return dag.
			Daggie(selfImprove).
			Grep(ctx, pattern, paths, fileGlob, insensitive, limit)
}
@function
async def example(self_improve: str, pattern: str, paths: str, file_glob: str, insensitive: bool, limit: int) -> str:
	return await (
		dag.daggie(self_improve)
		.grep(pattern, paths, file_glob, insensitive, limit)
	)
@func()
async example(selfImprove: string, pattern: string, paths: string, fileGlob: string, insensitive: boolean, limit: number): Promise<string> {
	return dag
		.daggie(selfImprove)
		.grep(pattern, paths, fileGlob, insensitive, limit)
}

readFile() 🔗

Read a file from the workspace with line numbers.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
filePathString !-Path to the file relative to the workspace root
offsetInteger !0Line number to start reading from (1-based)
limitInteger !0Maximum number of lines to read
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string read-file --file-path string --offset integer --limit integer
func (m *MyModule) Example(ctx context.Context, selfImprove string, filePath string, offset int, limit int) string  {
	return dag.
			Daggie(selfImprove).
			ReadFile(ctx, filePath, offset, limit)
}
@function
async def example(self_improve: str, file_path: str, offset: int, limit: int) -> str:
	return await (
		dag.daggie(self_improve)
		.read_file(file_path, offset, limit)
	)
@func()
async example(selfImprove: string, filePath: string, offset: number, limit: number): Promise<string> {
	return dag
		.daggie(selfImprove)
		.readFile(filePath, offset, limit)
}

readModule() 🔗

Read a Dagger module from a Git repository.

Clones the repo, reads dagger.json and main source files, and returns formatted module documentation. Use this to learn from existing Dagger modules when implementing new ones.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
urlString !-Git URL of a Dagger module (e.g. 'https://github.com/org/repo.git#main:path/to/module')
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string read-module --url string
func (m *MyModule) Example(ctx context.Context, selfImprove string, url string) string  {
	return dag.
			Daggie(selfImprove).
			ReadModule(ctx, url)
}
@function
async def example(self_improve: str, url: str) -> str:
	return await (
		dag.daggie(self_improve)
		.read_module(url)
	)
@func()
async example(selfImprove: string, url: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.readModule(url)
}

review() 🔗

Review Dagger module code for quality, best practices, and correctness.

Checks function signatures, caching strategies, error handling, SDK patterns, and dagger.json configuration. Returns structured feedback.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
sourceDirectory nullSource directory to review (uses constructor source if omitted)
diffString !""Git diff or PR diff to review (optional)
focusString !""Specific area to focus the review on (optional)
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string review --diff string --focus string
func (m *MyModule) Example(ctx context.Context, selfImprove string, diff string, focus string) string  {
	return dag.
			Daggie(selfImprove).
			Review(ctxdiff, focus)
}
@function
async def example(self_improve: str, diff: str, focus: str) -> str:
	return await (
		dag.daggie(self_improve)
		.review(diff, focus)
	)
@func()
async example(selfImprove: string, diff: string, focus: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.review(diff, focus)
}

suggestGithubFix() 🔗

Analyze a CI failure and post inline code suggestions on a GitHub PR.

Reads the error output, explores source files, and posts GitHub “suggested changes” that developers can apply with one click.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
githubTokenSecret !-GitHub token with repo permissions
prNumberInteger !-Pull request number
repoString !-GitHub repository URL (e.g. 'https://github.com/owner/repo')
commitShaString !-HEAD commit SHA of the PR branch
errorOutputString !-CI error output (stderr/stdout)
sourceDirectory nullSource directory of the PR branch
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string suggest-github-fix --github-token env:MYSECRET --pr-number integer --repo string --commit-sha string --error-output string
func (m *MyModule) Example(ctx context.Context, selfImprove string, githubToken *dagger.Secret, prNumber int, repo string, commitSha string, errorOutput string) string  {
	return dag.
			Daggie(selfImprove).
			SuggestGithubFix(ctx, githubToken, prNumber, repo, commitSha, errorOutput)
}
@function
async def example(self_improve: str, github_token: dagger.Secret, pr_number: int, repo: str, commit_sha: str, error_output: str) -> str:
	return await (
		dag.daggie(self_improve)
		.suggest_github_fix(github_token, pr_number, repo, commit_sha, error_output)
	)
@func()
async example(selfImprove: string, githubToken: Secret, prNumber: number, repo: string, commitSha: string, errorOutput: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.suggestGithubFix(githubToken, prNumber, repo, commitSha, errorOutput)
}

suggestGithubPrCodeComment() 🔗

Post an inline code suggestion on a GitHub pull request.

The suggestion will appear as a GitHub “suggested change” that developers can apply with one click.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
pathString !-File path relative to repo root
lineInteger !-Line number to suggest a change on
suggestionString !-Replacement code (no ```suggestion fences, just the raw code)
commentString !""Explanation of the fix
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string suggest-github-pr-code-comment --path string --line integer --suggestion string --comment string
func (m *MyModule) Example(ctx context.Context, selfImprove string, path string, line int, suggestion string, comment string) string  {
	return dag.
			Daggie(selfImprove).
			SuggestGithubPrCodeComment(ctx, path, line, suggestion, comment)
}
@function
async def example(self_improve: str, path: str, line: int, suggestion: str, comment: str) -> str:
	return await (
		dag.daggie(self_improve)
		.suggest_github_pr_code_comment(path, line, suggestion, comment)
	)
@func()
async example(selfImprove: string, path: string, line: number, suggestion: string, comment: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.suggestGithubPrCodeComment(path, line, suggestion, comment)
}

task() 🔗

Launch a sub-agent for research or focused work.

The sub-agent has read-only access to the workspace. Use this for research, analysis, or exploring documentation.

Return Type
String !
Arguments
NameTypeDefault ValueDescription
descriptionString !-Short description of the sub-task
promptString !-Detailed prompt for the sub-agent
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string task --description string --prompt string
func (m *MyModule) Example(ctx context.Context, selfImprove string, description string, prompt string) string  {
	return dag.
			Daggie(selfImprove).
			Task(ctx, description, prompt)
}
@function
async def example(self_improve: str, description: str, prompt: str) -> str:
	return await (
		dag.daggie(self_improve)
		.task(description, prompt)
	)
@func()
async example(selfImprove: string, description: string, prompt: string): Promise<string> {
	return dag
		.daggie(selfImprove)
		.task(description, prompt)
}

writeFile() 🔗

Create or overwrite a file in the workspace.

Returns a changeset showing the diff.

Return Type
Changeset !
Arguments
NameTypeDefault ValueDescription
filePathString !-Path to the file relative to the workspace root
contentsString !-The full file contents to write
Example
dagger -m github.com/telchak/daggerverse/daggie@010621c997378db92da5969584001be575c5e5a7 call \
 --self-improve string write-file --file-path string --contents string
func (m *MyModule) Example(selfImprove string, filePath string, contents string) *dagger.Changeset  {
	return dag.
			Daggie(selfImprove).
			WriteFile(filePath, contents)
}
@function
def example(self_improve: str, file_path: str, contents: str) -> dagger.Changeset:
	return (
		dag.daggie(self_improve)
		.write_file(file_path, contents)
	)
@func()
example(selfImprove: string, filePath: string, contents: string): Changeset {
	return dag
		.daggie(selfImprove)
		.writeFile(filePath, contents)
}