Skip to content
Back to skills

Harness Mem Wiki

ASecurity

Build and refresh the workspace-level domain wiki from non-code sources — Jira, Confluence, SharePoint, NAS documents, NAS video — gated on each source actually being configured, synthesis-only, nothing ingested without confirmation.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 7, 2026
ai-agentsgogit

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned October 7, 2026

npx -y skills add rbhattarai/se-harness --skill harness-mem-wiki --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Harness Mem Wiki?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Harness Mem Wiki
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rbhattarai-harness-mem-wiki/badge)](https://www.skillsdirectory.com/skills/rbhattarai-harness-mem-wiki)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: harness-mem-wiki
description: Build and refresh the workspace-level domain wiki from non-code sources — Jira, Confluence, SharePoint, NAS documents, NAS video — gated on each source actually being configured, synthesis-only, nothing ingested without confirmation.
---


# /harness-mem-wiki — non-code domain-wiki build & refresh

Synthesize non-code sources into the **workspace-level** domain wiki
(`.harness/memory/wiki/` at the workspace root — distinct from any single repo's own). Same
doctrine as the `wiki-ingest` skill this command drives: raw sources are never copied into the
repo, only synthesis, with a citation back to the original. Jira/Confluence/SharePoint stay
live-refetchable via MCP; NAS documents/video have no "live" — the citation is a path, and
re-fetching means re-opening the file. `/harness-goal`'s deep-dive step reads what this command
builds.

This command only ingests sources that are actually configured in `workspace.yaml`'s
`shared:` (set during `/harness-init` Step 4); it never invents a source to check.

## Step 1 — Scope

1. If `$ARGUMENTS` names one source (`jira`, `confluence`, `sharepoint`, `nas-docs`,
   `nas-video`), process only that one — skip straight to its step below.
2. No source given: look at `workspace.yaml`'s `shared:` for which sources actually have
   something configured (non-empty `jira_project`/`confluence_spaces`/`sharepoint_sites`/
   `nas_doc_paths`/`nas_video_paths`). Ask whether to process every configured source, name
   specific ones, or stop — never infer consent to run everything from silence. A source with
   nothing configured is skipped and reported, never offered as a choice.
3. Resolve the workspace root the same way `/harness-mem-graphify` does — from `workspace.yaml`,
   not wherever the plugin is installed. No `workspace.yaml` at all → this command has nothing
   to do (non-code sources are workspace-scoped by design); say so and stop.

## Step 2 — Credentials

1. Look for a workspace-root `.env.harness`. Missing → offer to create it from
   `templates/env.harness.workspace.example`, tell the user exactly which vars to fill for the
   sources actually in scope this run, and **stop this run** until they confirm it's filled —
   never read a partially-filled file and guess at what's missing.
2. If the workspace root is itself inside a git repo (`git rev-parse --is-inside-work-tree` —
   true for the mono-repo topology, false for a plain sibling-clone folder), make sure
   `.env.harness` is in *that* repo's `.gitignore` (append from `templates/gitignore.harness`
   if not already present, same mechanics `/harness-init` Step 7 uses). A sibling-clone
   workspace root that isn't a git repo at all needs no `.gitignore` — there's nothing to
   accidentally commit it to.
3. Never read `.env.harness` content into chat, logs, or any wiki page — load it only into the
   environment for the MCP/CLI calls that need it.

## Step 3 — Jira, Confluence, SharePoint (MCP-based, live-refetchable)

For each in scope:
1. **Staleness, by source**: compare against
   `.harness/memory/wiki/.ingest-manifest.json` at the workspace root (create it, empty, if
   this is the first run) —
   - Jira: JQL filtered by `updated >=` the manifest's last-synced date for this project.
   - Confluence: each page's `lastModified` against the manifest's per-page last-synced date.
   - SharePoint: whatever its MCP exposes for modification time; if nothing, treat everything
     as potentially stale and say so rather than silently skipping (no data beats wrong data,
     but don't pretend there's a real staleness signal when there isn't one).
2. Present what's new or changed since last sync; ask whether to process all of it, name
   specific items, or skip this source for now.
3. **SharePoint specifically**: se-harness doesn't ship a SharePoint MCP server. If none is
   connected this session, report that plainly (point at
   `docs/setup-guide-copilot.md` Part 6 for standing one up) and skip — never silently treat an
   unreachable source as "nothing to do."
4. For each confirmed item: read it live via MCP → extract entities, decisions, constraints,
   contradictions with existing pages (same procedure as the `wiki-ingest` skill) → synthesize
   into `wiki/<topic>.md` at the **workspace root** (update an existing page rather than
   creating a near-duplicate) → `sources:` footer citing the item + today's date → update
   `wiki/index.md` and `wiki/log.md` (`wiki-ingest`'s own steps 4 and 6) → record the new
   last-synced marker in `.ingest-manifest.json`.

## Step 4 — NAS documents (filesystem, not MCP — no "live," the path is the citation)

1. Recursively walk every configured `nas_doc_paths` entry — arbitrary subfolder depth, don't
   assume a flat directory.
2. Fingerprint each PDF/Office file (path + mtime + size) and diff against
   `.ingest-manifest.json`'s doc entries. Report new/changed vs. unchanged-skipped counts before
   asking whether to process the new/changed ones, name specific ones, or skip.
3. For each confirmed file: extract text (Graphify's `graphifyy[pdf]`/`[office]` extras if
   installed — gate this the same way `/harness-mem-graphify` gates the video extra: check
   first, ask once if missing, never install without approval) → synthesize into a wiki page at
   the workspace root citing the NAS path (not a link — a path; there's no live refetch for a
   filesystem source, only re-opening the file) → update the manifest.

## Step 5 — NAS video (transcription first, the expensive one)

1. Recursively walk every configured `nas_video_paths` entry, same as step 4.
2. Fingerprint each video file (path + mtime + size) against `.ingest-manifest.json`'s video
   entries. **Report an estimate before asking anything** — file count, folder breakdown, rough
   total duration if cheaply readable from file metadata — then ask whether to process all
   new/changed ones, name specific ones, or skip. Never start transcribing without this
   confirmation; it's real compute time, not a cheap operation like the other sources here.
3. Confirm Graphify's video extra (`graphifyy[video]`) is installed — same gate
   `/harness-mem-graphify` Step 2 already has. If it was declined there, this source can't run;
   say so and point at that command rather than re-asking the same question here.
4. **Raw transcript handling, asked once per run (not once per video)**: keep transcripts
   gitignored locally (disposable, regenerable by re-running transcription against the source
   video — the default recommendation) or committed/tracked (team-shared, adds repo size).
   Record the choice in `.ingest-manifest.json` and apply it consistently for this run; it's
   fine to ask again on a later run if the user wants to change it.
5. Transcribe each confirmed video (check `graphify --help` for the current video-pipeline
   flags rather than assuming a specific one). Cache the raw transcript per the step 4 choice.
6. Synthesize each transcript into a wiki page at the workspace root with **structured
   sections** — `## Key Takeaways`, `## Important Points`, `## Do's and Don'ts` — populated
   from what the transcript actually supports; omit a section rather than padding it with
   nothing. Citation: the NAS video path, the timestamp range if the content came from a
   specific segment, and today's date. Update the manifest with the new fingerprint, the
   resulting page, and (if tracked) the transcript's location.

## Step 6 — Completion report

Per source: items processed / skipped as unchanged / skipped as not-configured, pages
created/updated. For NAS video specifically, don't just report "done" — name what actually
landed: how many pages got a Key Takeaways section, an Important Points section, a Do's/Don'ts
section, so the user can see what was captured, not just that something ran. Contradictions
flagged during synthesis get called out explicitly here too, same as `wiki-ingest`'s own rule —
never buried in a page nobody re-reads.

## Keeping this fresh

Unlike `/harness-mem-graphify`'s code graph, there's no commit to trigger a refresh from — Jira
tickets and Confluence pages change independently of any repo's git history. Re-run this
command periodically, or point an external scheduler (cron, Windows Task Scheduler, a nightly
CI workflow) at it from the workspace root, the same way `/harness-mem-graphify`'s own
"keeping this fresh automatically" section recommends for the workspace-level graph merge.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.