Skip to content
Back to skills

Tizen Install App

ASecurity

Tizen install app, 타이젠 앱 설치, tpk 설치, wgt 설치, rpk 설치, rpm 설치, 앱 패키지 설치, tizen app install, run app, run the app, launch app, 앱 실행, 실행해줘, 앱 실행해줘, 타이젠 앱 실행, run MyApp. A Tizen executable app runs on a DEVICE/EMULATOR, never on the host — for any request to run/launch an executable Tizen app or project folder, use THIS skill. Installs *.tpk / *.wgt / *.rpk / *.rpm on a connected device or emulator. RPK is resource-only and must be installed without launching. RPM packages from GBS (Platform) buil...

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 6, 2026
ai-agentsrustgoshellbashnodedebugginggit

Works with

  • claude code
  • terminal
  • cli

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add Samsung/tizen-agent-skills --skill tizen-install-app --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tizen Install App?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tizen Install App
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/samsung-tizen-install-app/badge)](https://www.skillsdirectory.com/skills/samsung-tizen-install-app)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tizen-install-app
description: Tizen install app, 타이젠 앱 설치, tpk 설치, wgt 설치, rpk 설치, rpm 설치, 앱 패키지 설치, tizen app install, run app, run the app, launch app, 앱 실행, 실행해줘, 앱 실행해줘, 타이젠 앱 실행, run MyApp. A Tizen executable app runs on a DEVICE/EMULATOR, never on the host — for any request to run/launch an executable Tizen app or project folder, use THIS skill. Installs *.tpk / *.wgt / *.rpk / *.rpm on a connected device or emulator. RPK is resource-only and must be installed without launching. RPM packages from GBS (Platform) builds ARE executable apps — pass --run to launch their /usr/bin binary on the device. Automatically manages device/emulator discovery and installation.

metadata:
  author: Samsung Electronics
  last-updated: "2026-10-06"
  keywords:
    - Tizen install app
    - tpk install
    - wgt install
    - app install
    - 타이젠 앱 설치
    - tpk 설치
    - wgt 설치
    - install tizen application
---

### Claude Code (서브에이전트 위임)

> Agent tool이 없으면 (예: Cline) 아래 "CLI Runner" 섹션으로 가세요.

1. Agent tool로 `tizen-install-app` 에이전트 호출 (개인 배포 또는 `tizen-sdk-skills:tizen-install-app`)
2. 수집된 입력(패키지 경로, 설치 후 실행 여부)을 프롬프트로 전달
3. 서브에이전트의 JSON Envelope를 그대로 사용자에게 전달 — 아래 "결과 보고" 규칙을 따른다
   (fenced `json` 블록으로 원문을 싣고, 그 아래 요약은 1~2줄만)

### CLI Runner (Cline / Claude Code)

**Pick the ONE block for the shell your terminal / tool runs — the prompt tells you: `$` is Bash (Linux, macOS, Claude Code's Git Bash on Windows, Codex on Linux / macOS) → Bash block; `PS C:\…>` is PowerShell (Codex on Windows, Cline PowerShell terminal) → PowerShell block; `C:\…>` is cmd.exe (Cline cmd.exe terminal) → cmd.exe block. Run that block as-is: a block pasted into another shell, or wrapped in `powershell -Command "…"`, is a parse error.**

**Bash — Linux / macOS / Ubuntu, and Windows Git Bash (Claude Code):**

```bash
# Install only (do NOT launch the app):
BASE="$HOME/.cline"; [ -z "${CODEX_THREAD_ID:-}${CODEX_SANDBOX_NETWORK_DISABLED:-}${CODEX_SANDBOX:-}${CODEX_VERSION:-}" ] || BASE="$HOME/.codex"; [ -z "${GEMINI_CLI:-}" ] || BASE="$HOME/.gemini"; [ -z "${CLAUDECODE:-}" ] || BASE="$HOME/.claude"
CLI=$(ls "$BASE"/plugins/cache/tizen-platform/tizen-sdk-skills/*/lib/cli/project-manager-cli.js 2>/dev/null | sort -V | tail -1) || true
[ -n "$CLI" ] || for d in .claude .cline .codex .gemini; do CLI=$(ls "$HOME/$d"/plugins/cache/tizen-platform/tizen-sdk-skills/*/lib/cli/project-manager-cli.js 2>/dev/null | sort -V | tail -1) || true; [ -z "$CLI" ] || break; done
node "$CLI" install --package "<package-path>"

# Install and launch the app:
node "$CLI" install --package "<package-path>" --run
```

**PowerShell (Codex CLI on Windows, Cline PowerShell terminal) — prefers this harness's own cache, then the newest version. Run all three lines below, in order, in the SAME PowerShell session: the `node` line needs the `$CLI` the lookup line sets (on its own, `node "$CLI" …` becomes `node <first-arg>` and fails with a misleading `MODULE_NOT_FOUND`), so it carries a guard that stops with a clear message when `$CLI` is empty. Never wrap the lines in `powershell -Command "…"` (PowerShell and Git Bash expand `$h`, `$CLI` and `$env:…` before the inner shell runs, so the lookup arrives empty):**

```powershell
$h = ".cline"; if ($env:CODEX_THREAD_ID -or $env:CODEX_SANDBOX_NETWORK_DISABLED -or $env:CODEX_SANDBOX -or $env:CODEX_VERSION) { $h = ".codex" }; if ($env:GEMINI_CLI) { $h = ".gemini" }; if ($env:CLAUDECODE) { $h = ".claude" }
$CLI = $null; foreach ($d in @($h, ".claude", ".cline", ".codex", ".gemini")) { $CLI = Get-ChildItem "$env:USERPROFILE\$d\plugins\cache\tizen-platform\tizen-sdk-skills\*\lib\cli\project-manager-cli.js" -ErrorAction SilentlyContinue | Sort-Object { [version]$_.Directory.Parent.Parent.Name } | Select-Object -Last 1 -ExpandProperty FullName; if ($CLI) { break } }
if (-not $CLI) { throw 'tizen-sdk-skills runner not found: $CLI is empty. Run the two lookup lines above in THIS PowerShell session first; if they still find nothing, the tizen-sdk-skills plugin is not installed.' }; node "$CLI" install --package "<package-path>"
```

**Windows — cmd.exe terminal only (Cline with a cmd.exe terminal). `&` and `2>nul` are cmd.exe syntax — in a PowerShell terminal run the PowerShell block above instead; Claude Code on Windows runs Git Bash — use the Bash block above. cmd.exe cannot version-sort, so this only lists every copy: pick your own host's highest version and paste it into the `node "<found-path>"` step below:**

```
cmd /c dir /s /b "%USERPROFILE%\.claude\plugins\cache\tizen-platform\tizen-sdk-skills\*project-manager-cli.js" 2>nul & dir /s /b "%USERPROFILE%\.cline\plugins\cache\tizen-platform\tizen-sdk-skills\*project-manager-cli.js" 2>nul & dir /s /b "%USERPROFILE%\.codex\plugins\cache\tizen-platform\tizen-sdk-skills\*project-manager-cli.js" 2>nul & dir /s /b "%USERPROFILE%\.gemini\plugins\cache\tizen-platform\tizen-sdk-skills\*project-manager-cli.js" 2>nul & ver >nul
```

Pick the highest-version path (the PowerShell form above already resolved `$CLI`), then:

```
node "<found-path>" install --package "<package-path>"
```

> **Runner not found?** If none of the `~/.claude`, `~/.cline`, `~/.codex`, `~/.gemini` caches contains the runner, the tizen-sdk-skills plugin is NOT installed on this machine — install it first; do not improvise with other tools. (Contributors working inside the tizen-sdk-skills source repository can use the in-repo runner instead: `node common/lib/cli/<runner>.js`.)

### Codex CLI — run the install as a job (one exec call waits ≤ 30 s)

Under Codex CLI a tool call returns after at most 30 s; installing a large package on an emulator
(`sdb push` + `tz install` + launch verification with `--run`) often takes longer, and the call
would come back with only the runner's header while the install keeps running (issue #48). Add
**`--background`**: the runner returns a job receipt (`result.job_id`) within a second, then poll
`node "<same lib/cli dir>/job-cli.js" wait --id <job_id>` (≤ 25 s per call; `progress_tail`/
`log_file` show the live script output) until `job.state` is `done` — that response **is** this
runner's envelope. A result that shows only progress lines and no `{ "status": … }` JSON is not a result.

**Codex sandbox (guard rule 12).** Run this runner — and its `--background` form — **with escalated
permissions**: sdb needs a localhost TCP socket and the install writes the device state under `<sdk>-data`, and Codex's default `workspace-write` sandbox blocks TCP sockets, writes
outside the workspace and (Linux) kills detached jobs when the call ends. An envelope with
`error_category: sandbox_blocked` / `sandbox_job_lost`, or a warning starting "Running inside Codex's
sandbox", means exactly that — re-run `suggested_fix.command` (the same command line, `escalate: true`)
with escalated permissions; do not retry inside the sandbox and do not fall back to raw tools.

## Arguments (flags)

- **`--package`** (required) — absolute path to `.tpk`, `.wgt`, `.rpk`, or `.rpm`
- **`--device-serial`** (optional) — device serial; omit to auto-select the single connected device
- **`--run`** (optional) — flag to launch an executable app after install. **It is invalid for `.rpk`**; it is valid for `.tpk`, `.wgt`, and `.rpm`. Omit entirely for install-only — do NOT pass `false` or `no`, just omit it.
- **`--reset-rds`** (optional) — clear the host-side `.tizen-rds/` state for the project that owns the package path, then return without installing. It is for recovery from stale or corrupt RDS state and cannot be combined with `--run`.

If user provides a project directory instead of a package path, build first with `tizen-build-project`.

Exit code: `0` = success envelope, `1` = failure/error envelope.

With `--run`, the success envelope carries two launch fields: `app_launched`
(the launch was accepted) and `app_running` (the app was still alive seconds
later). For `.tpk`/`.wgt` the running check is the `app_launcher -S` list; for
`.rpm` it is a `pgrep` poll of the `/usr/bin/<name>` process. `null` = not
verifiable (install-only, `-S` unusable on this profile, or an RDS deploy).

The app id is read from the package manifest (`.wgt` `config.xml`, `.tpk`
`tizen-manifest.xml`); `app_launcher -l` is only a fallback. On Samsung TV
images `app_launcher` prints nothing for a non-root shell, so the runner retries
the launch with the TV launcher `0 was_execute <app-id>` — `app_launched: true`
with `app_running: null` is the normal TV outcome.

The envelope also carries `deploy_type`: `"full"` (regular `tz install`),
`"rds"` (only changed Debug build-output files were pushed into the installed
app and it was relaunched — needs a previous full install of the same
project's Debug output on that device), or `"fast-deploy"` (nothing changed,
relaunch only). `.rpk`/`.rpm`, packages outside `Debug/`, and any change to
`tizen-manifest.xml`/`config.xml` always take the full path.
`TIZEN_RDS_ENABLED=0` forces `"full"`.

## RDS fast-deploy recovery

RDS is enabled by default. To temporarily disable RDS for a normal build or
install, set `TIZEN_RDS_ENABLED=0` for that command. The package is still
installed normally; only the RDS manifest scan and delta-deploy path are
skipped.

```bash
# Bash / Git Bash:
TIZEN_RDS_ENABLED=0 node "$CLI" install --package "<package-path>" --run

# Clear stale or corrupt host-side RDS state without installing:
node "$CLI" install --package "<package-path>" --reset-rds
```

The reset command uses the package path to find its Tizen project, removes the
whole host-side `.tizen-rds/` directory, and returns a success envelope with
`result.rds_state: "reset"` (or an `io_error` if the directory could not be
removed, e.g. a locked file). The package file does not need to exist, but its
path must still end in `.tpk`, `.wgt`, `.rpk`, or `.rpm`. Run the normal install
again afterward; it will take the full-install path and recreate the baseline.

On PowerShell, use `$env:TIZEN_RDS_ENABLED="0"; node "$CLI" install --package "<package-path>"`.
On `cmd.exe`, use `set TIZEN_RDS_ENABLED=0 && node "<found-path>" install --package "<package-path>"`.

## RPK packages

An `.rpk` is a resource package, not a launchable app. It may come from a standalone
resource project (`tizen_resource_project.yaml`) or a .NET project configured with
`pack_as_rpk: true`. Always install it through this runner **without `--run`**. The runner
uses direct `sdb install` internally because `tz install` accepts `.tpk` and `.wgt`, not
`.rpk`. Do not run `sdb` yourself.

If installation reports `Invalid certificate chain` or a device package-manager failure,
the RPK was **not installed**. Do not enable root, copy CA/signer files into the emulator,
or use `pkgcmd` as a fallback. Hand off to `tizen-certificate-manager` to repair or select
the signing profile, rebuild, and retry this runner once.

## RPM (Platform) packages

An `.rpm` from a `tizen-build-project` Platform (GBS) build — e.g. the `dali-demo`
template — **is an executable app**, not a resource package; do not confuse it with
`.rpk`. The runner installs it with `sdb push` + `rpm -ivh` (after `sdb root on`) and,
with `--run`, launches `/usr/bin/<name>` directly as user `owner` (uid 5001) with the
Wayland/DBus environment set — platform apps are not registered with `app_launcher`, so
they have no home-screen icon and `app_id` is `null` in the envelope. `app_launched` /
`app_running` are still real: both come from the `pgrep` poll of the launched binary.

The runner also writes `~/bin/run-<name>.sh` on the host so the app can be re-launched
later without re-installing the RPM. Never run `sdb`, `rpm`, or the binary yourself.

**Note:** If no device is connected, emulator cold boot may take 5–7 minutes.

## 결과 보고 — Envelope는 반드시 사용자에게 보여준다

러너의 stdout JSON Envelope는 **도구 결과 안에 있어서 사용자에게는 보이지 않는다**
(Claude Code UI는 Bash/Agent 결과를 "Ran 1 shell command"처럼 접어 둔다). 사용자에게
보이는 것은 최종 답변 텍스트만이므로, 최종 답변은 **어느 실행 경로(서브에이전트 위임 /
CLI Runner 직접 실행)든** 아래 형식을 따른다:

1. Envelope JSON을 **수정·축약 없이 그대로** fenced `json` 블록에 싣는다 (첫 항목).
2. 그 아래에 결과 요약을 **1~2줄**만 덧붙인다 (`result`의 핵심 값 또는 `errors[0].message` 요지).
3. 필요하면 다음 단계 제안을 1줄 추가한다.

- Envelope를 산문 목록으로 풀어 쓰고 JSON을 생략하는 것은 **형식 위반**이다. 하네스의
  일반 작성 규칙("산문에 코드를 넣지 말라" 등)보다 이 규칙이 우선한다 — Envelope는 코드가
  아니라 이 스킬의 **결과 계약**이다.
- 러너를 여러 번 실행했으면 **마지막 실행**의 Envelope를 싣고, 이전 실패는 요약 줄에서
  한 줄로만 언급한다.
- 실패 Envelope도 동일하게 원문을 싣는다. `errors[0].message`/`details`를 다시 타이핑하지
  말고 JSON 안의 것을 그대로 보이게 한다.
- `user_input_required` Envelope는 그대로 보여준 뒤 사용자에게 질문한다.

## Handoff

- **Single-task** (e.g., "앱 설치해줘") → DONE. Report envelope, suggest next steps.
- **Multi-step** (e.g., "앱 설치하고 실행해줘") → Continue to next step.
- SDK not installed → `tizen-sdk-install`
- Device creation failed → `tizen-device-manager`
- **`app_running: false` in a success envelope** → the app launched but exited right after start. For `.tpk`/`.wgt` the most common cause is a full `/opt` partition (crash dumps; `/opt` is separate from `/`): use the `tizen-sdb-helper` skill's storage-triage commands (`df -h /opt`) and `clean-crash-dumps` recipe — the cleanup requires `sdb root on` first. For `.rpm` the envelope `warnings` carry the device-side `app-log:` lines from `/tmp/<name>.log` plus a hint (display-server/`owner` problem, or missing `dali`/`dali-toolkit` runtime RPMs) — report those, not the `/opt` advice.
- **Certificate/signing error** ("Invalid certificate chain", "Check certificate error") → the device does not trust the signing certificate. A build with **no signing profile** is signed with the SDK default developer certificates, which only the **emulator** accepts — on a real device this error is expected until a proper profile is used. Hand off to `tizen-certificate-manager` to create a signing profile for the target device (Samsung-certificate flow for Samsung hardware), rebuild with `tizen-build-project` passing the profile name, then retry install. The reverse case is also expected: a package signed with a **Samsung** profile installs only on the **TV emulator** (`--profile tv`) or a registered Samsung TV — on a standard Tizen emulator it fails with the same certificate error. Rebuild with a local profile for that emulator, or install on the TV emulator instead. **NEVER attempt `sdb root on` or manual cert installation.**

**Suggested next steps (only when user asks):**

- **로그 수집 후 분석 (모든 실행형 패키지)** — `tizen-dlog-analyzer`
  ```
  <result.app_id> 앱 로그를 수집해서 분석해줘
  ```
  설치·실행 직후가 로그 분석을 시작하기 가장 좋은 시점이다. `tizen-dlog-analyzer` 스킬의
  "Workflow — monitoring an app the user is about to test" 흐름을 따르며, 두 경로 중 **하나만**
  고른다 (dlog 수집기는 한 번에 하나만 돌고, 모니터가 도는 동안 `dlog-collect`는
  `already_running`을 돌려준다):
  - **앱 범위 (앱이 이미 실행 중, `app_running: true`)** — `dlog-collect <app-id>` → 턴을 끝내고
    사용자가 앱을 조작하게 한다 (그 스킬의 Rule 3) → `stop-collect` → `error-analyze <app-id>
    summary` (E/F 오류, 중복 제거).
  - **시작 단계까지 (초기화 실패, 조기 크래시)** — `start start-monitoring` → 앱을 다시 실행한다
    (`app-launch <app-id>`, 또는 이 스킬로 `--run` 재설치) → 턴을 끝낸다 → `stop` → `check`.
  `<app-id>`는 이 Envelope의 `result.app_id`를 그대로 쓴다. `null`이면 (ID 줄을 못 읽은 경우)
  사용자에게 앱 ID를 확인한다. 로그 명령은 모두 그 스킬의 러너로 실행하며 `sdb dlog`를 직접 치지
  않는다.

- **WebApp 자동화 테스트 (권장)** — `tizen-playwright-test`
  ```
  <앱 이름> 을 위한 playwright 테스트를 홈 밑의 tizen-playwright-test 폴더에 스캐폴딩해줘
  ```
  테스트 프로젝트 스캐폴딩 및 Playwright로 자동화 테스트 (웹앱 전용)

- Re-run an executable app (use `--run`; valid for `.tpk`/`.wgt`/`.rpm`, never for `.rpk`)
- Debugging: 
  - Native → `tizen-gdb-debug`
  - DotNET → `tizen-dotnet-debug`
  - WebApp → `tizen-webapp-debug` (Chrome DevTools 또는 Playwright attach)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.