A VS Code extension that bundles the day-to-day work with GitLab and Claude Code:
time tracking on issues, a GitLab MCP server for Claude Code, management of
skills & agents, and AI-assisted code reviews — all sharing one GitLab token and
a connection lamp in the status bar.

Contents
What can the extension do?
| Area |
In short |
| ⏱️ Time tracking |
Timer or calendar entries on GitLab issues, buffered locally, synced to GitLab timelogs on demand. Plus purely local issues with no GitLab link. |
| 🟦 Jira time tracking |
The same booking flow for Jira Cloud issues — entries sync as Jira worklogs (REST + API token). Shown alongside GitLab in the same calendar. |
| 🔌 GitLab MCP |
One click enables the GitLab MCP server for Claude Code (CLI in the terminal) — token kept secure, never written to disk in clear text. |
| 🟦 Atlassian MCP |
One click enables the official Atlassian (Jira/Confluence) MCP server for Claude Code — OAuth in the browser, no token to manage. |
| 🧩 Skills & agents |
A dedicated page to enable/disable Claude Code skills and agents (bundled templates + your own files). |
| 🔍 Code reviews |
Starts a Claude review of a merge request or the local branch — results in chat, as draft notes, or posted directly to the MR. |
| ✅ To-Do board |
A standalone Kanban board with custom columns and drag&drop cards; due dates surface in the status bar. Stored machine-globally, independent of issues. |
| 📊 Claude session usage |
A cross-project overview of all your local Claude Code sessions — token usage per session/project and an estimated (subscription-hypothetical) USD cost. |
| 🗂️ Feature tasks |
A live board visualizing the Claude Code feature-workflow queue (.claude/feature-tasks.json) — running/queued chains, dependencies and file conflicts. |
Quick start
- Set the GitLab URL:
Settings → actifsourceTools.gitlabUrl, e.g. https://gitlab.example.com.
- Set the token: Command Palette (
Ctrl+Shift+P) → Actifsource Tools: Set Personal Access Token (scope api, see below).
- Open the panel:
Actifsource Tools: Open (or click the green dot in the status bar).
- (optional) Enable MCP for Claude:
Actifsource Tools: Enable GitLab MCP for Claude Code.

