Atlas / MCP servers / itlackey / akm-cli

akm-cliBLOCK

mcp/itlackey/akm

Agent Knowledge Manager (akm). A CLI tool to manage AI agent knowledge, memories, skills, and more.

Verdict
BLOCK
Grade
F
Trust score
34 /100
Exposed tools
126 90r · 34w · 2d
Transport
—
License
MPL-2.0
Stars
66
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/akm-cli) [](https://github.com/itlackey/akm/actions/workflows/ci.yml) [](LICENSE)

Give every coding agent the capabilities your team has already built.

Build your agent library once. Use it from any shell-capable coding agent.

Why AKM exists

Every coding agent wants its own copy of your team's knowledge — an AGENTS.md here, a tool-specific skills folder there, prompts scattered across repos and chat logs. AKM indexes existing agent assets in place, loads only what a task needs, packages capabilities into shareable bundles, improves the library through reviewable proposals, and runs durable workflows — locally and without tying the library to one assistant. The core loop is connect -> index -> curate -> show -> use/run -> feedback -> proposal (not every task uses every stage).

Five reasons to use it

One library for every agent

Use the same capability library from Claude Code, OpenCode, Cursor, Aider, Windsurf, or any assistant that can run shell commands.

Load only what the task needs

Search or curate a shortlist, then load full content by ref. No giant startup prompt is required.

Package complete capabilities

Install and share bundles containing skills, scripts, workflows, agents, instructions, memories, and knowledge — not just prompt snippets.

Improve through evidence, with review

Feedback re-ranks assets right away. A negative report can carry an exact text fix, and akm improve repairs metadata; every edit lands as a diffable proposal you accept, reject or revert, and only writable bundles are changed.

Turn knowledge into repeatable work

Run persisted workflows with dispatch, gates, retries, budgets, and resume instead of reconstructing a process from prose every session.

AKM retrie

Read from source at commit 400ad4047f3eOBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add akm-cli --env AKM_EMBED_API_KEY=${AKM_EMBED_API_KEY} --env AKM_LLM_API_KEY=${AKM_LLM_API_KEY} --env AKM_PIPELINE_TEST_KEY=${AKM_PIPELINE_TEST_KEY} --env AKM_PROBE_KEY_TEST=${AKM_PROBE_KEY_TEST} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "akm-cli": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "AKM_EMBED_API_KEY": "${AKM_EMBED_API_KEY}",
        "AKM_LLM_API_KEY": "${AKM_LLM_API_KEY}",
        "AKM_PIPELINE_TEST_KEY": "${AKM_PIPELINE_TEST_KEY}",
        "AKM_PROBE_KEY_TEST": "${AKM_PROBE_KEY_TEST}"
      }
    }
  }
}
03

Exposed tools (126)

