Skip to content

5a9awneh/it-eval-kit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

it-eval-kit

GitHub license Python 3.8+ GitHub latest commit PRs Welcome Runs locally Human in the Loop

Turn your ITSM ticket export and email evidence into a polished performance review in under 30 minutes β€” no manual pivot tables, no blank-page anxiety. A local, privacy-preserving toolkit for IT service desk professionals using VS Code + AI chat.


✨ What it does

  1. 🎯 Classifies and analyses your ITSM ticket export β€” resolution rates, category breakdown, deployment counts, peak periods
  2. πŸ“§ Audits your email evidence β€” project threads, events and meetings, certifications
  3. πŸ“ Generates and updates four report types via structured AI prompts: Performance Analysis, Achievements & Contributions, Performance Review, and Annual Report

All classification logic and ITSM field mappings live in a single config.json file β€” no code changes required to adapt to your organization's system.


πŸ”„ Pipeline

flowchart LR
    subgraph inputs["πŸ“₯ Inputs"]
        CSV["ITSM CSV export"]
        CFG["config.json\nfield mapping & keywords"]
        EMAIL["Email threads\nprojects Β· events Β· certs"]
        REF["Reference files\ntemplate & job description"]
    end

    P1["Prompt 1\nTicket Analysis"]
    STATS[("ticket_stats.txt\nsource of truth\nfor all numbers")]
    P2["Prompt 2\nPerformance Analysis"]
    P3["Prompt 3\nAchievements"]
    P4["Prompt 4\nPerformance Review"]
    P5["Prompt 5\nAnnual Report"]

    subgraph reports["πŸ“‹ Reports/"]
        PA["Performance Analysis.md\nKPIs & project breakdown"]
        AC["Achievements &\nContributions.md"]
        PR["Performance Review.md\nformal appraisal"]
        AR["Annual Report.md"]
    end

    CSV & CFG --> P1
    P1 --> STATS
    STATS --> P2 & P4 & P5
    STATS -.-> P3
    EMAIL --> P3
    P2 --> PA
    P3 --> AC
    PA & AC & REF --> P4 & P5
    P4 --> PR
    P5 --> AR
Loading

πŸ“Œ Starting a session? Run 0-orchestrator.prompt.md in Copilot Agent chat β€” it walks you through the full update end-to-end, in the right order.

Evidence sources β†’ intermediate artifacts β†’ final reports:

sankey-beta
ITSM CSV,Ticket Stats,5
Email Evidence,Achievements,4
Email Evidence,Perf Review,2
Email Evidence,Annual Report,1
Reference Files,Perf Review,3
Reference Files,Annual Report,2
Ticket Stats,Perf Analysis,5
Ticket Stats,Perf Review,2
Ticket Stats,Annual Report,1
Perf Analysis,Perf Review,3
Perf Analysis,Annual Report,3
Achievements,Perf Review,3
Achievements,Annual Report,2
Loading

πŸ› οΈ Prerequisites

  • 🐍 Python 3.8 or later
  • πŸ’» VS Code with GitHub Copilot (or any AI chat tool that can read workspace files β€” see Without GitHub Copilot)
  • πŸ“€ A ticket export from your ITSM system (ManageEngine, Jira, ServiceNow, or any CSV-based export) (optional β€” the tool also works with email evidence only)
  • πŸ“§ Email threads exported as plain text (optional β€” for project, event, and achievement evidence)

πŸ“‹ What Your CSV Needs to Contain

Your ITSM ticket export needs at least these columns (exact names don't matter β€” you'll map them in config.json):

Field Required Purpose
Subject / Title Yes Ticket description β€” used for keyword classification
Status Yes Closed / Resolved / Canceled / Open
Requester / Caller Yes For unique user count
Created date Yes For time calculations and monthly breakdown
Resolved date Yes For resolution time; blank = still open
Category / Subcategory Recommended If your ITSM assigns these reliably, include them β€” the setup prompt can use them to build your categories config automatically

πŸ’‘ Before exporting: If your ITSM has a Category or Subcategory field and the values are accurate and consistently applied, select those columns in your export. The setup.prompt.md will detect them and use them to build your classification config β€” no manual keyword writing needed. If those fields are absent or inconsistently filled, the setup prompt will infer categories from ticket subjects instead.


⚑ Quick Start (with sample data)

# Clone the repo
git clone https://github.com/5a9awneh/it-eval-kit.git
cd it-eval-kit

# Run the sample data through the analyser
python Tools/analyze_tickets.py Evidence/sample/sample_tickets.csv

Output is written to Tools/ticket_stats.txt. Compare against Evidence/sample/sample_ticket_stats.txt to verify everything is working.


πŸš€ Setting Up for Your Data

Step 1 β€” Configure for your ITSM system

Run setup.prompt.md in Copilot Agent chat β€” it reads your CSV directly, identifies your column layout and date format, and writes Tools/config.json for you automatically.

