{"id":48958933,"url":"https://github.com/kenm76/scriptree","last_synced_at":"2026-06-27T02:05:51.227Z","repository":{"id":352099134,"uuid":"1212545693","full_name":"KenM76/scriptree","owner":"KenM76","description":"A universal GUI generator for command-line tools. Define a tool once by pointing ScripTree at an executable or building a form from scratch and run it through a clean GUI with labeled fields, dropdowns, file pickers, and checkboxes. Or use the LLM specific help files with your AI to make them for you.","archived":false,"fork":false,"pushed_at":"2026-04-25T13:12:53.000Z","size":2610,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T13:24:23.593Z","etag":null,"topics":["argparse","automation","cli","click","developer-tools","gui","portable-app","powershell","pyside6","python","qt","scriptree","solidworks","tool-runner","windows"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KenM76.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-16T13:39:44.000Z","updated_at":"2026-04-25T13:12:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"4bd532b6-4225-4d27-b47c-469f0862e027","html_url":"https://github.com/KenM76/scriptree","commit_stats":null,"previous_names":["kenm76/scriptree"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/KenM76/scriptree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenM76%2Fscriptree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenM76%2Fscriptree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenM76%2Fscriptree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenM76%2Fscriptree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KenM76","download_url":"https://codeload.github.com/KenM76/scriptree/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenM76%2Fscriptree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32265977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argparse","automation","cli","click","developer-tools","gui","portable-app","powershell","pyside6","python","qt","scriptree","solidworks","tool-runner","windows"],"created_at":"2026-04-18T01:00:42.745Z","updated_at":"2026-06-27T02:05:51.221Z","avatar_url":"https://github.com/KenM76.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ScripTree V3\n\nA universal GUI generator for command-line tools. Define a tool once — by pointing ScripTree at an executable or building a form from scratch — and run it through a clean GUI with labeled fields, dropdowns, file pickers, and checkboxes.\n\nV3 ships with **three launchers and a headless screenshot tool in one installation**:\n\n| Launcher | What it does |\n|---|---|\n| **`run_scriptreeforest.bat`** | **Primary entry point.** The **forest workspace**: a persistent root cell on your desktop plus every other cell linked under it.  Auto-discovers nearby `.scriptreering` / `.scriptreetree` / `.scriptree` catalogs at startup, restores the saved layout, and adopts new tools as they appear in the workspace folder.  This is what most users double-click after install.  Internally chains into `run_scriptreering.py` with `SCRIPTREE_FOREST_MODE=1` — same Python search, same dependency check, same self-healing.  See [`docs/cell_shell.md`](docs/cell_shell.md). |\n| **`run_scriptreering.bat`** | The **bare cell + ring shell** (no forest workspace).  Floating hexagonal launchers with no implicit root: each cell stands alone unless you drag two together to dock them into a *ring*.  Single-click pops up the cell's tool menu; double-click opens the full editor on the cell's catalog.  Save layouts as `.scriptreering` files.  Useful when you want a one-off cell on the desktop without the workspace persistence. |\n| **`run_scriptree.bat`** | The classic **V1 editor**: tool runner, configurations, parser, save/load.  Identical behaviour to v0.1.x.  All three shells (forest / ring / cell) shell out to this whenever you click a tool — V1 stays the editor; the shells are just launchers. |\n| **`run_screenshooter.bat`** | The **headless screenshot tool**.  No arguments → opens the screenshooter's GUI form via the V1 editor (labeled fields, dropdowns, file picker — pick what to render and click Run).  With arguments → CLI passthrough to `screenshooter.py` for batch / scripted use.  Captures cells, parameter forms, popup trees, the full editor MainWindow (tree + form + output + cmd-line), the tabbed StandaloneWindow view, the forest hub + cell composite, and the forest hub + merged menu composite — every view ScripTree ships, rendered as PNG without ever flashing a window onto the user's desktop.  Used to generate the per-demo previews on [`scriptree-demos`](https://github.com/KenM76/scriptree-demos) and the documentation screenshots in `docs/`. |\n\n## Installing the portable zip\n\nDownload the V3 zip from the Releases page and extract it. The launcher expects this layout:\n\n```\n\u003csome-folder\u003e/\n├── run_scriptreeforest.bat ← forest workspace (PRIMARY — double-click this)\n├── run_scriptreeforest.py\n├── run_scriptreering.bat   ← bare ring shell (no workspace)\n├── run_scriptreering.py\n├── run_scriptree.bat       ← V1 editor (called as subprocess from the shells)\n├── run_scriptree.py\n├── run_screenshooter.bat   ← headless screenshot tool (no args → GUI form)\n├── screenshooter.py        ← (CLI; `python screenshooter.py --help` for kinds)\n├── scriptree/              ← Python package\n│   ├── main.py\n│   ├── shell/              ← cell + ring shell (NEW in V3)\n│   └── ...\n├── branding/\n│   └── branding.config.json\n├── lib/\n│   ├── combridge/          ← bundled COM-automation runtime\n│   ├── python/             ← portable Python (after install_python.ps1)\n│   └── pypi/               ← vendored PySide6 + deps\n└── ...\n```\n\n**Common extraction mistake:** if you right-click the zip and pick \"Extract here\" while already standing inside a folder named `ScripTree`, Windows produces `ScripTree/ScripTree/...` (the inner one is the zip's own folder). The launcher walks up to four levels deep looking for the package, so this usually still works — but if it doesn't, just move the inner `ScripTree/*` contents up one level so they sit next to `run_scriptree.bat`.\n\nIf the launcher still can't find the package, it prints a diagnostic listing exactly which folder it looked in and what it saw — paste that into an issue and it's a one-round fix.\n\n## Quick Start\n\n```bash\n# Prerequisites: Python 3.11+\n\n# Option A: vendor into the project, trimmed to the ~65 MB minimum (recommended)\npython lib/update_lib.py --trim\npython run_scriptreeforest.py    # forest workspace (preferred entry point)\n# or:\npython run_scriptreering.py      # bare ring shell (no workspace)\npython run_scriptree.py          # V1 editor directly\npython screenshooter.py --help   # headless screenshot CLI\n\n# Option B: use your system Python environment\npip install PySide6\npython run_scriptreeforest.py\n```\n\nOr on Windows, double-click **`run_scriptreeforest.bat`** to launch the forest workspace (the usual entry point), `run_scriptreering.bat` for the bare ring shell, `run_scriptree.bat` for the editor directly, or `run_screenshooter.bat` to render PNGs of any tool / tree / cell / forest / popup-menu without ever showing a window on the desktop. Every launcher will offer to fetch a portable Python if none is found.\n\n**Option A makes the folder portable** — after `update_lib.py --trim` runs once, you can zip the entire project folder and drop it on any other machine with the same OS/architecture and Python 3.11+. No pip, no network, no admin rights required. The `--trim` flag strips unused Qt modules (WebEngine, QML, Quick/3D, Multimedia, PDF, Charts, translations, dev tools) — ScripTree only uses `QtCore`/`QtGui`/`QtWidgets`, so you save ~400 MB.\n\n## Key Features\n\n- **Auto-parse any CLI tool** — parses `--help` output from argparse, click, PowerShell, Windows `/flag`, and GNU tools\n- **Named configurations** — save multiple form states per tool with environment overrides, UI visibility, and hidden parameters\n- **Standalone mode** — strip the IDE down to just the form for end users\n- **Tree launchers** — group tools into `.scriptreetree` files with tabbed standalone view\n- **Custom menus** — add menu bars to tools and trees\n- **AI-compatible** — point any LLM at `docs/LLM/` to generate tool files\n- **No shell execution** — `shell=False` everywhere, input sanitization on every run\n- **File-based permissions** — 32 capability files, secure defaults, NTFS ACL compatible (see [`docs/security.md`](docs/security.md) for the full per-capability table)\n- **Fully portable** — INI settings, zero registry, copy and run\n- **Encrypted credentials** — run-as-different-user with XOR pad, immediate zeroization\n\n## Project Structure\n\n```\nScripTree/\n├── run_scriptreeforest.bat  ← forest workspace launcher (PRIMARY)\n├── run_scriptreeforest.py\n├── run_scriptreering.bat    ← bare cell + ring shell launcher\n├── run_scriptreering.py\n├── run_scriptree.bat        ← V1 editor launcher (shells out target)\n├── run_scriptree.py\n├── run_screenshooter.bat    ← headless screenshot tool launcher\n├── screenshooter.py         ← screenshot CLI (8 widget kinds — see --help)\n├── permissions/             ← capability permission files\n├── lib/                     ← vendored deps (portable install)\n│   ├── requirements.txt     ← pinned versions\n│   ├── update_lib.py        ← install / refresh / audit\n│   ├── install_python.ps1   ← portable Python downloader\n│   ├── install_combridge.ps1 ← combridge runtime installer\n│   ├── _manifests/          ← provenance notes per package\n│   ├── combridge/           ← bundled COM-automation runtime\n│   ├── python/              ← portable Python (post-install)\n│   └── pypi/                ← installed packages (gitignored)\n├── scriptree/               ← application code\n│   ├── core/                ← schema + IO + runner\n│   ├── shell/               ← cell / ring / forest shell (NEW in V3)\n│   ├── ui/                  ← V1 editor + standalone window\n│   └── plugins/             ← capability plugins\n├── tests/                   ← test suite (1900+ tests)\n├── docs/                    ← documentation + LLM authoring docs\n├── pyproject.toml\n└── ScripTreeApps/           ← user tools and trees\n```\n\n## Updating vendored dependencies\n\nWhen a security advisory drops for one of the pinned packages:\n\n```bash\n# 1. Edit lib/requirements.txt, bump the version.\n# 2. Refresh + re-trim in one go:\npython lib/update_lib.py --upgrade --trim\n\n# Periodically check for CVEs:\npython lib/update_lib.py --audit\n```\n\nEvery installed package gets a provenance note in `lib/_manifests/` showing its version, source, and install timestamp. `--trim` also writes `lib/_manifests/trim_log.md` listing exactly which files were removed and how much space was freed.\n\n### Per-tool vendored dependencies\n\nTools under `ScripTreeApps/` that need their **own** Python packages (e.g. a DXF-rendering tool that needs `matplotlib` + `ezdxf`, which aren't GUI deps and may even target a different Python interpreter) follow the same pattern, scoped to the tool folder:\n\n```\nScripTreeApps/\u003ctool\u003e/lib/\n├── requirements.txt   # \"# python: py -3.12\" header picks the interpreter\n├── _manifests/\n└── pypi/              # injected onto sys.path by the tool's own script\n```\n\nRefresh every tool's `lib/` at once:\n\n```bash\npython lib/update_lib.py --all-apps          # ScripTree's own + every tool's\npython lib/update_lib.py --apps-only         # just the tools\npython ScripTreeApps/audit_vendored.py       # writes VENDORED_DEPS.md audit\n```\n\nThe `ScripTreeApps/ScripTreeManagement/ScripTreeManagement.scriptreetree` wraps all four management scripts (`update_lib.py`, `audit_vendored.py`, `make_portable.py`, `make_shortcut.py`) as clickable GUI tools inside ScripTree itself. See [`docs/vendored_dependencies.md`](docs/vendored_dependencies.md) for the full explanation.\n\n## Building a portable distribution\n\n```bash\n# Copies this project into a clean, end-user-ready folder, strips dev\n# files (.git, __pycache__, tests, etc.), runs a smoke-test, optionally\n# zips the result. Handles existing ScripTreeApps/ with keep/overwrite/backup.\npython make_portable.py --force --scriptreeapps=keep\n\n# Generate a platform-native desktop shortcut (.lnk / .desktop / .command):\npython make_shortcut.py\n```\n\n## Documentation\n\n- **[Quickstart](docs/quickstart.md)** — get running in 60 seconds\n- **[Features](docs/features.md)** — top 10 and top 20 feature lists\n- **[Security Guide](docs/security.md)** — permissions, sanitization, deployment\n- **[Full Help Index](docs/README.md)** — all documentation\n\n## For IT Administrators\n\nScripTree is designed for corporate deployment:\n\n1. Deploy the `permissions/` folder with capability files\n2. Set the folder read-only for users via NTFS ACLs\n3. Grant write on specific files per AD group\n4. Set `.scriptree` files read-only — users can run but not edit\n\nNo per-user config, no registry, no cloud, no agents. See the [Security Guide](docs/security.md).\n\n## Contributors\n\n**Ken M** — Creator, Product Designer \u0026 Architect\n**Claude (Anthropic)** — Lead Developer\n\nSee [CONTRIBUTORS.md](CONTRIBUTORS.md) for details.\n\n## License\n\nSee [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkenm76%2Fscriptree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkenm76%2Fscriptree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkenm76%2Fscriptree/lists"}