push-changelog
Logs summarized changes to the backend API after confirming details and checking for duplicates.
Install
mkdir -p .claude/skills/push-changelog && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17208" && unzip -o skill.zip -d .claude/skills/push-changelog && rm skill.zipInstalls to .claude/skills/push-changelog
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Push a changelog entry to the Nemati AI backend API. Use when user says push changelog, publish changelog, send changelog, create changelog entry, or log a change to the server.Key capabilities
- →Read session changes from docs/changelog.md
- →Extract application version from pyproject.toml
- →Check for duplicate changelog entries via API
- →Confirm draft entry details with the user
- →Push the changelog entry to the Nemati AI backend API
- →Verify the entry is live on production
How it works
The skill reads changelog content and version, checks for duplicates, confirms with the user, and then sends a POST request to the Nemati AI backend API.
Inputs & outputs
When to use push-changelog
- →Publishing changelog entries
- →Logging application changes
- →Sending updates to the backend API
About this skill
Push Changelog — Send Entry to Backend API
You push changelog entries to the Nemati AI backend via a secured POST endpoint.
RULE: Never hardcode the API key. Always read from .env or .env.local.
RULE: Always confirm the entry details with the user before pushing.
RULE: Write content as a non-technical summary — describe what changed for end users.
RULE: Always read docs/changelog.md first to build the entry from session work.
RULE: Always use today's date via $(date +%Y-%m-%d) — never hardcode a date.
RULE: Always check for duplicate titles before pushing — skip if already exists.
RULE: Always read app_version from pyproject.toml — never guess.
Workflow
Step 1 — Read session changes
cat docs/changelog.md
Use the latest entries to build the changelog content.
Step 2 — Read version
grep 'version = ' pyproject.toml | head -1
Step 3 — Check for duplicates
source .env && curl -s \
"https://nemati.ai/auth/api/v1/changelogs/changelogs/" \
-H "Authorization: Bearer $CHANGELOG_API_KEY" \
| python -c "
import sys, json
entries = json.load(sys.stdin)
for e in entries:
print(f' id={e[\"id\"]} {e[\"date\"]} {e[\"title\"]}')
"
If a title already exists, SKIP — do not push a duplicate.
Step 4 — Confirm with user
Show the draft entry (title, category, content) and ask for approval before pushing.
Step 5 — Push the entry
See How to Push below.
Step 6 — Verify
Confirm the entry is live on production.
Endpoint
POST /auth/api/v1/changelogs/changelogs/
Host: nemati.ai (production) or localhost:8000 (local)
Authorization: Bearer <CHANGELOG_API_KEY>
Content-Type: application/json
Request Body (JSON)
{
"title": "nai-planner — Your title here",
"date": "YYYY-MM-DD",
"category": "New Feature|Improvement|Bug Fix|Security|Announcement",
"content": "Non-technical summary of what changed.",
"is_published": true,
"site_names": ["nematiai"],
"app_name": "all",
"app_version": "0.1.0",
"platform": "all",
"update_available": false,
"download_url": null
}
Valid Categories
| Value | Description |
|---|---|
New Feature | Brand new functionality |
Improvement | Enhancement to existing feature |
Bug Fix | Bug fix |
Security | Security patch or update |
Announcement | General announcement |
How to Push
TODAY=$(date +%Y-%m-%d)
cat > /tmp/changelog_entry.json << JSONEOF
{
"title": "nai-planner — Your title here",
"date": "$TODAY",
"category": "New Feature",
"content": "Non-technical summary.",
"is_published": true,
"site_names": ["nematiai"],
"app_name": "all",
"app_version": "0.1.0",
"platform": "all",
"update_available": false,
"download_url": null
}
JSONEOF
source .env && EXISTING=$(curl -s \
"https://nemati.ai/auth/api/v1/changelogs/changelogs/" \
-H "Authorization: Bearer $CHANGELOG_API_KEY" \
| python -c "
import sys, json
title = 'nai-planner — Your title here'
entries = json.load(sys.stdin)
print(sum(1 for e in entries if e['title'] == title))
")
if [ "$EXISTING" -gt 0 ]; then
echo "SKIPPED — duplicate title already exists"
rm -f /tmp/changelog_entry.json
else
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
"https://nemati.ai/auth/api/v1/changelogs/changelogs/" \
-H "Authorization: Bearer $CHANGELOG_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/changelog_entry.json)
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')
if [ "$HTTP_CODE" = "201" ]; then
echo "CREATED — changelog pushed successfully"
echo "$BODY" | grep -E '"id"|"title"'
else
echo "FAILED (HTTP $HTTP_CODE)"
echo "$BODY" | head -5
fi
rm -f /tmp/changelog_entry.json
fi
Env Var Setup
The key must be in .env:
CHANGELOG_API_KEY=<your-key>
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| 401 Unauthorized | Key missing or wrong | Check CHANGELOG_API_KEY in env |
| 400 Invalid category | Typo in category value | Use exact values from the table above |
| 500 Internal Server Error | DB error | Check server logs |
When not to use it
- →When the changelog is not for the Nemati AI backend API
- →When the API key is not available in .env or .env.local
- →When a duplicate title already exists
Prerequisites
Limitations
- →The skill interacts with a specific Nemati AI backend API
- →Requires an API key for authentication
- →Changelog content must be a non-technical summary
How it compares
This workflow automates the process of pushing changelog entries to a specific API, including checks and confirmations, unlike manual API calls.
Compared to similar skills
push-changelog side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| push-changelog (this skill) | 0 | 4mo | Caution | Intermediate |
| ci-checks | 0 | 1mo | No flags | Beginner |
| transcription | 1 | 7mo | Review | Intermediate |
| emergency-card | 1 | 7mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
ci-checks
vishipayyallore
Run CI-aligned checks for this workshop repository (backend lint/tests, frontend lint/tests/build, markdown lint).
transcription
MadAppGang
Audio/video transcription using OpenAI Whisper. Covers installation, model selection, transcript formats (SRT, VTT, JSON), timing synchronization, and speaker diarization. Use when transcribing media or generating subtitles.
emergency-card
huifer
生成紧急情况下快速访问的医疗信息摘要卡片。当用户需要旅行、就诊准备、紧急情况或询问"紧急信息"、"医疗卡片"、"急救信息"时使用此技能。提取关键信息(过敏、用药、急症、植入物),支持多格式输出(JSON、文本、二维码),用于急救或快速就医。
onboard
jwadhwa2259
Configure CodeScope for this project. Detects project type, languages, and build commands, then walks through agent model selection and workflow preferences. Run this before /codescope:bootstrap.
project-workflow
sumanin5
项目启动、环境搭建与日常开发工作流。涵盖 local 与 docker 两种模式下的启动指令。
generated-subskill-0521
engremran07
Generated governance sub-skill. Use when: applying standardized quality and safety checks for large-scale governance tasks.