-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdun.example.json
More file actions
69 lines (60 loc) · 3.58 KB
/
Copy pathdun.example.json
File metadata and controls
69 lines (60 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
"//": "Copy to dun.json (committed, describes the PROJECT) or .dun/dun.local.json (gitignored, describes THIS MACHINE). Both are optional; with neither, dun knows three servers — code=poly-lsp-mcp, shell=mcpshell, docs=raglit — and starts only shell. /rag auto and /lsp auto write the autostart flag below.",
"servers": [
{
"//": "Spawn a server at startup. code and docs are opt-in by default; this is what /lsp auto writes.",
"id": "code",
"autostart": true
},
{
"//": "Override a built-in by reusing its id. Fields you omit are INHERITED, so pointing at a different binary does not mean restating its args.",
"id": "code",
"command": "/opt/bin/poly-lsp-mcp"
},
{
"//": "Add a project-specific server. {{workspace}} and {{raglit_home}} are substituted at spawn — the same token llm-bench toolsets use.",
"id": "db",
"command": "db-mcp",
"args": ["stdio", "--root", "{{workspace}}"],
"env": ["DSN=postgres://localhost/dev"],
"timeout": 120
},
{
"//": "Drop a built-in you do not want. One line, rather than re-listing the servers you are keeping.",
"id": "docs",
"disabled": true
}
],
"//ship": "The ship tool: verify, then land. Fetch -> rebase onto the base branch -> checks -> push, in that order, so what is verified is exactly what lands. Every field is optional; merged field-by-field across dun.json and dun.local.json.",
"ship": {
"//allow": "Permitted terminal states. verify = checks only, pushes nothing. push = land the branch. pr = land it and report the gh command to open the pull request (dun never runs gh). Omit to permit all three.",
"allow": ["verify", "push", "pr"],
"//default": "The mode used when the model names none. Must be one of allow. Omit for push.",
"default": "push",
"//checkTimeout": "Bounds ONE check. Go duration string; omit for 10m.",
"checkTimeout": "10m",
"//skip": "Checks to omit, BY NAME.",
"skip": [],
"//checks": "Serial list of parallel waves — the shape carries the semantics: the array is ordered, each object is not. A wave runs its commands at once and reports EVERY failure in it (two broken checks are two things to fix in one turn); the next wave does not start if one failed. A check fails on a non-zero exit.",
"checks": [
{"compile": "go build ./..."},
{"lint": "golangci-lint run", "vet": "go vet ./..."},
{"smoke": "go test -short ./..."}
]
},
"//commit": "How /worktree commit writes its message. One throwaway LLM call sees the porcelain status, the diff vs HEAD (bounded) and the last few user messages, and you approve the result before anything is committed. Omit the whole section for conventional commits.",
"commit": {
"//format": "A built-in style: 'conventional' (the default — type(scope): subject + a body saying WHY) or 'plain' (no type/scope prefix).",
"format": "conventional",
"//instruction": "Free text handed to the model verbatim, for a project whose convention is its own. Wins over format — the specific statement beats the named one.",
"instruction": ""
},
"//mounts": "Extra local paths that must be accessible from both the worktree (symlink) and Docker container (volume mount). go.mod replace directives are auto-discovered — declare mounts here for non-Go projects or to override the auto-detected source path.",
"mounts": [
{
"//": "source is the host path (relative to repo root or absolute), name is the symlink/volume name. Docker mounts at /<name>.",
"source": "../agentkit",
"name": "agentkit"
}
]
}