GitLab personal access token
The extension both reads and writes to GitLab (creating/deleting timelogs, posting
review comments). Therefore:
- Scope:
api (full read/write). read_api is not enough once times are synced
or reviews are posted.
- Account role: at least Reporter (issues + time + comments), Developer
recommended for the full MR review workflow.
- The token is stored only in
vscode.SecretStorage (on Windows via DPAPI) — never
in settings.json or ~/.claude.json.
Create it in GitLab: User Settings → Access Tokens → scope api.
Features in detail
1. Time tracking
- Issue list with sections: pinned, GitLab — assigned to me, local, and
optionally project/group (see
defaultProjectId / defaultGroupId).
- Full-text search across GitLab issues; search by ticket id (
#258 or 258).
- Exactly one active timer that survives webview and VS Code restarts.
- Calendar (day/week/month): create/edit entries via context menu, move them by drag;
24-hour axis.
- Traffic-light dot per entry: 🔴 not synced · 🟡 changed, not synced yet · 🟢 synced.
- Sync sends each booking as a GitLab timelog (GraphQL
timelogCreate /
timelogDelete) — one entry = one timelog, with no negative correction rows in the
time-tracking report. Editing the same entry multiple times is collapsed into a single
sync (no duplicates).
- Local issues (
L:<n>): purely local, machine-global issues with no GitLab link —
bookable in the calendar, pinnable; "synced" into a global file.
- View another user (read-only): shows their assigned issues and their logged time
(reconstructed from GitLab) — no editing/booking.



Jira time tracking (worklogs)
The same booking flow as GitLab, but for Jira Cloud — entries sync as Jira worklogs.
- Configure
actifsourceTools.jira.url (e.g. https://your-site.atlassian.net) and
actifsourceTools.jira.email, then run Actifsource Tools: Set Jira API Token with a token
from id.atlassian.com (stored in SecretStorage). Optional: jira.defaultProjectKey, jira.jql.
- Jira issues appear in a "Jira assigned to me" section (assignee = currentUser(), plus the
optional project/JQL) and book time in the same calendar as GitLab/local entries.
- Sync creates/deletes Jira worklogs (one entry = one worklog); editing replaces the
worklog. Reconcile pulls in your own worklogs and removes locally-deleted ones.
- Only your own worklogs are touched (matched by Atlassian account id).
2. GitLab MCP for Claude Code
Enables the GitLab MCP server (@zereight/mcp-gitlab) for Claude Code in the integrated
terminal — so Claude can work with GitLab directly (issues, MRs, comments …).
- The command
Actifsource Tools: Enable GitLab MCP for Claude Code writes a gitlab
entry into the user-global ~/.claude.json and injects the token as an environment
variable into new integrated terminals.
- Reuse: uses the same token and URL as time tracking — no second token needed.
GITLAB_API_URL is derived from gitlabUrl.
- Secure:
~/.claude.json only contains the reference ${GITLAB_PAT}, never the value.
- After enabling: open a new integrated terminal, start
claude, run /mcp.
Actifsource Tools: GitLab MCP Status shows a checklist (token, entry, npx on PATH …).
Atlassian (Jira/Confluence): Actifsource Tools: Enable Atlassian MCP for Claude Code
adds the official Atlassian remote MCP server as a native SSE entry
({ "type": "sse", "url": "https://mcp.atlassian.com/v1/sse" }) to ~/.claude.json.
Authentication is OAuth 2.1 — a browser window opens in Claude Code on first use;
no token is stored or configured. It targets your Atlassian Cloud site(s) via the
hosted gateway (not your site URL directly). Enable/disable/status are also in the green-dot menu.
3. Manage skills & agents
A dedicated page (Actifsource Tools: Manage Skills & Agents) to enable/disable Claude
Code skills and agents — bundled templates and your own files under ~/.claude/.
- Enable moves/writes into the live directory (
~/.claude/agents/<name>.md or
~/.claude/skills/<name>/) that Claude Code scans at session start.
- Disable moves it into a disabled store — never deleted, fully reversible.
- Visible before enabling: an agent's requested tools/model, whether a skill ships
scripts/, and an origin badge (bundled/user).
- A hand-authored file of the same name is never overwritten (conflict is shown).
- With
actifsourceTools.autoUpdateAgentAndSkill (default on), managed copies are
refreshed from the latest bundled version at startup.

4. Code reviews
The page Actifsource Tools: Review a Merge Request starts a Claude review in a new
integrated terminal — two clearly separated variants:
- 🔵 Merge Request (
review-gitlab-mr): MR URL + focus, then Review in Chat,
Draft for Review (draft notes, before submitting in GitLab), or Post to GitLab.
- 🟣 Local (
review-local): reviews the current branch against main, results in chat
only — nothing is posted, no token/MCP required.
The required review agent must be enabled; if it is not, the page blocks the review and
offers to enable it. MR reviews additionally require MCP and a token to be ready.

5. To-Do board
A standalone Kanban page (Actifsource Tools: Open To-Do Page) — separate from issues and
the timer, for quick personal tasks.
- Columns with custom names: add, rename, delete and reorder (◀▶).
- Cards = title + optional due date + notes, with 5 fixed colors; drag&drop between
columns and to reorder.
Done (checkbox, strikethrough) and archived are separate
states; a top-bar toggle switches the whole board between Active and Archived views.
- Due-date reminder in the status bar: while any active to-do is due today or overdue,
a
🔔 <count> item appears (tooltip lists them, click opens the board), tinted by the
highest-priority color among them.
- Stored machine-globally in
todo-data.json; the folder is overridable via
actifsourceTools.todoStorageDirectory.
6. Claude session usage
A standalone page (Actifsource Tools: Claude Session Usage) giving the cross-session,
historical view that Claude Code's native /usage (current session only) doesn't provide.
- Reads Claude Code's own local transcripts (
~/.claude/projects/**/*.jsonl) — not the
extension's data — and lists every session grouped by project.
- Per session: token usage (input / output / cache-write / cache-read, per model),
duration and message count, plus an estimated USD cost.
- Cost is an estimate. Because you are typically on a subscription, the $ figure is
hypothetical "as-if-API"; tokens are shown primary, $ small. Pricing is fetched live from
Anthropic's public pricing page (toggle
actifsourceTools.claudeSessionUsage.fetchLivePricing)
with a built-in fallback.
- Right-click a session to copy a context link (a prompt pointing Claude at that
transcript) or resume the session in a terminal (
claude --resume).
7. Feature tasks
A standalone board (Actifsource Tools: Feature Tasks) that visualizes the Claude Code
feature-workflow task registry (.claude/feature-tasks.json) — the plan → review →
background-implementation queue.
- Queue columns: one column per running task, with queued tasks stacked under the task
they wait on; tasks with no running blocker collect in a "Waiting to run" column.
- Dependencies drawn as arrows / chips ("waits for" / "blocks"), and file conflicts
between a queued task and its blockers highlighted in red.
- Each card shows its execution mode (workspace / worktree / chat) and, when available,
the session channel title; collapsed by default, running cards show a progress strip.
- Finished (3 newest) + collapsible History; delete finished tasks or "Clear
finished". The file is polled every 5 s while visible and never modified except by
explicit deletes. A banner warns if the feature workflow isn't set up.
Status bar
On the left the Tracker item (active timer / pinned issues to start one), next to it
"● Actifsource Tools" with a connection lamp:
- ⚪ grey = not configured · 🔴 red = connection failed · 🟢 green = connected.
- Clicking the dot opens a menu: Time Tracker page, Review, Skills & Agents, test
connection, set token, settings.
Settings
All under the prefix actifsourceTools.:
| Setting |
Type |
Default |
Purpose |
accounts |
array |
[] |
Registered accounts (managed via Add/Manage Accounts). Per-account scope can be edited here: GitLab projectId/groupId, Jira projectKey/jql. |
roundTo |
1 | 5 | 15 | 30 |
1 |
Round time slots to N minutes on sync. |
gitlabMCP.enabled |
boolean |
false |
Register the GitLab MCP server for Claude Code. |
gitlabMCP.oauth |
boolean |
true |
Use OAuth (native remote) for the GitLab MCP instead of a personal access token. |
gitlabMCP.readOnly |
boolean |
false |
Run the GitLab MCP server in read-only mode (token mode only). |
gitlabMCP.accountId |
string |
"" |
Registered GitLab account the MCP targets (set via Enable GitLab MCP). |
atlassianMCP.enabled |
boolean |
false |
Register the official Atlassian (Jira/Confluence) remote MCP server (OAuth, no token). |
githubMCP.enabled |
boolean |
false |
Register the GitHub MCP server (PAT via Authorization header; requires a registered GitHub account). |
githubMCP.accountId |
string |
"" |
Registered GitHub account the MCP targets (set via Enable GitHub MCP). |
actifsourceMCP.enabled |
boolean |
false |
Register the local Actifsource MCP server. |
actifsourceMCP.url |
string |
http://localhost |
Base URL of the local Actifsource MCP server. |
actifsourceMCP.port |
number |
8085 |
Port of the local Actifsource MCP server. |
autoUpdateAgentAndSkill |
boolean |
true |
Update managed skills/agents from the bundle at startup. |
todoStorageDirectory |
string |
"" |
Folder for the To-Do board's todo-data.json (empty = global storage; leading ~ expanded). |
claudeSessionUsage.fetchLivePricing |
boolean |
true |
Fetch live model pricing from Anthropic for the session-usage cost estimate (fallback: built-in prices). |
Commands
All in the Command Palette under "Actifsource Tools: …":
| Command |
Effect |
Open |
Open the Time Tracker panel. |
Set Personal Access Token |
Store the GitLab token in SecretStorage. |
Clear Personal Access Token |
Remove the token. |
Test Connection |
Check the connection to GitLab (updates the lamp). |
Refresh Issues |
Reload the issue list. |
Sync Pending Changes |
Sync pending bookings to GitLab. |
Stop Timer |
Stop the active timer. |
Enable / Disable GitLab MCP for Claude Code |
Write/remove the MCP entry. |
GitLab MCP Status |
Show the status checklist. |
Enable / Disable Atlassian MCP for Claude Code |
Write/remove the Atlassian (OAuth) MCP entry. |
Atlassian MCP Status |
Show the Atlassian MCP status checklist. |
Manage Skills & Agents |
Open the skills/agents page. |
Review a Merge Request |
Open the review page (MR + local). |
Open To-Do Page |
Open the To-Do Kanban board. |
Claude Session Usage |
Open the Claude session usage overview. |
Feature Tasks |
Open the feature-workflow task board. |
Set / Clear Jira API Token |
Store/remove the Jira API token in SecretStorage. |
Test Jira Connection |
Check the Jira connection and reload Jira issues. |
Requirements
- VS Code ≥ 1.85.
- GitLab (self-hosted or gitlab.com) with a PAT (scope
api).
- For MCP/reviews: Claude Code (CLI) installed and on
PATH, plus Node.js/npx
(the MCP server runs via npx @zereight/mcp-gitlab).
| |