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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# ─── SDD Bot — Configuração ────────────────────────────────────────────────────
# Copie este arquivo para .sdd/bot/sdd-bot.config.yaml e preencha os valores.
# ATENÇÃO: sdd-bot.config.yaml deve estar no .gitignore (contém segredos).
# Execute: sdd bot install — para gerar interativamente com validação.
slack:
# Nome da sessão/workspace do projeto (ex: cijira).
# As 4 primeiras letras viram prefixo dos canais:
# <prefix>-comandos → canal de entrada de comandos (ex: ciji-comandos)
# <prefix>-logs → canal privado de auditoria (somente admins, ex: ciji-logs)
# <prefix>-tasks → grupo que contém os canais de cards ativos (ex: ciji-tasks)
# O prefixo também nomeia branches e worktrees gerados pelo bot.
# Mínimo de 4 caracteres; evite espaços e caracteres especiais.
session_name: "cijira"
# Token do Bot (xoxb-...) — gerado em OAuth & Permissions → Install App.
# Escopos mínimos necessários: channels:manage, chat:write, files:write,
# groups:write, users:read — veja a tabela completa no README.
bot_token: "xoxb-..."
# Token de nível de app para Socket Mode (xapp-...).
# Gerado em Settings → Basic Information → App-Level Tokens.
# Escopo necessário: connections:write.
app_token: "xapp-..."
bot_policy:
# Usuários Slack autorizados a aprovar/reprovar gates pelo bot.
# Também configure os mesmos IDs em sdd.config.yaml > approvers.slack.
allowed_slack_approvers:
# Admins podem usar os mesmos comandos de aprovação e retomada.
admin_user_ids:
# Limites seguros para chamadas do CLI SDD disparadas pelo bot.
max_workflow_iterations: 3
command_timeout_ms: 300000
# V1 supervisionada: unattended permanece desligado por padrão.
allow_unattended: false
default_through: "review" # execution | review | memory
jira:
# URL base do workspace Jira, sem trailing slash.
base_url: "https://<workspace>.atlassian.net"
# Chave do projeto Jira onde os cards serão criados (ex: PROJ, SDD, DEV).
project_key: "PROJ"
# Nome exato da coluna de backlog/ideia (primeira coluna do board).
# O bot cria o card nessa coluna com status "/bloqueado".
backlog_column: "Ideia/Backlog"
# Token de API Jira — gerado em id.atlassian.com → Manage profile → Security.
api_token: "..."
# E-mail do usuário Jira associado ao token acima.
user: "usuario@empresa.com"
github:
# Repositório onde Issues, PRs e Actions serão usados pelo adapter GitHub.
owner: "<org-ou-user>"
repo: "<repo>"
base_branch: "main"
auth:
# Caminho recomendado: GitHub App com installation token gerado em runtime.
# Guarde a private key fora do repo e aponte por env ou path local secreto.
app_id: "<github-app-id>"
installation_id: "<installation-id>"
private_key_env: "GITHUB_APP_PRIVATE_KEY"
# Fallback simples para dev interno: defina GITHUB_TOKEN ou GH_TOKEN no ambiente.
token_env: "GITHUB_TOKEN"
project:
# GitHub Projects v2. Use `id` quando já souber o node ID; caso contrário
# informe owner_type/owner/number para o provider resolver via GraphQL.
owner_type: "organization" # organization | user
owner: "<org-ou-user>"
number: 1
# id: "PVT_kw..."
field_mapping:
status_field_id: ""
todo_option_id: ""
in_progress_option_id: ""
done_option_id: ""
webhook_secret_env: "GITHUB_WEBHOOK_SECRET"
webhook:
# Receiver HTTP opcional para webhooks GitHub. Também pode ser ativado por
# SDD_GITHUB_WEBHOOK_PORT sem editar este arquivo.
enabled: false
port: 8787
path: "/github/webhook"
# Resiliência HTTP do provider GitHub.
request_timeout_ms: 10000
max_attempts: 3
retry_base_delay_ms: 250
labels:
- "sdd"
bitbucket:
# Workspace do Bitbucket (aparece na URL: bitbucket.org/<workspace>/<repo>).
workspace: "<workspace>"
# Slug do repositório onde os worktrees e branches serão criados.
repo_slug: "<repo>"
# Branch pai de todos os worktrees criados pelo bot (padrão: homolog).
# O bot faz checkout dessa branch antes de criar cada worktree de card.
base_branch: "homolog"
# API token com scopes — gerado em id.atlassian.com → Security → API tokens →
# "Create API token with scopes". App: Bitbucket. Scopes: Repositories Read+Write,
# Pull requests Read+Write, Account Read. (App passwords estão sendo descontinuados.)
# O 'sdd bot install' grava este token no remote git via x-bitbucket-api-token-auth.
app_password: "ATATT..."
# E-mail da conta Atlassian. Usado na REST API; no git o username é o estático
# x-bitbucket-api-token-auth (configurado automaticamente pelo instalador).
user: "usuario@empresa.com"
integrations:
# Use jira/bitbucket para o fluxo Atlassian legado ou github/github para
# GitHub Issues + Projects v2 + Pull Requests + Actions.
work_tracker: "jira" # jira | github
repo: "bitbucket" # bitbucket | github | git
llm:
# Provider do modelo de linguagem utilizado pelo bot para gerar artefatos.
# Valores aceitos: anthropic | openai | ollama
provider: "anthropic"
# Modelo padrão para geração de artefatos SDD (idea, risk-classification).
# O bot usa automaticamente o modelo mais leve (haiku) para títulos de card.
# Exemplos: claude-sonnet-4-5, gpt-4o, llama3
model: "claude-sonnet-4-5"
# Anthropic API Key — gerada em console.anthropic.com → API Keys.
# Obrigatório quando provider = anthropic.
api_key: "sk-ant-..."
# OpenAI API Key (somente quando provider = openai).
# openai_api_key: "sk-..."
# URL base do servidor Ollama (somente quando provider = ollama).
# ollama_base_url: "http://localhost:11434"
sdd:
# Pasta raiz dos worktrees, relativa à raiz do projeto SDD.
# Cada card cria um worktree em <worktrees_root>/<card-id> (ex: .worktree/PROJ-42).
# Certifique-se de que o caminho está no .gitignore do repositório.
worktrees_root: ".worktree"