Az alábbi Claude Skills útmutató lépésről lépésre bemutatja, hogyan építhetsz új Skill modult, amely Excel timesheetből automatikusan készít professzionális számlát. A tutorial végére egy működő, hordozható Auto-Invoice Generator Skill áll majd rendelkezésedre.
Mi az a Claude Skills és miért fontos?
A Claude Skills olyan önálló feladatmodul, amely tartalmaz egy SKILL.md leírást, valamint opcionális kódot és eszközöket. A Claude Skills útmutató bemutatja, hogy ezek a modulok hogyan gyorsítják a munkát és miként csökkentik a hosszú, ismétlődő utasítások mennyiségét. A Skill tartalmazhat szkripteket és fájlokat, amelyeket Claude automatikusan felismer és hatékonyan használ.
A Skill előnyei:
- jól szervezett és újrahasznosítható tudás
- gyors végrehajtás, mert csak a szükséges elemek töltődnek be
- következetes kimenetek a Claude alkalmazásokban
- kódfuttatás lehetősége biztonságos környezetben
Az útmutató célja, hogy gyorsan megértsd, hogyan építs saját Skill modult és hogyan használd a Claude ökoszisztémában.
A Claude Skills működése a teljes ökoszisztémában
A Claude Skills modulok működnek a Claude aplikációkban, a Claude Code fejlesztői felületen és az API hívások során. A legnagyobb előnye a hordozhatóság. Egyetlen Skill egyszeri verziózással működik minden rendszerben. A fejlesztők és felhasználók így konzisztens eredményeket érnek el.
A Claude Skills útmutató szerint elég egyszer betölteni a Skill módosított ZIP fájlját. Innentől a rendszer automatikusan felismeri azt. Ha a kérés megfelel a Skill céljának, a modul aktiválódik. Ez automatikus és átlátható működés, mert a Skill aktiválása megjelenik a reasoning nézetben.
Skill létrehozása: SKILL.md és a ZIP fájl
A Skill alapja a SKILL.md fájl. Ez tartalmazza a Skill nevét és leírását YAML formátumban. A Claude Skills útmutató szerint a ZIP fájl csak egyetlen SKILL.md fájlt tartalmazhat a gyökérben.
Példa SKILL.md:
name: "auto-invoice-generator-monthly-articles"
description: "Generate monthly invoices for written content from simple line items. Produces a branded PDF or editable DOCX/RTF invoice and, optionally, a one-page timesheet if article titles/links are provided."
Ezt a fájlt a Claude App beállításain belül, a Skills menüpontban töltheted fel. A feltöltés után a Skill automatikusan rendelkezésre áll minden beszélgetésben.
A Claude App használata a Skill teszteléséhez
A Skill feltöltése után létrejön egy új chatablak, ahol a modul már aktív. A Claude Skills útmutató következő lépése, hogy kipróbáld a Skill működését. Ehhez tölts fel egy Excel timesheetet. Ezután kérhetsz tőle egy szerkeszthető Word vagy PDF számlát. A Claude automatikusan felismeri a Skill célját és aktiválja azt. A kimenet következetes és a brand beállításainak megfelelő lesz.
A Skill aktiválása nem igényel külön beállítást minden chatben. Ha be van töltve, a Claude automatikusan felismeri azt. A vállalati környezetben így egységes sablonok és kimenetek használhatók.
Az API használata: előkészületek
A Claude Skills útmutató következő lépése az API használata. Ehhez telepíteni kell a szükséges csomagokat.
!pip -q install anthropic pandas openpyxl reportlab
A futtatás után be kell állítani az API kulcsot.
import os, json, sys, re
import anthropic
from datetime import datetime, timedelta
API_KEY = "YOUR_ANTHROPIC_API_KEY"
client = anthropic.Client(api_key=API_KEY)
Az API kulcsot az Anthropic Console menüjében találod. Az SDK kliens innentől kezdve minden híváshoz használható.
Adatelőkészítés: az Excel timesheet feldolgozása
A Skill működésének alapja a rendezett JSON adatszerkezet. A Claude Skills útmutató szerint a feldolgozást érdemes pandas könyvtárral végezni.
def load_invoice_from_timesheet(excel_path):
import pandas as pd
df = pd.read_excel(excel_path)
df.columns = df.columns.str.strip()
invoice_period = "2025-10"
if 'Date' in df.columns:
first_date = str(df['Date'].iloc[0])
date_match = re.search(r'(\d{2})\s+(\w+)\s+(\d{4})', first_date)
if date_match:
month_name = date_match.group(2)
year = date_match.group(3)
month_num = datetime.strptime(month_name[:3], '%b').month
invoice_period = f"{year}-{month_num:02d}"
article_col = next((col for col in df.columns if 'article' in col.lower() and 'name' in col.lower()), None)
amount_col = next((col for col in df.columns if 'amount' in col.lower()), None)
topic_col = next((col for col in df.columns if 'topic' in col.lower()), None)
line_items = []
timesheet_articles = []
for idx, row in df.iterrows():
if pd.isna(row.get(article_col)) or row.get(article_col) == '':
continue
article_name = str(row[article_col]).strip()
amount = row.get(amount_col, 0)
if isinstance(amount, str):
amount = float(amount.replace('$', '').replace(',', '').strip())
line_items.append({
"title": article_name,
"rate_type": "flat",
"qty": 1,
"rate": float(amount)
})
timesheet_articles.append({
"title": article_name,
"topic": str(row.get(topic_col, 'N/A')) if topic_col else 'N/A'
})
return {
"client_name": "Client",
"billing_contact": "billing@example.com",
"invoice_period": invoice_period,
"currency": "USD",
"payment_terms": "Net-30",
"line_items": line_items,
"discount_pct": 0.0,
"tax_pct": 0.0,
"timesheet": timesheet_articles
}
Ez a kód egységes JSON struktúrát ad vissza. Ez az adat kerül majd a Skillbe. A feldolgozás célja a stabil rendszer, mert a Skill nem a timesheet formátumát, hanem a kész JSON struktúrát használja.
Segédfüggvények a Skill által kért műveletekhez
A Claude Skills útmutató következő lépése, hogy biztonságosan futtatható eszközöket adjunk a Skill kezébe. A következő kód egy biztonságos bash parancsvégrehajtást és egy egyszerű szövegszerkesztő eszközt biztosít.
def execute_bash_tool(command):
try:
dangerous = ['rm -rf /', 'sudo', 'chmod', 'mkfs', '> /dev/']
if any(d in command for d in dangerous):
return f"Error: Command blocked for safety: {command}"
result = subprocess.run(
command,
shell=True,
capture_output=True,
text=True,
timeout=30,
cwd=tempfile.gettempdir()
)
output = result.stdout if result.stdout else result.stderr
return output if output else "Command executed successfully"
except subprocess.TimeoutExpired:
return "Error: Command timed out"
except Exception as e:
return f"Error executing command: {str(e)}"
def execute_text_editor_tool(params):
try:
command = params.get('command')
path = params.get('path')
if command == 'create':
file_text = params.get('file_text', '')
os.makedirs(os.path.dirname(path) if os.path.dirname(path) else '.', exist_ok=True)
with open(path, 'w') as f:
f.write(file_text)
return f"File created: {path}"
elif command == 'view':
if os.path.exists(path):
with open(path, 'r') as f:
content = f.read()
return content[:1000]
return f"Error: File not found: {path}"
elif command == 'str_replace':
if os.path.exists(path):
with open(path, 'r') as f:
content = f.read()
old_str = params.get('old_str', '')
new_str = params.get('new_str', '')
content = content.replace(old_str, new_str)
with open(path, 'w') as f:
f.write(content)
return f"File updated: {path}"
return f"Error: File not found: {path}"
return f"Unknown command: {command}"
except Exception as e:
return f"Error: {str(e)}"
Ezek a segédfüggvények teszik lehetővé a Claude által kért műveleteket biztonságos módon, miközben a Skill megőrzi a kontrollált működést.
Az Auto-Invoice Generator meghívása API-n keresztül
A Claude Skills útmutató most bemutatja a teljes folyamatot. A modell meghívása iteratív módon történik. A Skill kérései alapján a kód szimulálja az eszközhasználatot és összegyűjti a generált PDF fájlokat.
def generate_invoice_with_claude(invoice):
user_text = f"""Generate a professional PDF invoice with the following data:
Client: {invoice['client_name']}
Period: {invoice['invoice_period']}
Currency: {invoice['currency']}
Payment Terms: {invoice['payment_terms']}
Line Items:
{json.dumps(invoice['line_items'], indent=2)}
Timesheet Articles:
{json.dumps(invoice['timesheet'], indent=2)}
Please create a professional PDF invoice with:
1. Invoice header with invoice number (INV-{invoice['invoice_period'].replace('-', '')}-001)
2. Client billing information
3. Line items table with amounts
4. Subtotal and total calculations
5. Timesheet section showing all articles and topics
Save the PDF as: invoice_{invoice['client_name'].lower()}_{invoice['invoice_period']}.pdf
"""
tools = [
{"type": "bash_20250124", "name": "bash"},
{"type": "text_editor_20250728", "name": "str_replace_based_edit_tool"}
]
messages = [{"role": "user", "content": user_text}]
iteration = 0
max_iterations = 15
while iteration < max_iterations:
iteration += 1
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=8192,
tools=tools,
messages=messages
)
messages.append({"role": "assistant", "content": response.content})
if response.stop_reason == "end_turn":
break
if response.stop_reason == "tool_use":
tool_results = []
for block in response.content:
if block.type == "tool_use":
tool_name = block.name
tool_input = block.input
if tool_name == "bash":
result = execute_bash_tool(tool_input.get('command', ''))
elif tool_name == "str_replace_based_edit_tool":
result = execute_text_editor_tool(tool_input)
else:
result = f"Unknown tool: {tool_name}"
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
messages.append({"role": "user", "content": tool_results})
else:
break
pdf_files = []
for file in os.listdir('.'):
if file.endswith('.pdf') and 'invoice' in file.lower():
pdf_files.append(file)
for file in os.listdir(tempfile.gettempdir()):
if file.endswith('.pdf') and 'invoice' in file.lower():
temp_path = os.path.join(tempfile.gettempdir(), file)
import shutil
dest_path = os.path.join('.', file)
shutil.copy2(temp_path, dest_path)
pdf_files.append(file)
return pdf_files
Ez a megoldás biztosítja a biztonságos Skill-használatot. Az iterációk során minden lépést a modell indít el, így a folyamat átlátható és jól követhető marad.
CLI futtatás
A következő funkció kezeli a parancssori futtatást.
def main():
if len(sys.argv) < 2:
print("Usage: python app.py <timesheet.xlsx>")
sys.exit(1)
excel_file = sys.argv[1]
if not os.path.exists(excel_file):
print(f"Error: File not found: {excel_file}")
sys.exit(1)
try:
invoice = load_invoice_from_timesheet(excel_file)
pdf_files = generate_invoice_with_claude(invoice)
if pdf_files:
for pdf in pdf_files:
print(f"Invoice generated: {os.path.abspath(pdf)}")
else:
print("Error: No PDF file was generated.")
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()
Ez a parancssori alkalmazás egyszerű futtatást biztosít. Egyetlen Excel fájlt kér bemenetként és generál egy kész PDF számlát.
Továbblépési lehetőségek
A Claude Skills útmutató végére egy működő Auto-Invoice Generator Skill áll össze. Ezt már használhatod a Claude alkalmazásokban és az API-n keresztül is. A következő lépés lehet egy új Skill kialakítása, például egy statisztikai jelentés generátor vagy automatikus adatellenőrző modul. A Skills modulok jól kombinálhatók, így később összetett, több lépéses munkafolyamatok is felépíthetők. A Claude ökoszisztéma ezt zökkenőmentesen támogatja, így a fejlesztés biztonságos és hatékony marad.




