$ $
curl -s https://cpynet.com/install.sh -o install.sh && bash -n install.sh && . install.shSHA256 файла install.sh: 86bd4b2171ea3f0e8e845df8585e69a3d452eb94855bbab7dd097c8af9b96887
# cpynet installer - fetches the cpy/pst shell functions from https://cpynet.com/alias,
# adds a source line to your shell's rc file (once, never duplicated), and
# loads them into this session right now.
#
# Dot-sourced (". install.sh"), not run as a subprocess - that's what makes
# cpy/pst usable immediately in this terminal, not just in new ones.
CPYNET_RC=~/.bashrc
[ -n "$ZSH_VERSION" ] && CPYNET_RC=~/.zshrc
if curl -s https://cpynet.com/alias -o ~/.cpy.sh && bash -n ~/.cpy.sh; then
grep -qxF 'source ~/.cpy.sh' "$CPYNET_RC" || echo 'source ~/.cpy.sh' >> "$CPYNET_RC"
. ~/.cpy.sh
echo "cpynet installed - cpy and pst are ready"
else
echo "install failed, try again"
fi
unset CPYNET_RC
SHA256 скрипта, который скачивает install.sh (~/.cpy.sh): 8161c889a7240a3958267ffdb1697cff311246b5c4aaf57c02d44aa1d397a17e
cpy() {
local password="" ttl="" reads="" e2e="" a
for a in "$@"; do case "$a" in
-password=*) password="${a#-password=}" ;;
-ttl=*) ttl="${a#-ttl=}" ;;
-reads=*) reads="${a#-reads=}" ;;
-e) e2e=1 ;;
esac; done
local qs=""
[ -n "$ttl" ] && qs="ttl=$ttl"
[ -n "$reads" ] && qs="${qs:+$qs&}reads=$reads"
local target="https://llmtag.com/"
[ -n "$qs" ] && target="https://llmtag.com/?$qs"
local input key=""
if [ -n "$e2e" ]; then
key=$(openssl rand -base64 24)
input=$(openssl enc -aes-256-cbc -pbkdf2 -salt -a -A -pass "pass:$key") || return 1
else
input=$(cat)
fi
local url
if [ -n "$password" ]; then
url=$(printf '%s' "$input" | curl -sS --fail-with-body -L -H "X-Password: $password" --data-binary @- "$target") || return 1
else
url=$(printf '%s' "$input" | curl -sS --fail-with-body -L --data-binary @- "$target") || return 1
fi
local bare="${url%%\?*}"
echo "${bare##*/}"
echo "curl \"$url\""
if [ -n "$key" ]; then
echo "key (share separately, never with the link/code): $key"
fi
}
pst() {
local password="" id="" key="" a
for a in "$@"; do case "$a" in
-password=*) password="${a#-password=}" ;;
-key=*) key="${a#-key=}" ;;
*) id="$a" ;;
esac; done
if [ -z "$id" ]; then echo "usage: pst <code> [-password=xxx] [-key=xxx]" >&2; return 1; fi
local target="https://llmtag.com/$id"
[ -n "$password" ] && target="$target?p=$password"
local text
text=$(curl -sS --fail-with-body "$target") || return 1
if [ -n "$key" ]; then
text=$(printf '%s' "$text" | openssl enc -d -aes-256-cbc -pbkdf2 -a -A -pass "pass:$key") || { echo "decrypt failed - wrong key?" >&2; return 1; }
fi
printf '%s\n' "$text"
if command -v pbcopy >/dev/null 2>&1; then printf '%s' "$text" | pbcopy
elif command -v wl-copy >/dev/null 2>&1; then printf '%s' "$text" | wl-copy
elif command -v xclip >/dev/null 2>&1; then printf '%s' "$text" | xclip -selection clipboard
elif command -v xsel >/dev/null 2>&1; then printf '%s' "$text" | xsel --clipboard
elif command -v clip.exe >/dev/null 2>&1; then printf '%s' "$text" | clip.exe
fi
}
После этого просто: команда | cpy — выводит 6-значный код и готовую команду curl в двух строках. Чтобы защитить паролем: команда | cpy -password=xxx. Для чтения: pst 123456 — выводит содержимое в stdout, а также копирует в буфер обмена, если это возможно (pbcopy/wl-copy/xclip/xsel/clip.exe).
Ссылки создаются на коротком домене https://llmtag.com; команда установки выше скачивается с основного сайта, https://cpynet.com - тот же сервис, просто отдельный короткий домен для ссылок.
Invoke-RestMethod https://cpynet.com/install.ps1 -OutFile install.ps1; . .\install.ps1SHA256 файла install.ps1: 0ab2333a4ea86b1b8797c2b8251daa368d485dfeaa6dfcaad90c076d0217b43c
# cpynet installer - fetches the cpy/pst PowerShell functions from
# https://cpynet.com/alias.ps1, adds a dot-source line to $PROFILE (once, never duplicated),
# and loads them into this session right now.
#
# Dot-sourced (". .\install.ps1"), not run as a subprocess - that's what
# makes cpy/pst usable immediately in this session, not just in new ones.
$ErrorActionPreference = 'Stop'
try {
Invoke-RestMethod https://cpynet.com/alias.ps1 -OutFile "$HOME/.cpy.ps1"
if (-not (Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force | Out-Null }
if (-not (Select-String -Path $PROFILE -Pattern '\.cpy\.ps1' -Quiet -ErrorAction SilentlyContinue)) {
Add-Content $PROFILE "`n. `"$HOME/.cpy.ps1`""
}
. "$HOME/.cpy.ps1"
Write-Output "cpynet installed - cpy and pst are ready"
} catch {
Write-Output "install failed, try again"
}
SHA256 скрипта, который скачивает install.ps1 (~/.cpy.ps1): 356ae02c39d58c86d717899969cf961e519eac156105140671c63941b9b5aa17
function cpy {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline = $true)]
[string[]]$InputObject,
[string]$Password = "",
[string]$Ttl = "",
[string]$Reads = ""
)
begin { $lines = New-Object System.Collections.Generic.List[string] }
process { if ($null -ne $InputObject) { foreach ($l in $InputObject) { $lines.Add($l) } } }
end {
$text = $lines -join "`n"
$qs = @()
if ($Ttl) { $qs += "ttl=$Ttl" }
if ($Reads) { $qs += "reads=$Reads" }
$target = "https://llmtag.com/"
if ($qs.Count -gt 0) { $target = "https://llmtag.com/?" + ($qs -join '&') }
$headers = @{}
if ($Password) { $headers["X-Password"] = $Password }
try {
$url = (Invoke-RestMethod -Uri $target -Method Post -Body $text -Headers $headers -ContentType "text/plain; charset=utf-8").Trim()
} catch {
Write-Error $_
return
}
$bare = $url -replace '\?.*$', ''
$code = $bare -replace '.*/', ''
Write-Output $code
Write-Output "curl `"$url`""
}
}
function pst {
[CmdletBinding()]
param(
[Parameter(Position = 0)]
[string]$Code = "",
[string]$Password = ""
)
if (-not $Code) { Write-Error "usage: pst <code> [-Password xxx]"; return }
$target = "https://llmtag.com/$Code"
if ($Password) { $target = "$target`?p=$Password" }
try {
$text = Invoke-RestMethod -Uri $target -Method Get
} catch {
Write-Error $_
return
}
Write-Output $text
if (Get-Command Set-Clipboard -ErrorAction SilentlyContinue) {
$text | Set-Clipboard
}
}
Это один раз добавляет функции cpy/pst в $PROFILE - после этого "текст" | cpy и pst 123456 работают так же, как в bash-версии (параметры в собственном стиле PowerShell: cpy -Ttl 1h -Reads 3 -Password xxx, pst 123456 -Password xxx).


1. Введите текст
Вставьте текст или код на вкладке «написать», нажмите отправить.


2. Поделитесь кодом, ссылкой или QR
При отправке создаются 6-значный код, готовая команда curl и сканируемый QR-код.


3. Введите код
На вкладке «прочитать» введите код — или отсканируйте QR-код телефоном.


4. Читается один раз, потом исчезает
Содержимое отображается мгновенно и безвозвратно удаляется с сервера — тот же код повторно не сработает.
команда | curl --data-binary @- https://llmtag.com/В ответ приходит голая, готовая к использованию ссылка.
curl "ваша-ссылка"Читается один раз, затем удаляется безвозвратно. Установлен алиас выше? pst 123456.
Заполните поле пароля ниже — ссылка автоматически будет содержать ?p=пароль.
Invoke-RestMethod -Method Post -Body "текст" -Uri https://llmtag.com/Invoke-RestMethod "ваша-ссылка"Вместо curl.exe можно использовать и встроенный Invoke-RestMethod.
Добавьте Accept: application/json к запросу создания, чтобы получить {"code","url","expires_at"} вместо обычного текста - удобнее разбирать в скрипте. Полное описание, включая коды состояния (400/401/404/413/429/503) и пример с GitHub Actions: /api.
Только один раз. Он безвозвратно удаляется с сервера в момент прочтения.
Даже если никто его не прочитает, вставка удаляется автоматически - на сервере не остаётся никаких следов.
CPYNET вообще не касается буфера обмена - всё передаётся через curl из терминала, поэтому отключённый буфер обмена не имеет значения.
Текст хранится только в памяти и никогда не записывается на диск - он безвозвратно удаляется в момент прочтения или по истечении времени. При защите паролем он хранится зашифрованным с помощью AES-256-GCM.
Да - в PowerShell вводите curl.exe вместо алиаса curl, иначе длинные тексты могут обрезаться в консоли. Либо используйте встроенный Invoke-RestMethod, либо установите функции cpy/pst через раздел Windows / PowerShell выше.
До 2 MB, 6-значный код, по умолчанию автоудаление в течение 2 мин - можно выбрать до 1 д (параметр ?ttl= или переключатель TTL на вкладке «написать»). По умолчанию удаляется после 1 прочтения - можно выбрать до 10 прочтений (параметр ?reads= или переключатель количества прочтений).
Создан для сред, где совместное использование буфера обмена невозможно: удалённые серверы по SSH, машины, где доступ к буферу обмена заблокирован политикой, или отдельные машины/контейнеры/виртуальные рабочие столы без общего буфера обмена между ними. CPYNET никогда не касается буфера обмена операционной системы - всё передаётся как обычный текст через curl - поэтому им можно уверенно пользоваться даже там, где буфер обмена полностью отключён.
Разрешённые расширения файлов: .txt, .log, .csv, .json, .md, .pdf, .doc, .docx, .rtf, .xml, .yaml, .yml, .pem, .crt, .key, .conf, .cfg, .env, .ini, .toml
Сервер никогда не выполняет, не интерпретирует и не передаёт вставленное в оболочку - он лишь сохраняет и возвращает данные точно в том виде, в каком получил. Никаких сторонних зависимостей (чистая стандартная библиотека Go), никакого доступа к файловой системе с пользовательскими данными, никаких исходящих запросов.
Значок щита (🔒) на вкладке «написать» или cpy -e из терминала - это другой уровень по сравнению с паролем выше: при пароле сервер ненадолго сам расшифровывает текст для проверки; здесь же шифрование полностью происходит на вашей стороне - сервер никогда не видит ничего, кроме зашифрованного текста.
⚠️ Предупреждение: это не устраняет риск передачи чего-либо в оболочку (curl ... | bash) без предварительной проверки - это универсальный риск для любого инструмента обмена, а не особенность именно этого сервиса. Никогда не запускайте непроверенную команду из источника, которому не доверяете.
Макс. размер: 2 MB · Код: 6 знаков · Автоудаление: по умолчанию 2 мин, можно выбрать до 1 д · Прочтения: по умолчанию 1, до 10
CPYNET v1.0 — один файл, один бинарник на Go — без внешней базы данных и зависимостей.