/welcome
First-touch experience for new Ouroboros users
Claude Code
$ npx -y skills add Q00/ouroboros --skill welcome --agent claude-code
Codex
$ npx skills add Q00/ouroboros --skill welcome -a codex -y
Cursor
$ npx skills add Q00/ouroboros --skill welcome -a cursor -y
Gemini CLI
$ npx skills add Q00/ouroboros --skill welcome -a gemini-cli -y
GitHub Copilot
$ npx skills add Q00/ouroboros --skill welcome -a github-copilot -y
OpenCode
$ npx skills add Q00/ouroboros --skill welcome -a opencode -y
Windsurf
$ npx skills add Q00/ouroboros --skill welcome -a windsurf -y
SKILL.md
welcome.SKILL.mdname: welcome
description: "First-touch experience for new Ouroboros users"
disable-model-invocation: true
/ouroboros:welcome
Interactive onboarding for new Ouroboros users.
Usage
/ouroboros:welcome # First-time or update onboarding
/ouroboros:welcome --skip # Skip welcome, mark as shown
/ouroboros:welcome --force # Force re-run welcome even if shown
Instructions
Ask every question with the active runtime's `ask_user` capability, in the user's language. The Korean labels below are the canonical wording.
Python Runtime (Required)
Define this resolver in the same shell before any snippet below. It accepts only Python 3.12 or newer (`python3`, then `python`, then uv) and preserves arguments and stdin. Quote every argument passed to `ouroboros_python`.
<!-- ouroboros-python-resolver:start -->
ouroboros_python() {
if command -v python3 >/dev/null 2>&1 &&
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 "$@")
return
fi
if command -v python >/dev/null 2>&1 &&
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python "$@")
return
fi
if command -v uv >/dev/null 2>&1; then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command uv run --no-project --quiet --python '>=3.12' python "$@")
return
fi
printf '%s\n' 'Ouroboros skills require Python >= 3.12 or uv on PATH.' >&2
return 127
}<!-- ouroboros-python-resolver:end -->
Bundled Scripts
This skill's programs are files in `scripts/` next to this `SKILL.md`. Run them with the commands below; never retype, rewrite or edit them. Resolve `scripts/` from the directory containing this `SKILL.md`, even if that directory is hidden, and set `WELCOME_DIR` to that directory's absolute path in the same shell call as the resolver:
WELCOME_DIR='<absolute path of the directory containing this SKILL.md>'
Every command below runs after the resolver and that line, in one shell call. Type the arguments exactly as shown: the shell expands `"$HOME"` and the other variables, and the scripts take those values from their arguments. If a script is missing, tell the user the installed Ouroboros skill files are incomplete and that reinstalling or updating Ouroboros restores them; do not reconstruct the program.
Pre-Check: Already Completed?
Run the readiness check:
ouroboros_python - precheck "$HOME" "${CODEX_HOME:-$HOME/.codex}" "${SETUP_READY:-}" "${CODEX_READY:-}" "${LEGACY_CODEX_MODEL_MIGRATION_REQUIRED:-}" < "$WELCOME_DIR/scripts/welcome_state.py" || printf 'completed= setup= codex= migration=\n'It prints one line, `completed=... setup=... codex=... migration=...` (the fallback is the line it printed when no Python 3.12+ or uv is available). `completed` is the completion marker `WELCOME_COMPLETED` (legacy `welcomeShown: true` also counts). `setup`, `codex` and `migration` are `true` when `SETUP_READY`, `CODEX_READY` and `LEGACY_CODEX_MODEL_MIGRATION_REQUIRED` hold; the sections below use those names.
Before honoring that completion marker, determine whether setup is ready for the active runtime. A previously completed welcome must never hide the setup gate from a user who chose **나중에** or whose setup was later removed.
Claude Code is ready when `~/.ouroboros/config.yaml` has `orchestrator.runtime_backend` in `{claude, claude_mcp}` and `llm.backend: claude`. The marketplace plugin owns its MCP registration, so host-owned `~/.claude/mcp.json` is never part of readiness.
If `SETUP_READY` is not true, check Codex. It is ready when both backends are `codex`, the Codex CLI (`OUROBOROS_CODEX_CLI_PATH`, else `orchestrator.codex_cli_path`, else `codex` on PATH) is runnable, and `mcp_servers\.ouroboros` in `$CODEX_HOME/config.toml` (any TOML key spelling) has a runnable `command` or a non-blank `url`.
Legacy Codex Model Migration
Older configurations saved `gpt-5` into all four stage-model fields. That is now an explicit pin that stops Codex App/CLI model changes from taking effect. Never rewrite a possible user pin silently. When Codex is ready, the Pre-Check's `migration` field detects that exact legacy shape (or an interrupted migration) once.
If `CODEX_READY` and `LEGACY_CODEX_MODEL_MIGRATION_REQUIRED` are both true, ask "현재 설정은 모든 단계에서 gpt-5를 고정해 두고 있어요. Codex에서 선택한 모델을 자동으로 사용하도록 바꿀까요?" (header `모델 설정`) with these options:
- **Codex 선택으로 전환하기 (권장)**: App이나 CLI에서 바꾼 모델을 모든 단계가 자동으로 따라가요.
Atomically rewrite the four pins:
ouroboros_python - "$HOME/.ouroboros/config.yaml" < "$WELCOME_DIR/scripts/migrate_codex_models.py"
`default` sends no model pin to Codex; it is not a model named "default". Confirm the rewrite succeeded before recording the decision. An interrupted rewrite leaves a partial `gpt-5`/`default` state that the next check offers again.
- **gpt-5 고정 유지하기**: 지금처럼 모든 단계를 gpt-5로 계속 실행해요. Do not
change `config.yaml`.
For either choice, merge exactly one `codexModelMigration` marker into `~/.ouroboros/prefs.json`, keeping existing keys:
ouroboros_python - "automatic-v1" < "$WELCOME_DIR/scripts/record_codex_model_migration.py"
Pass `kept-gpt-5-v1` instead of `automatic-v1` for the keep choice. If welcome was already completed, confirm briefly and exit; do not also ask the generic welcome question.
Routing After the Pre-Check
- **Completed, `SETUP_READY` or `CODEX_READY` true, no `--force`**: ask
"Ouroboros welcome was already completed on $WELCOME_COMPLETED. What w
Read more
name: welcome description: "First-touch experience for new Ouroboros users" disable-model-invocation: true
/ouroboros:welcome
Interactive onboarding for new Ouroboros users.
Usage
/ouroboros:welcome # First-time or update onboarding /ouroboros:welcome --skip # Skip welcome, mark as shown /ouroboros:welcome --force # Force re-run welcome even if shown
Instructions
Ask every question with the active runtime's `ask_user` capability, in the user's language. The Korean labels below are the canonical wording.
Python Runtime (Required)
Define this resolver in the same shell before any snippet below. It accepts only Python 3.12 or newer (`python3`, then `python`, then uv) and preserves arguments and stdin. Quote every argument passed to `ouroboros_python`.
<!-- ouroboros-python-resolver:start -->
ouroboros_python() {
if command -v python3 >/dev/null 2>&1 &&
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 "$@")
return
fi
if command -v python >/dev/null 2>&1 &&
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python "$@")
return
fi
if command -v uv >/dev/null 2>&1; then
(unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command uv run --no-project --quiet --python '>=3.12' python "$@")
return
fi
printf '%s\n' 'Ouroboros skills require Python >= 3.12 or uv on PATH.' >&2
return 127
}<!-- ouroboros-python-resolver:end -->
Bundled Scripts
This skill's programs are files in `scripts/` next to this `SKILL.md`. Run them with the commands below; never retype, rewrite or edit them. Resolve `scripts/` from the directory containing this `SKILL.md`, even if that directory is hidden, and set `WELCOME_DIR` to that directory's absolute path in the same shell call as the resolver:
WELCOME_DIR='<absolute path of the directory containing this SKILL.md>'
Every command below runs after the resolver and that line, in one shell call. Type the arguments exactly as shown: the shell expands `"$HOME"` and the other variables, and the scripts take those values from their arguments. If a script is missing, tell the user the installed Ouroboros skill files are incomplete and that reinstalling or updating Ouroboros restores them; do not reconstruct the program.
Pre-Check: Already Completed?
Run the readiness check:
ouroboros_python - precheck "$HOME" "${CODEX_HOME:-$HOME/.codex}" "${SETUP_READY:-}" "${CODEX_READY:-}" "${LEGACY_CODEX_MODEL_MIGRATION_REQUIRED:-}" < "$WELCOME_DIR/scripts/welcome_state.py" || printf 'completed= setup= codex= migration=\n'It prints one line, `completed=... setup=... codex=... migration=...` (the fallback is the line it printed when no Python 3.12+ or uv is available). `completed` is the completion marker `WELCOME_COMPLETED` (legacy `welcomeShown: true` also counts). `setup`, `codex` and `migration` are `true` when `SETUP_READY`, `CODEX_READY` and `LEGACY_CODEX_MODEL_MIGRATION_REQUIRED` hold; the sections below use those names.
Before honoring that completion marker, determine whether setup is ready for the active runtime. A previously completed welcome must never hide the setup gate from a user who chose **나중에** or whose setup was later removed.
Claude Code is ready when `~/.ouroboros/config.yaml` has `orchestrator.runtime_backend` in `{claude, claude_mcp}` and `llm.backend: claude`. The marketplace plugin owns its MCP registration, so host-owned `~/.claude/mcp.json` is never part of readiness.
If `SETUP_READY` is not true, check Codex. It is ready when both backends are `codex`, the Codex CLI (`OUROBOROS_CODEX_CLI_PATH`, else `orchestrator.codex_cli_path`, else `codex` on PATH) is runnable, and `mcp_servers\.ouroboros` in `$CODEX_HOME/config.toml` (any TOML key spelling) has a runnable `command` or a non-blank `url`.
Legacy Codex Model Migration
Older configurations saved `gpt-5` into all four stage-model fields. That is now an explicit pin that stops Codex App/CLI model changes from taking effect. Never rewrite a possible user pin silently. When Codex is ready, the Pre-Check's `migration` field detects that exact legacy shape (or an interrupted migration) once.
If `CODEX_READY` and `LEGACY_CODEX_MODEL_MIGRATION_REQUIRED` are both true, ask "현재 설정은 모든 단계에서 gpt-5를 고정해 두고 있어요. Codex에서 선택한 모델을 자동으로 사용하도록 바꿀까요?" (header `모델 설정`) with these options:
- **Codex 선택으로 전환하기 (권장)**: App이나 CLI에서 바꾼 모델을 모든 단계가 자동으로 따라가요.
Atomically rewrite the four pins:
ouroboros_python - "$HOME/.ouroboros/config.yaml" < "$WELCOME_DIR/scripts/migrate_codex_models.py"
`default` sends no model pin to Codex; it is not a model named "default". Confirm the rewrite succeeded before recording the decision. An interrupted rewrite leaves a partial `gpt-5`/`default` state that the next check offers again.
- **gpt-5 고정 유지하기**: 지금처럼 모든 단계를 gpt-5로 계속 실행해요. Do not
change `config.yaml`.
For either choice, merge exactly one `codexModelMigration` marker into `~/.ouroboros/prefs.json`, keeping existing keys:
ouroboros_python - "automatic-v1" < "$WELCOME_DIR/scripts/record_codex_model_migration.py"
Pass `kept-gpt-5-v1` instead of `automatic-v1` for the keep choice. If welcome was already completed, confirm briefly and exit; do not also ask the generic welcome question.
Routing After the Pre-Check
- **Completed, `SETUP_READY` or `CODEX_READY` true, no `--force`**: ask
"Ouroboros welcome was already completed on $WELCOME_COMPLETED. What w
Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode, Copilot, Kiro and more.
Other skills on ouroboros.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
adr-create
Create a new Architecture Decision Record with sequential numbering and AgentDB registration
Questions about welcome.
- Which coding agents can use welcome?
- welcome installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