90 read · 34 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
SKILL.mdreadCurated review workflow
abandonwriteGive up on a workflow run: mark it failed so it stops counting as active (resume can reopen it)
acceptreadAccept a proposal and promote it into the bundle
addwriteAdd a registry by URL
agentreadDispatch an agent CLI (opencode, claude, ...) with an optional agent persona and model defaults. Use --prompt for work; stored commands run through akm command run. Nonempty tool requests require separate operator authorization and are rejected by the current CLI.
agent-skillsreadProduction-ready agent skills
agentsreadPrint agent instructions on how to use akm — the short guide by default; pass --full for the complete guide
alphareadtwinmarker
alpha-deploywritedeploy the alpha cluster
applywriteBack up and apply every pending migration (
atomic-publishwriteuniquefoundationmarker
atomic-rollbackreadrollbackfoundationmarker
auth-uses-jwtreadAuth pipeline uses JWT tokens with 24h TTL instead of session cookies.
auth-uses-jwt-24hreadAuth pipeline uses JWT tokens with 24h TTL — switched from session cookies in May.
azure-opsreadAzure ops kit
bad-typereadDescription that
batchreadImplement a batch of independent work items in parallel worktrees (Sonnet), review each as it lands (Sonnet), integrate and gate once, then one Opus/Fable final review that loops back with a brief of its findings
bravo-backupreadnightly backup routine
bundlewriteCreate, add to, inspect, and manage your bundles (working bundle + configured sources)
cache-prunerreadRemoves expired build artifacts
café-déploiementreadOrchestration naïve à Montréal
charlie-cachereadcache warming
claude-prefs.derived.mdreadDistilled Claude style preferences: three-space indent, no semicolons, prefer TypeScript.
claude-prefs.mdreadUse three-space indent and no semicolons.
cli-configured-onlyreadonly discoverable through the configured registry
clonereadClone an asset from any source into a managed bundle or an unmanaged custom destination
code-reviewreadAutomated code review skill
commandwriteRun reusable agent prompt templates through AKM
completionswriteGenerate or install shell completion script
configreadShow and manage configuration
copy-defaultsreadCopy AKM
createwriteCreate an env file (empty by default; seed an existing
curatereadPick the assets worth loading for a task. Unlike
deploywriteexact match
deploy-guidewritedeploy applications safely
deploy-stashwriteRegistry deploy stash
deploy.shwriteDeploy the application
deployment-helperreadpartial
diffreadShow effective-config differences against another config file or bundle-relative file, secrets redacted
disablewriteDisable a task in this host
doctorreadReport the active scheduler backend, akm bin path, log dir, and supported schedule subset
drainreadDrain the pending proposal backlog: accept what a quality judge passed, reject empty diffs, leave the rest for judgment or review
enablewriteEnable a task in this host
envreadManage
environmentreadTarget environment
explainreadPrint a task
exportwriteWrite safe
extractreadExperimental: extract durable insights from native session files (claude, codex, opencode) and queue them as proposals.
fact-1readDescription of length above 20 characters for the schema check to pass.
feedbackreadRecord positive or negative feedback for any indexed bundle asset.\n\n
field-notesreadAssorted operational observations
frozen-triagereadFrozen extract settings remain stable throughout a long-running watch invocation.
generic-agent-utilsreadUtility functions for agent development
getreadGet a configuration value by key
good.shreadValid asset
guidereadManual guide
healthreadCheck akm runtime health, artifacts, and improve metrics
helpreadPrint the command overview, detailed help for a command, agent instructions, or a release
hintsreadPrint agent instructions on how to use akm — the complete guide by default; pass --detail brief for the short one
historywriteShow recent task run history
image_namewriteDocker image name to deploy
importwriteImport a knowledge document or URL into the default bundle
improvereadAnalyze existing AKM assets and generate improvement proposals; also consolidates memories when the selected strategy enables consolidate.
indexreadBuild search index (incremental by default; --full forces full reindex)
inforeadShow system capabilities, configuration, and index stats
inputFilereadPath to the input CSV file
layout-21readkept across the upgrade
listreadList current configuration
logreadList events from the append-only state.db events stream
lonely-pref.mdreadAlways prefix branch names with feat/.
malformed-quoted-wrappedread
metricsreadExperimental: report asset usage, feedback, utility, LLM usage, tasks, proposals and workflow spend from local records. Read-only. --format html writes a self-contained dashboard.
migratereadPrint release notes and migration guidance for a version. Bundled notes live in docs/migration/release-notes/<version>.md; an unknown version lists what
missing-wtureadThis is a valid-length description that does not specify when to use the lesson.
modelsreadInspect and customize model intent alias defaults
my-toolreadA useful tool
nested-atomic-rollbackreadnestedrollbackmarker
newreadAsk the configured engine to author a brand-new asset as JSON and queue it as a proposal
new-notereadAdded after the upgrade.
no-descread
no-triggerwriteThis is a valid-length description for the memory candidate in the test.
ok-namereadThis is a valid-length description for the memory candidate in the test.
only-stashreadonly one
outputFormatreadOutput format (json, xml, yaml)
overreadDescription that
pathreadShow paths to config, bundle, cache, and index
plain-wrappedreadThe release gate runs on localhost:5173 and preserves the complete description across physical lines.
planreadCompile and freeze a workflow WITHOUT publishing it: the canonical step graph, per-step frozen target
port-inform-phasewriteRun one phase of the inform→akm port under the plan\
proposalreadManage the proposal queue: list, show, diff, accept, reject, reopen, revert, extract, new, drain
prunedestructiveRemove installed scheduler entries
regionreaddeployment region
registryreadManage bundle registries
rejectreadReject a proposal and record the reason
release-policyreadRelease policy for production deploys
release-stashreadgithub description
rememberreadRecord a memory in the default bundle
removedestructiveRemove an env file (and its .sensitive marker, if any)
renamewriteRename a configured bundle
reopenwriteReopen rejected proposals: move them back to pending, keeping the rejection in their history.
resumewriteResume a blocked or failed workflow run, flipping it back to active
revertreadRevert an accepted proposal: restore the prior asset content from the backup captured at promotion time.
runwriteResolve a stored command through its bundle adapter, apply portable arguments, and execute one fresh session
safe-packagereadtyped registry package
searchreadSearch the bundle
secretreadManage secrets — one standalone sensitive value per file (an API token, a PEM private key, a TLS cert).\n\n
setwriteSet a configuration value by key; prints the resulting config with ok: true
setupreadInteractive configuration wizard. Configures embeddings/LLM connections (for indexing/enrichment), agent profiles (CLI agent, embedded SDK, or none), sources, and registries. Shows which features are enabled at the end. Use --config <json> or --yes for non-interactive/scripting mode.
setup.shreadSetup script for local development
short-descreadtoo short
showreadShow a single proposal and its validation findings
spectral-quokka-rotationreadExact operator procedure
statusreadRead-only check of every pending migration
syncwriteSync changes in a git-backed bundle: commits (and pushes when writable + remote is configured). No-op for non-git bundles.
taskwriteSchedule recurring commands, prompts, and workflows through the OS scheduler (cron / launchd / schtasks)
unsetreadUnset an optional configuration key or whole embedding/engine section; prints the resulting config with ok: true
updatewriteRefresh one or all configured bundles and reconcile their index. Git refresh is explicit; schedule this command for automatic updates.
upgradewriteUpgrade akm to the latest release, then update the akm plugin of each installed harness
validreadA valid param
validatereadParse a single task file by filesystem path — not a concept ref, and the file need not live in a
verbosewriteEnable verbose logging
vpn-before-deploywriteAlways connect to the corporate VPN before running deploy.sh — otherwise stage rollouts hang.
vpn-deploy-orderwriteProduction deploys require the VPN connection before the deployment script starts.
workflowwriteExperimental: author, inspect, and execute step-by-step workflow assets
xreada
zetareadtwinmarker
04

Trust audit

BLOCKgrade F · trust 34/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (12 observation(s))
Network
declared (11 observation(s))
Shell
declared (7 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/storage/database.ts:94
exec(sql: string): void;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/storage/database.ts:221
exec(sql: string): void;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/core/errors.ts:227
"Choose a path inside your home directory (e.g. ~/akm) or another empty workspace. The bundle directory cannot be the filesystem root, your home directory itself, or a sensitive system path like /etc,
Why it matters. touches a credential store
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
src/core/network-policy.ts:40
if (bare === "metadata.google.internal" || bare === "metadata.goog") return "metadata";
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
docs/architecture/testing/manual-testing-checklist.md:562
unsafe root. `--no-init` must not bypass target safety.
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
src/tasks/backends/schtasks.ts:530
fs.writeFileSync(file, `${content}`, { encoding: "utf16le" });
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md:241
`postgresql://postgres:postgres@localhost:5432/postgres` — the standard local-dev default — in
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/commands/agent-dispatch-engine.test.ts:30
const secret = "sk-interactive-boundary-secret-123456";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/commands/improve/improve-lowering-notices.test.ts:23
const secret = "IMPROVE-NOTICE-SECRET";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/commands/improve/improve-lowering-notices.test.ts:143
const secret = "IMPROVE-PLAN-NOTICE-SECRET";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/config-cli-redaction.test.ts:203
apiKey: "sk-literal-secret-other",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/config-cli-redaction.test.ts:215
apiKey: "sk-literal-secret-local",
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/integration/workflows/immutable-resolution-v4-red.test.ts:278
"      - id: leaked\n        run: printf no\n        env:\n          API_TOKEN: github_pat_012345678901234567890123456789",
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/tasks-runtime-v3-runner.test.ts:100
'version: 4\nrun: printf no\nenv:\n  API_TOKEN: github_pat_012345678901234567890123456789\nschedule: "@daily"\n',
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/workflows/param-secrets.test.ts:29
list: ["fine", "ghp_0123456789abcdefABCDEF0123456789abcd"],
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/workflows/workflow-environment.test.ts:215
const currentToken = "github_pat_current_value_only_01234567890123456789";
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/commands/remember-import-supersedes.test.ts:469
const secretBytes = "-----BEGIN PRIVATE KEY-----\nabc123\n-----END PRIVATE KEY-----\n";
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/redaction.test.ts:114
"-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA1234\nmore base64 lines\n-----END RSA PRIVATE KEY-----";
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/redaction.test.ts:116
"-----BEGIN RSA PRIVATE KEY-----[REDACTED]-----END RSA PRIVATE KEY-----",
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/secret.test.ts:141
const pem = "-----BEGIN OPENSSH PRIVATE KEY-----\nline1\nline2\n-----END OPENSSH PRIVATE KEY-----\n";
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/tasks/log-redaction.test.ts:160
"-----BEGIN RSA PRIVATE KEY-----",
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
prune, remove
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/stashes/minimal/agents/.stash.json
.stash.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/stashes/minimal/commands/.stash.json
.stash.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
tests/fixtures/stashes/minimal/knowledge/.stash.json
.stash.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 400ad4047f3efull audit observations/trust-audit/mcp-server/itlackey__akm.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11400ad4047f3eBLOCKF34first audit
06

Questions

What is the akm-cli MCP server?

Agent Knowledge Manager (akm). A CLI tool to manage AI agent knowledge, memories, skills, and more.

What tools does akm-cli expose?

126 in total: 90 read-only, 34 that write, and 2 that can delete or overwrite (prune, remove). Every one is listed on this page with its risk.

Is akm-cli safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (34/100) and found 5 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does akm-cli need?

It reads AKM_EMBED_API_KEY, AKM_LLM_API_KEY, AKM_PIPELINE_TEST_KEY, AKM_PROBE_KEY_TEST, AKM_REQUIRED_DRY_RUN_SECRET, DEPLOY_TOKEN, FAST_API_KEY, GH_TOKEN, GITHUB_TOKEN, OPENCODE_API_KEY and X_BEARER_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How current is this page?

The grade is for one exact copy of the source (400ad4047f3e), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement