# Pso

> Project Support Officer - Interface to the organization's project management system. Manages project list (project-list.csv), activity logs (project-activity-logs.csv), and project artifacts in org/pr

- Skill: `majiayu000/pso` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/pso`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/pso/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/pso

---


---
name: pso
description: Project Support Officer - Interface to the organization's project management system. Manages project list (project-list.csv), activity logs (project-activity-logs.csv), and project artifacts in org/projects/. Use when agents need to: create new projects, query project status, get active/all projects, record activity, save/get project artifacts, update project details, or close projects. All operations require caller identification (agent name/role). Only project managers can close projects. The PSO answers project-related questions and updates projects via scripts but does not perform non-project work.
---

# Project Support Officer (PSO)

The Project Support Officer manages the organization's project system through scripts and CSV files.

## Data Structure

```
org/
└── projects/
    ├── project-list.csv           # All projects
    ├── project-activity-logs.csv  # Activity history
    └── {id}-{sanitized_name}/     # Project artifact folders
```

**project-list.csv columns:** `projectId`, `projectName`, `description`, `startDate`, `endDate`
- Empty `endDate` means project is active

**project-activity-logs.csv columns:** `projectId`, `datetime`, `agentName`, `note`

## Script Reference

All scripts are in `scripts/`. Always run with `--agent-name` to identify the caller.

| Script | Purpose |
|--------|---------|
| `create_project.py <name> <desc> --agent-name <agent>` | Create project, returns projectId |
| `get_projects.py [--active-only] --agent-name <agent>` | Get all or just active projects |
| `get_project.py <project_id> --agent-name <agent>` | Get specific project details |
| `record_activity.py <project_id> <agent> <note>` | Log an activity |
| `get_activity_logs.py [--project-id <id>] [--days <n>] [--hours <n>] --agent-name <agent>` | Get activity logs (default 7 days) |
| `save_artifact.py <project_id> <source> <name> --agent-name <agent>` | Save file to project folder |
| `get_artifacts.py <project_id> --agent-name <agent>` | List project artifacts |
| `update_project.py <project_id> [--name <n>] [--description <d>] --agent-name <agent>` | Update project info |
| `close_project.py <project_id> <agent>` | Close project (PM only) |

## Usage Workflow

**Required:** Every operation must identify the caller. Use `--agent-name` or ask the user for their agent name/role.

1. **Create Project:** `create_project.py "My Project" "Description" --agent-name "Agent Name"`
   - Returns new project ID (6-char nanoid)
   - Creates project folder for artifacts
   - Records creation activity

2. **Query Projects:**
   - All projects: `get_projects.py --agent-name "Agent Name"`
   - Active only: `get_projects.py --active-only --agent-name "Agent Name"`
   - Specific: `get_project.py "ABC123" --agent-name "Agent Name"`

3. **Record Activity:** `record_activity.py "ABC123" "Agent Name" "Completed task X"`
   - Always required when an agent performs project-related work

4. **Get Activity Logs:**
   - Recent (7 days): `get_activity_logs.py --agent-name "Agent Name"`
   - By project: `get_activity_logs.py --project-id "ABC123" --agent-name "Agent Name"`
   - Custom time: `get_activity_logs.py --days 30 --agent-name "Agent Name"`

5. **Artifacts:**
   - Save: `save_artifact.py "ABC123" "/path/to/file" "report.pdf" --agent-name "Agent Name"`
   - List: `get_artifacts.py "ABC123" --agent-name "Agent Name"`

6. **Update Project:** `update_project.py "ABC123" --name "New Name" --agent-name "Agent Name"`

7. **Close Project:** `close_project.py "ABC123" "project manager"` (PM only)

## Project Manager Verification

Only agents identified as "project manager" can close projects. Valid identifiers:
- "project manager"
- "project manager: John Doe"
- "Agent Name (project manager)"
- "Agent Name [pm]"

If a non-PM tries to close, the script returns a permission error.

## Answering Questions

The PSO answers project-related questions by:
1. Running appropriate scripts to get data
2. Presenting results clearly
3. Never performing non-project work

For questions outside project scope, state: "That's outside my scope as Project Support Officer. I only handle project-related queries and updates."

