paperclipai/paperclip · error · Error
No audit result returned for skill ${skill.key}.
Error message
No audit result returned for skill ${skill.key}. What it means
Thrown by auditCompanySkills() when POST /api/companies/{companyId}/skills/{skillId}/audit returns null/undefined. The audit endpoint is expected to return a CompanySkillAuditResult; null indicates the server did not produce an audit (empty body, unsupported route, or upstream error swallowed).
Source
Thrown at cli/src/commands/client/skills.ts:731
}
}
return rows;
}
async function auditCompanySkills(
ctx: ResolvedClientContext,
skillRef: string | undefined,
): Promise<Array<{ skill: CompanySkillReferenceTarget; audit: CompanySkillAuditResult }>> {
const skills = await listCompanySkills(ctx);
const selected = skillRef ? [resolveCompanySkillReference(skills, skillRef)] : skills;
const rows: Array<{ skill: CompanySkillReferenceTarget; audit: CompanySkillAuditResult }> = [];
for (const skill of selected) {
const audit = await ctx.api.post<CompanySkillAuditResult>(
`/api/companies/${ctx.companyId}/skills/${encodeURIComponent(skill.id)}/audit`,
{},
);
if (!audit) {
throw new Error(`No audit result returned for skill ${skill.key}.`);
}
rows.push({ skill: toSkillReferenceTarget(skill), audit });
}
return rows;
}
async function resolveAgent(ctx: ResolvedClientContext, agentRef: string): Promise<Agent> {
const params = new URLSearchParams({ companyId: ctx.companyId ?? "" });
const agent = await ctx.api.get<Agent>(`/api/agents/${encodeURIComponent(agentRef)}?${params.toString()}`);
if (!agent) {
throw new Error(`Agent not found: ${agentRef}`);
}
return agent;
}
function printCompanySkillRows(rows: Array<CompanySkillListItem | CompanySkill>): void {
if (rows.length === 0) {
printOutput([], { json: false });View on GitHub (pinned to 67001ec6eb)
Solutions
- Verify server version supports skill audit (`/api/health`, release notes).
- Try auditing a different skill to isolate whether it is skill-specific or route-level.
- Reinstall the skill (`skills install --force`) if its bytes are missing, then re-audit.
Example fix
# before paperclipai skills audit my-skill # after: confirm route exists, then re-audit a known-good skill paperclipai skills audit other-skill
Defensive patterns
Strategy: try-catch
Type guard
function isAuditResult(v: unknown): v is CompanySkillAuditResult {
return v != null && typeof v === "object";
} Try / catch
try {
await run(["skills", "audit", ref]);
} catch (err) {
if (err instanceof Error && /No audit result returned/.test(err.message)) {
console.error("Audit route returned nothing; verify server supports skill audit.");
process.exit(2);
}
throw err;
} Prevention
- Confirm the server version implements the audit route.
- Audit a known-good skill to isolate skill-specific failures.
- Reinstall skills with missing bytes before auditing.
When it happens
Trigger: `paperclipai skills audit [skillRef]` against a server that does not implement the audit route, returns 200 with no JSON, or fails to audit a particular skill (e.g. empty skill body).
Common situations: CLI newer than the deployed server (audit added later), skill whose files are empty/missing on disk, or an audit worker that crashed server-side but still returned 2xx.
Related errors
- No update status returned for skill ${skill.key}.
- Catalog skill not found: ${catalogRef}
- Approval request failed.
- Could not locate local Paperclip skills directory. Expected
- Failed to create agent token
AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12).
Data as JSON: /api/errors/1c1fce8fe412348f.
Report an issue: GitHub.