Configure manually instead

Open Tools/config.json and update:

Setting What to change
csv_columns Column indices for subject, status, requester, created, resolved in your CSV (0-indexed)
csv_header_rows Number of non-data rows at the top of your export file
date_format Date format in your created/resolved columns (e.g. %m/%d/%Y %I:%M %p)
status_resolved, status_cancelled Exact status label strings used by your ITSM for closed/resolved and canceled tickets
categories Keyword patterns for each ticket category β€” add, remove, or rename to match your environment

The sample config ships with ManageEngine SDP defaults. Run with --validate to see how tickets are being classified and tune patterns as needed.

Common ITSM column mappings (0-indexed; verify against your own export's header row):

ITSM Tool subject status requester created resolved header_rows
ManageEngine SDP 1 2 3 6 7 4
Jira Service Management 1 2 4 6 7 0
Freshdesk 1 3 4 5 6 0
ServiceNow 2 3 5 6 7 0

These are representative starting points. Always open your CSV and count columns from 0 to confirm before running.

Step 2 β€” Place your Reference files

Add these files to Reference/ (they are git-ignored β€” they stay local only):

File Purpose
role-description.txt Your job description or terms of reference
performance-review-template.txt Your org's appraisal form, pasted as plain text
sample-completed-review.md (Optional) A previous review as a tone reference

See Reference/README.md for details.

Step 3 β€” Personalise the AI instructions

Open .github/copilot-instructions.md and fill in the placeholders:

  • {YOUR_NAME}, {YOUR_TITLE}, {YOUR_ORGANIZATION β€” DEPT}, {YOUR_SUPERVISOR_NAME}, {GRADE/LEVEL/CONTRACT}

Step 4 β€” Organise your evidence

Place files in Evidence/ (git-ignored β€” local only):

Evidence/
  tickets/                     ← ITSM CSV exports
  email-evidence/
    projects-initiatives/      ← One .txt file per project email thread
    events-meetings/           ← Events, meetings, and presentations you attended, organized, or supported
    learning-certs/            ← Certificates and training completions

Exporting email evidence from Outlook

The ExportEachConversationToTxt.bas file in Tools/ is a VBA macro that exports selected email conversations to plain text files automatically.

To set up and run the macro:

  1. In Outlook, open the VBA editor: Alt + F11
  2. In the Project Explorer (left panel), expand Project1 β†’ right-click Modules β†’ Insert β†’ Module
  3. Open Tools/ExportEachConversationToTxt.bas in a text editor, copy all contents, and paste into the new module
  4. Close the VBA editor (Alt + F4)
  5. Back in Outlook, select the email threads you want to export (pre-filter by sender or subject first)
  6. Run the macro: Alt + F8 β†’ select ExportEachConversationToTxt β†’ Run

Exported files are saved to Documents\OutlookExport\. Move them into the appropriate Evidence/email-evidence/ subfolder.

πŸ’‘ Pre-filter tip: Before selecting emails to export, narrow down to relevant threads first. Common methods in Outlook:

  • Search folders β€” create a saved search for a sender, keyword, or date range
  • Subject search β€” search by project name, event title, or keyword in the subject line
  • Sender filter β€” filter by a manager, stakeholder, or team address who sent acknowledgments or project updates
  • Categories β€” if you've tagged emails with Outlook categories (e.g. "Projects", "Certificates"), filter by category
  • Flags β€” if you flagged key emails during the year, filter by flagged items

Export only what's relevant to your reporting period. Exporting your full inbox is neither necessary nor recommended.


▢️ Running the Analysis

The recommended way is via Copilot Agent chat β€” run 1-analyze-tickets.prompt.md, which verifies your config, runs the script, checks the output, and reports key numbers back to you.

To run the script directly instead:

# Basic run
python Tools/analyze_tickets.py Evidence/tickets/your-export.csv

# Validate classification only β€” no output file written (use when tuning config.json)
python Tools/analyze_tickets.py Evidence/tickets/your-export.csv --validate

# With per-ticket classification output
python Tools/analyze_tickets.py Evidence/tickets/your-export.csv --verbose

# Custom config file
python Tools/analyze_tickets.py Evidence/tickets/your-export.csv --config path/to/config.json

Output: Tools/ticket_stats.txt β€” this is the source of truth for all report numbers.

πŸ’‘ Use --validate when tuning your config.json categories: it shows how every ticket is classified and lists all unmatched tickets, without overwriting your existing ticket_stats.txt.


πŸ“Š Generating Reports

Open VS Code and start a Copilot Agent chat. To run a prompt, use any of these methods:

  • Slash command β€” type / in the chat input β†’ select the prompt by name from the dropdown
  • Run button β€” open the .prompt.md file in the editor β†’ click the β–Ά Run Prompt button in the top-right toolbar
  • File reference β€” type # in the chat input, select the prompt file, then send

οΏ½ First-time setup β€” run once

Prompt Purpose
setup.prompt.md Reads your CSV, auto-configures Tools/config.json β€” column mapping, date format, status values, and categories

Run this once when you first clone the repo, or again if you switch to a different ITSM system.


πŸ” Full update β€” start here for every session with new data

Run 0-orchestrator.prompt.md for any session where you have new data. It:

  • Asks you to set supervisor mode for the session
  • Assesses what has changed (new CSV? new email evidence?)
  • Runs the required prompts in the correct order
  • Performs final checks and reminds you to commit

πŸ“‹ Individual prompts β€” run directly if only one section needs updating

Step Prompt What it updates Needs
1 1-analyze-tickets.prompt.md ticket_stats.txt New CSV in Evidence/tickets/
2 2-performance-analysis.prompt.md Performance Analysis.md ticket_stats.txt
3 3-achievements.prompt.md Achievements & Contributions.md Email evidence (ticket data optional)
4 4-performance-review.prompt.md Performance Review.md Prompts 2 & 3 complete
5 5-annual-report.prompt.md Annual Report.md Prompts 2 & 3 complete

No ticket data? If your role is primarily project or event-based and you have no CSV export, skip Prompt 1 entirely. Prompt 3 (Achievements) works on email evidence alone. Prompts 2, 4, and 5 will produce partial outputs with a note where ticket metrics would appear β€” all other sections remain fully populated.


Supervisor mode

Prompts 4 and 5 support two modes:

  • ✏️ Staff-only (default) β€” supervisor/manager sections are left as instructional placeholders
  • πŸ‘” Full β€” supervisor sections are drafted in third-person manager voice, which you can hand to your manager for review and sign-off

The orchestrator (Prompt 0) asks you which mode to use at the start of each session.


πŸ” Validating Your Configuration

Before committing to a full analysis run, use --validate to check how your config.json categories are classifying tickets β€” without writing any output:

python Tools/analyze_tickets.py Evidence/tickets/your-export.csv --validate

This shows:

  • Every ticket and its assigned category (unmatched tickets are flagged clearly)
  • A summary count per category
  • All unmatched tickets grouped together, with their subject lines, so you can see exactly what patterns to add to config.json

When the classification looks right, run without --validate to produce ticket_stats.txt.


πŸ’» Without GitHub Copilot

The prompt chain works with any AI chat that can accept pasted context β€” including ChatGPT, Claude, or Gemini. The trade-off is that you paste file contents manually instead of the AI reading your workspace automatically.

For each prompt, paste these files in order:

  1. .github/copilot-instructions.md β€” your personal details and context
  2. The contents of the relevant prompt file (.github/prompts/N-name.prompt.md)
  3. The relevant data files for that prompt:
    • Prompt 1: your CSV file content + Tools/config.json β€” note: Prompt 1 runs a Python script, so you must run it yourself (python Tools/analyze_tickets.py ...) and then paste the resulting Tools/ticket_stats.txt into the AI for review and commentary
    • Prompt 2: Tools/ticket_stats.txt
    • Prompt 3: the relevant .txt files from Evidence/email-evidence/
    • Prompts 4–5: Reports/Performance Analysis.md, Reports/Achievements & Contributions.md, Reference/performance-review-template.txt

Then ask the AI to follow the instructions in the prompt. Copy the output back into the relevant Reports/ file.

Context window note: Paste one prompt at a time. If your email evidence folder is large, paste only the threads relevant to the current reporting period.


πŸ’¬ Feedback & Questions

Found a bug, have a question, or want to share what ITSM system you're using?

Open an issue on GitHub β€” useful things to include:

  • Your ITSM tool and approximate ticket volume
  • What part of the setup or workflow caused friction
  • Any classification patterns that worked well or didn't

πŸ“ Folder Structure

.github/
  copilot-instructions.md      ← Fill this in with your details
  prompts/
    setup.prompt.md              ← Run once: auto-configures config.json from your CSV
    0-orchestrator.prompt.md     ← Start here for any full update session
    1-analyze-tickets.prompt.md
    2-performance-analysis.prompt.md
    3-achievements.prompt.md
    4-performance-review.prompt.md
    5-annual-report.prompt.md

Evidence/                      ← git-ignored; your local data
  README.md
  sample/                      ← committed sample data for quick-start testing

Reference/                     ← git-ignored; your org's templates
  README.md

Reports/                       ← Output documents (committed)
  Performance Analysis.md
  Achievements & Contributions.md
  Performance Review.md
  Annual Report.md

Tools/
  analyze_tickets.py
  config.json
  ticket_stats.txt             ← git-ignored; regenerated each run
  ExportEachConversationToTxt.bas   ← Outlook VBA macro for email export

πŸ“„ License

MIT β€” see LICENSE.

About

Config-driven toolkit for IT staff to analyze service desk tickets and generate performance reports using GitHub Copilot

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors