Derive a Skill Matrix or Agent Profile
You have a discipline, a level, and a track. You can also have only a discipline and a level. You need the derived skill matrix or agent profile as structured data. This page covers one bounded task. It takes you from those three coordinates to a profile object. You can render, store, or pass that object downstream.
Prerequisites
Complete the
Integrate with the Engineering Standard
guide first. This page assumes you installed
@forwardimpact/libskill and
@forwardimpact/map. It also assumes you know how to
load standard data with
createDataLoader(createDefaultRuntime()).loadAllData().
Load data and resolve coordinates
Load the standard data. Then find the entities for your role coordinates:
import { createDataLoader } from "@forwardimpact/map/loader";
import { createDefaultRuntime } from "@forwardimpact/libutil/runtime";
const loader = createDataLoader(createDefaultRuntime());
const data = await loader.loadAllData("data/pathway");
const discipline = data.disciplines.find((d) => d.id === "software-engineering");
const level = data.levels.find((l) => l.id === "J070");
const track = data.tracks.find((t) => t.id === "platform");
If any of these return undefined, the ID does not exist
in your standard. List available values with
npx fit-pathway discipline --list,
npx fit-pathway level --list, or
npx fit-pathway track --list.
Derive a skill matrix for a role
Call deriveSkillMatrix with the resolved entities:
import { deriveSkillMatrix } from "@forwardimpact/libskill";
const matrix = deriveSkillMatrix({
discipline,
level,
track,
skills: data.skills,
capabilities: data.capabilities,
});
for (const entry of matrix) {
console.log(`${entry.type.padEnd(12)} ${entry.skillName.padEnd(30)} ${entry.proficiency}`);
}
Expected output (abbreviated):
core Architecture Design practitioner
core Code Review practitioner
core Full Stack Development practitioner
supporting CI/CD working
supporting Cloud Platforms working
broad Data Modeling foundational
track Change Management working
track Incident Management working
The track entries appear only when you pass a track.
Omit track (or pass null) to get the
generalist matrix.
Derive a behaviour profile for a role
Call deriveBehaviourProfile with the same coordinates:
import { deriveBehaviourProfile } from "@forwardimpact/libskill";
const profile = deriveBehaviourProfile({
discipline,
level,
track,
behaviours: data.behaviours,
});
for (const entry of profile) {
console.log(`${entry.behaviourName.padEnd(30)} ${entry.maturity}`);
}
Expected output (abbreviated):
Build Polymathic Knowledge role-modeling
Communicate with Precision practicing
Own the Outcome practicing
Stay Relentlessly Curious practicing
Think in Systems role-modeling
Derive an agent profile instead
Agent profiles use the same derivation logic. They also apply
agent-specific policies. The derivation removes human-only skills.
It keeps only the highest-proficiency skills. It sorts both skills
and behaviours by level descending. Use
prepareAgentProfile for this:
import { prepareAgentProfile } from "@forwardimpact/libskill/profile";
const agentProfile = prepareAgentProfile({
discipline,
track,
level,
skills: data.skills,
behaviours: data.behaviours,
capabilities: data.capabilities,
});
console.log("Skills:", agentProfile.skillMatrix.length);
console.log("Behaviours:", agentProfile.behaviourProfile.length);
console.log("Top skill:", agentProfile.skillMatrix[0]?.skillName);
console.log("Top behaviour:", agentProfile.behaviourProfile[0]?.behaviourName);
Expected output:
Skills: 14
Behaviours: 5
Top skill: Architecture Design
Top behaviour: Think in Systems
The agent matrix is smaller because it excludes human-only skills such as People Management. The sort order places the strongest skills and behaviours first. That order helps when you generate agent instructions, where the most important capabilities should lead.
Get both at once with prepareBaseProfile
When you need the skill matrix, behaviour profile, and derived
responsibilities in a single call, use
prepareBaseProfile:
import { prepareBaseProfile } from "@forwardimpact/libskill/profile";
const base = prepareBaseProfile({
discipline,
track,
level,
skills: data.skills,
behaviours: data.behaviours,
capabilities: data.capabilities,
});
console.log("Skills:", base.skillMatrix.length);
console.log("Behaviours:", base.behaviourProfile.length);
console.log("Responsibilities:", base.derivedResponsibilities.length);
Expected output:
Skills: 16
Behaviours: 5
Responsibilities: 4
prepareBaseProfile returns the raw derivation without
agent-specific filtering. Use it when you build features for the
general role audience. Use prepareAgentProfile when the
consumer is an agent configuration pipeline.
Verify
You reach the outcome of this guide when:
- You can resolve discipline, level, and track from their string IDs to the loaded data objects.
- You can derive a skill matrix and read each entry's type, proficiency, and description.
- You can derive a behaviour profile and read each entry's maturity level.
-
You can choose between
prepareBaseProfile(full role) andprepareAgentProfile(agent-optimized) depending on your use case.