SkillAgentSearch skills...

PromptPlus

Interactive command-line toolkit for .Net core with powerful controls and commands to create professional console applications.

Install / Use

npx skills add FRACerqueira/PromptPlus

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

88/100

Supported Platforms

Claude Code

Tags

<div align="center"> <img src="icon.png" alt="PromptPlus" width="120" height="120" />

PromptPlus

PromptPlus transforms your console apps with a modern .NET library that delivers polished, interactive experiences — from text input with history and searchable lists to masked fields, date/time pickers, file browsers, progress bars, charts, and more — all streamlined through one sleek fluent API.

NuGet License: MIT .NET NuGet Downloads

</div>

🤖 New: pick the right ConsolePlus/PromptPlus layer and control conversationally with the ConsolePlus + PromptPlus Plugin — works with Claude Code or GitHub Copilot to choose the layer, check whether an interactive control can run in your context, pick the right one of PromptPlus's 21 controls, implement it, and audit existing usage. Learn more ↓


Highlights

  • 20+ interactive controls — from a simple key-press to multi-column tables and tree browsers
  • 6 output-only widgets — render sliders, calendars, banners, charts and more without blocking
  • Fluent API — every control is configured with readable method chains
  • Two-layer config — set defaults once with PromptPlus.Config, override per control with .Options()
  • Abort anywhere — Esc aborts any control; result carries an IsAborted flag
  • History persistence — last confirmed value saved and pre-loaded automatically
  • Terminal-safe — auto-detects size, re-renders on resize, enforces 80×10 minimum gracefully
  • Cross-platform — Windows, Linux, macOS; .NET 8, 9 and 10
  • Demo Mode — script keyboard input to auto-record GIFs of your controls, no human needed (AutoDemoSamples)
<div align="center"> <img src="media/PromptPlusDemo.gif" alt="PromptPlus demo" width="720" /> </div>

What's new in the latest version

📢 Release Note – PromptPlus V.6.X Release Candidate

🚀 Release Candidate Phase

  • The 6.X version officially enters the Release Candidate phase.
  • Purpose: final validation before the stable release — no new features expected, only stabilization fixes.

🛠️ Source Code

  • Available in the main branch.

📦 NuGet Package

  • Latest update: 6.0.0-rc[seq].
  • To install, you must enable the pre-release option in NuGet.

💬 Community Feedback

  • This space is open for:
    • Sharing feedback
    • Reporting issues
    • Suggesting enhancements

Installation

PromptPlus 6.x is currently in Beta — you must enable pre-release packages to install it.

dotnet add package PromptPlus --prerelease

Or via the Package Manager Console:

Install-Package PromptPlus -IncludePrerelease

Quick Start

using PromptPlusLibrary;

// Ask for a name
var nameResult = PromptPlus.Controls.Input("Your name").Run();
if (nameResult.IsAborted) return;

// Choose a color
var colorResult = PromptPlus.Controls
    .Select<string>("Favorite color")
    .AddItems(["Red", "Green", "Blue"])
    .Run();

// Deconstruct result
var (color, aborted) = colorResult;
if (!aborted)
    PromptPlus.Console.WriteLine($"Hello {nameResult.Content}, you chose {color}!");

💡 Tip: Every control returns ResultPrompt<T>. Use .Content for the value, .IsAborted to detect Esc, or deconstruct with var (value, aborted) = result.


Two-Layer Configuration

Layer 1 — Global defaults (applied to all controls)

using PromptPlusLibrary;

PromptPlus.Config.PageSize = 8;
PromptPlus.Config.HideAfterFinish = true;

Layer 2 — Per-control override (.Options() fluent method)

PromptPlus.Controls
    .Input("Notes")
    .Options(o => o
        .HideAfterFinish(false)
        .ShowTooltip(false))
    .Run();

Per-control settings always win over global config. See docs/global-behaviors.md for the full property reference.

Persist config to disk

// Write PromptPlus.config to the current directory
PromptPlus.Config.ToFile(".");

On next run, PromptPlus automatically reads PromptPlus.config from the working directory.


Global Behaviors

| Behavior | Observable effect | |---|---| | Terminal resize detection | Control re-renders its own area; surrounding output is untouched | | Minimum terminal size (80×10) | Shows a resize prompt and waits — never crashes | | Culture isolation | DefaultCulture applied only during .Run(); thread culture always restored | | Single-line rendering | Newlines stripped; sliding window with when value is too wide | | History persistence | Last confirmed value saved to disk; pre-loaded on next run | | HideAfterFinish | Control UI erased after confirmation; only the final answer line remains | | HideOnAbort | Control UI erased when user presses Esc | | Ctrl+C handling | Intercepted by default → triggers abort; set RemoveHandlerCtrlC = true to pass to OS | | Tooltip visibility | ShowTooltip = true shows keyboard hints below the prompt | | Abort key hint | ShowMessageAbortKey = true includes the abort-key name in the tooltip | | Auto-initialization | PromptPlus initializes on first access: detects terminal, loads config, registers error log |


Localization

PromptPlus ships 11 built-in locales as embedded resources. The active locale is selected automatically from CultureInfo.CurrentCulture; override it at any time with:

PromptPlus.Config.DefaultCulture = new CultureInfo("pt-BR");

| Culture code | Language | |---|---| | (default) | English | | pt-BR | Portuguese (Brazil) | | de-DE | German | | es-ES | Spanish | | fr-FR | French | | it-IT | Italian | | ja-JP | Japanese | | ko-KR | Korean | | nl-BE | Dutch (Belgium) | | ru-RU | Russian | | zh-CN | Chinese (Simplified) |

If DefaultCulture is set to a culture that has no embedded resource, PromptPlus falls back to the default English strings.

Adding a custom locale

If your target culture is not listed above, you can provide your own satellite resource:

  1. Copy PromptPlus/Resources/PromptPlusResources.resx from the source tree (or extract it from the NuGet package).
  2. Translate every message value to your language, keeping the existing key names and format placeholders unchanged.
  3. Compile the .resx file into a binary .resources file — see Compiling .resx files (Microsoft docs).
  4. Place the compiled file, named PromptPlus.<culture-code>.resources (e.g. PromptPlus.pl-PL.resources), in the same directory as your application binaries.

PromptPlus will discover and load it automatically at runtime via the standard .NET resource fallback chain.


Controls Reference

| Control | Factory method | Returns | |---|---|---| | Text input | PromptPlus.Controls.Input(prompt) | ResultPrompt<string> | | Secret / password | PromptPlus.Controls.Secret(prompt) | ResultPrompt<string> | | Key press | PromptPlus.Controls.KeyPress(prompt) | ResultPrompt<ConsoleKeyInfo?> | | Confirm (yes/no) | PromptPlus.Controls.Confirm(prompt) | ResultPrompt<ConsoleKeyInfo?> | | Single select | PromptPlus.Controls.Select<T>(prompt) | ResultPrompt<T> | | Multi select | PromptPlus.Controls.MultiSelect<T>(prompt) | ResultPrompt<IEnumerable<T>> | | Table select | PromptPlus.Controls.TableSelect<T>(prompt) | ResultPrompt<TableSelectResult<T>> | | Table multi-select | PromptPlus.Controls.TableMultiSelect<T>(prompt) | ResultPrompt<T[]> | | Tree select | PromptPlus.Controls.TreeSelect<T>(prompt) | ResultPrompt<T?> | | Tree multi-select | PromptPlus.Controls.TreeMultiSelect<T>(prompt) | ResultPrompt<T[]> | | File browser | PromptPlus.Controls.File(prompt) | ResultPrompt<FileInfo> | | Multi-file | PromptPlus.Controls.MultiFile(prompt) | ResultPrompt<IEnumerable<FileInfo>> | | Calendar | PromptPlus.Controls.Calendar(prompt) | ResultPrompt<DateTime> | | Progress bar | PromptPlus.Controls.ProgressBar(prompt) | ResultPrompt<double> | | Task | PromptPlus.Controls.Task(prompt) | ResultPrompt<StateTask> | | Multi-tasks | PromptPlus.Controls.MultiTasks(prompt) | ResultPrompt<IEnumerable<MultiTaskResult>> | | Chart bar | PromptPlus.Controls.ChartBar(prompt) | ResultPrompt<double> | | Mask — string | PromptPlus.Controls.MaskEdit(prompt) | ResultPrompt<string> | | Mask — integer | PromptPlus.Controls.MaskInteger(prompt) | ResultPrompt<int> | | Mask — long | PromptPlus.Controls.MaskLong(prompt) | ResultPrompt<long> | | Mask — decimal | PromptPlus.Controls.MaskDecimal(prompt) | ResultPrompt<decimal> | | Mask — decimal currency | PromptPlus.Controls.MaskDecimalCurrency(prompt) | ResultPrompt<decimal> | | Mask — double | PromptPlus.Controls.MaskDouble(prompt) | ResultPrompt<double> | | Mask — double currency | PromptPlus.Controls.MaskDoubleCurrency(prompt) | ResultPrompt<double> | | Mask — date & time | PromptPlus.Controls.MaskDateTime(prompt) | ResultPrompt<DateTime> | | Mask — date only | PromptPlus.Controls.MaskDate(prompt) | ResultPrompt<DateTime> | | Mask — DateOnly | PromptPlus.Controls.MaskDateOnly(prompt) | ResultPrompt<DateOnly> | | Mask — time only | PromptPlus.Controls.MaskTime(prompt) | ResultPrompt<DateTime> | | Mask — TimeOnly | PromptPlus.Controls.MaskTimeOnly(prompt) | ResultPrompt<TimeOnly> |


Widgets Reference

Widgets are output-only — no user input, no ResultPrompt. Banner and Dash render immediately; the fluent widgets (Slider, Calendar, Switch, ChartBar) render when you call .Show().

| Widget | Factory method | Output | |---|---|---| | Slider (display) | PromptPlus.Widgets.Slider(value, min, max, fracionaldig) | ISliderWidget | | Calendar (display) | PromptPlus.Widgets.Calendar(dateref) | ICalendarWidget | | Switch (display) | PromptPlus.Widgets.Switch(value) | ISwitchWidget | | Banner | PromptPlus.Widgets.Banner(text) | imme

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars68
CategoryDevelopment
Updated24d ago
Forks6

Languages

C#

Security Score

100/100

Audited on Aug 28, 2026

No findings